changeset: 7159:7155392ed28b user: Kevin McCarthy <ke...@8t8.us> date: Fri Sep 22 11:07:27 2017 -0700 link: http://dev.mutt.org/hg/mutt/rev/7155392ed28b
Fix imap sync segfault due to inactive headers during an expunge. (closes #3971) Mutt has several places where it turns off h->active as a hack. For example to avoid FLAG updates, or to exclude from imap_exec_msgset. Unfortunately, when a reopen is allowed and the IMAP_EXPUNGE_PENDING flag becomes set (e.g. a flag update to a modified header), imap_expunge_mailbox() will be called by imap_cmd_finish(). The mx_update_tables() would free and remove these "inactive" headers, despite that an EXPUNGE was not received for them. This would result in memory leaks and segfaults due to dangling pointers in the msn_index and uid_hash. There should probably be a more elegant solution, removing the initial hacks. However, this is causing a segfault, and the best solution right now is to turn active back on for non-expunged messages in imap_expunge_mailbox(). Extra thanks to chdiza, who bravely runs tip and found this issue quickly. changeset: 7160:9e53c623d102 user: Kevin McCarthy <ke...@8t8.us> date: Fri Sep 22 11:12:25 2017 -0700 link: http://dev.mutt.org/hg/mutt/rev/9e53c623d102 Close the imap socket for the selected mailbox on error. The new $imap_poll_timeout calls the cmd_handle_fatal() error handler on timeout, which is supposed to close and cleanup. However, for the currently selected mailbox, the error handler was not closing the socket after closing up the mailbox. This left extra SSL/GnuTLS data around and was causing errors on an attempt to reconnect. Thanks to Fabian Groffen for reporting the issue. changeset: 7161:19c81a140c6e user: Kevin McCarthy <ke...@8t8.us> date: Fri Sep 22 11:14:27 2017 -0700 link: http://dev.mutt.org/hg/mutt/rev/19c81a140c6e Add missing IMAP_CMD_POLL flag in imap buffy check. I missed adding the flag to one of the imap_exec() calls inside the loop, when a different server is encountered in the mailboxes list. changeset: 7162:40aa3d5c7f0a user: Kevin McCarthy <ke...@8t8.us> date: Fri Sep 22 11:26:19 2017 -0700 link: http://dev.mutt.org/hg/mutt/rev/40aa3d5c7f0a merge stable diffs (truncated from 2040 to 950 lines): diff -r 12d3714d8bfa -r 40aa3d5c7f0a OPS --- a/OPS Thu Sep 14 12:43:32 2017 -0700 +++ b/OPS Fri Sep 22 11:26:19 2017 -0700 @@ -144,7 +144,7 @@ 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_PURGE_MESSAGE "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" diff -r 12d3714d8bfa -r 40aa3d5c7f0a browser.c --- a/browser.c Thu Sep 14 12:43:32 2017 -0700 +++ b/browser.c Fri Sep 22 11:26:19 2017 -0700 @@ -1014,6 +1014,8 @@ mutt_message _("Mailbox deleted."); init_menu (&state, menu, title, sizeof (title), buffy); } + else + mutt_error _("Mailbox deletion failed."); } else mutt_message _("Mailbox not deleted."); diff -r 12d3714d8bfa -r 40aa3d5c7f0a crypt.c --- a/crypt.c Thu Sep 14 12:43:32 2017 -0700 +++ b/crypt.c Fri Sep 22 11:26:19 2017 -0700 @@ -153,6 +153,16 @@ return -1; } } + else if (!mutt_strcasecmp ("flowed", + mutt_get_parameter ("format", msg->content->parameter))) + { + if ((i = query_quadoption (OPT_PGPMIMEAUTO, + _("Inline PGP can't be used with format=flowed. Revert to PGP/MIME?"))) != MUTT_YES) + { + mutt_error _("Mail not sent: inline PGP can't be used with format=flowed."); + return -1; + } + } else { /* they really want to send it inline... go for it */ diff -r 12d3714d8bfa -r 40aa3d5c7f0a gen_defs --- a/gen_defs Thu Sep 14 12:43:32 2017 -0700 +++ b/gen_defs Fri Sep 22 11:26:19 2017 -0700 @@ -10,7 +10,10 @@ help) echo "#ifdef HELP_C" echo "const char *HelpStrings[] = {" - expr='s;^[^ ]* *\(.*\); N_(\1),;' + expr='i\ + /* L10N: Help screen function description.\ + Generated from one of the OPS files. */ +s;^[^ ]* *\(.*\); N_(\1),;' ;; *) echo "enum {" diff -r 12d3714d8bfa -r 40aa3d5c7f0a imap/command.c --- a/imap/command.c Thu Sep 14 12:43:32 2017 -0700 +++ b/imap/command.c Fri Sep 22 11:26:19 2017 -0700 @@ -464,6 +464,7 @@ (idata->reopen & IMAP_REOPEN_ALLOW)) { mx_fastclose_mailbox (idata->ctx); + mutt_socket_close (idata->conn); mutt_error (_("Mailbox closed")); mutt_sleep (1); idata->state = IMAP_DISCONNECTED; diff -r 12d3714d8bfa -r 40aa3d5c7f0a imap/imap.c --- a/imap/imap.c Thu Sep 14 12:43:32 2017 -0700 +++ b/imap/imap.c Fri Sep 22 11:26:19 2017 -0700 @@ -290,7 +290,26 @@ imap_free_header_data ((IMAP_HEADER_DATA**)&h->data); } else + { h->index = i; + /* Mutt has several places where it turns off h->active as a + * hack. For example to avoid FLAG updates, or to exclude from + * imap_exec_msgset. + * + * Unfortunately, when a reopen is allowed and the IMAP_EXPUNGE_PENDING + * flag becomes set (e.g. a flag update to a modified header), + * this function will be called by imap_cmd_finish(). + * + * The mx_update_tables() will free and remove these "inactive" headers, + * despite that an EXPUNGE was not received for them. + * This would result in memory leaks and segfaults due to dangling + * pointers in the msn_index and uid_hash. + * + * So this is another hack to work around the hacks. We don't want to + * remove the messages, so make sure active is on. + */ + h->active = 1; + } } #if USE_HCACHE @@ -1600,7 +1619,7 @@ { /* Send commands to previous server. Sorting the buffy list * may prevent some infelicitous interleavings */ - if (imap_exec (lastdata, NULL, IMAP_CMD_FAIL_OK) == -1) + if (imap_exec (lastdata, NULL, IMAP_CMD_FAIL_OK | IMAP_CMD_POLL) == -1) dprint (1, (debugfile, "Error polling mailboxes\n")); lastdata = NULL; diff -r 12d3714d8bfa -r 40aa3d5c7f0a po/fr.po --- a/po/fr.po Thu Sep 14 12:43:32 2017 -0700 +++ b/po/fr.po Fri Sep 22 11:26:19 2017 -0700 @@ -21,8 +21,8 @@ msgstr "" "Project-Id-Version: Mutt 1.8.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-02 11:32-0700\n" -"PO-Revision-Date: 2017-08-12 22:15+0200\n" +"POT-Creation-Date: 2017-09-22 17:50+0200\n" +"PO-Revision-Date: 2017-09-22 17:51+0200\n" "Last-Translator: Vincent Lefevre <vinc...@vinc17.net>\n" "Language-Team: Vincent Lefevre <vinc...@vinc17.net>\n" "Language: fr\n" @@ -59,7 +59,7 @@ msgstr "Sélectionner" #: addrbook.c:41 browser.c:49 compose.c:125 crypt-gpgme.c:4088 curs_main.c:493 -#: mutt_ssl.c:1257 mutt_ssl_gnutls.c:1023 pager.c:1981 pgpkey.c:522 +#: mutt_ssl.c:1257 mutt_ssl_gnutls.c:1024 pager.c:1981 pgpkey.c:522 #: postpone.c:44 query.c:53 recvattach.c:61 smime.c:440 msgid "Help" msgstr "Aide" @@ -219,7 +219,7 @@ msgstr "Masque" # , c-format -#: browser.c:426 browser.c:1088 +#: browser.c:426 browser.c:1090 #, c-format msgid "%s is not a directory." msgstr "%s n'est pas un répertoire." @@ -246,7 +246,7 @@ msgid "Can't attach a directory!" msgstr "Impossible d'attacher un répertoire !" -#: browser.c:737 browser.c:1154 browser.c:1249 +#: browser.c:737 browser.c:1156 browser.c:1251 msgid "No files match the file mask" msgstr "Aucun fichier ne correspond au masque" @@ -275,43 +275,47 @@ msgid "Mailbox deleted." msgstr "Boîte aux lettres supprimée." -#: browser.c:1019 +#: browser.c:1018 +msgid "Mailbox deletion failed." +msgstr "La suppression de la boîte aux lettres a échoué." + +#: browser.c:1021 msgid "Mailbox not deleted." msgstr "Boîte aux lettres non supprimée." -#: browser.c:1038 +#: browser.c:1040 msgid "Chdir to: " msgstr "Changement de répertoire vers : " -#: browser.c:1077 browser.c:1148 +#: browser.c:1079 browser.c:1150 msgid "Error scanning directory." msgstr "Erreur de lecture du répertoire." -#: browser.c:1099 +#: browser.c:1101 msgid "File Mask: " msgstr "Masque de fichier : " -#: browser.c:1169 +#: browser.c:1171 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:1170 +#: browser.c:1172 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:1171 +#: browser.c:1173 msgid "dazn" msgstr "datn" -#: browser.c:1238 +#: browser.c:1240 msgid "New file name: " msgstr "Nouveau nom de fichier : " -#: browser.c:1266 +#: browser.c:1268 msgid "Can't view a directory" msgstr "Impossible de visualiser un répertoire" -#: browser.c:1283 +#: browser.c:1285 msgid "Error trying to view file" msgstr "Erreur en essayant de visualiser le fichier" @@ -1422,7 +1426,7 @@ msgid "All matching keys are marked expired/revoked." msgstr "Toutes les clés correspondantes sont marquées expirées/révoquées." -#: crypt-gpgme.c:4080 mutt_ssl.c:1255 mutt_ssl_gnutls.c:1021 pgpkey.c:515 +#: crypt-gpgme.c:4080 mutt_ssl.c:1255 mutt_ssl_gnutls.c:1022 pgpkey.c:515 #: smime.c:435 msgid "Exit " msgstr "Quitter " @@ -1626,32 +1630,40 @@ msgstr "" "Message non envoyé : PGP en ligne est impossible avec des attachements." -#: crypt.c:159 cryptglue.c:110 pgpkey.c:564 pgpkey.c:753 +#: crypt.c:160 +msgid "Inline PGP can't be used with format=flowed. Revert to PGP/MIME?" +msgstr "PGP en ligne est impossible avec format=flowed. Utiliser PGP/MIME ?" + +#: crypt.c:162 +msgid "Mail not sent: inline PGP can't be used with format=flowed." +msgstr "Message non envoyé : PGP en ligne est impossible avec format=flowed." + +#: crypt.c:169 cryptglue.c:110 pgpkey.c:564 pgpkey.c:753 msgid "Invoking PGP..." msgstr "Appel de PGP..." -#: crypt.c:168 +#: crypt.c:178 msgid "Message can't be sent inline. Revert to using PGP/MIME?" msgstr "Le message ne peut pas être envoyé en ligne. Utiliser PGP/MIME ?" -#: crypt.c:170 send.c:1606 +#: crypt.c:180 send.c:1606 msgid "Mail not sent." msgstr "Message non envoyé." -#: crypt.c:483 +#: crypt.c:493 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:703 crypt.c:747 +#: crypt.c:713 crypt.c:757 msgid "Trying to extract PGP keys...\n" msgstr "Tentative d'extraction de clés PGP...\n" -#: crypt.c:727 crypt.c:767 +#: crypt.c:737 crypt.c:777 msgid "Trying to extract S/MIME certificates...\n" msgstr "Tentative d'extraction de certificats S/MIME...\n" -#: crypt.c:927 +#: crypt.c:937 #, c-format msgid "" "[-- Error: Unknown multipart/signed protocol %s! --]\n" @@ -1660,7 +1672,7 @@ "[-- Erreur : Protocole multipart/signed %s inconnu ! --]\n" "\n" -#: crypt.c:961 +#: crypt.c:971 msgid "" "[-- Error: Inconsistent multipart/signed structure! --]\n" "\n" @@ -1668,7 +1680,7 @@ "[-- Erreur : Structure multipart/signed incohérente ! --]\n" "\n" -#: crypt.c:1000 +#: crypt.c:1010 #, c-format msgid "" "[-- Warning: We can't verify %s/%s signatures. --]\n" @@ -1677,7 +1689,7 @@ "[-- Attention : les signatures %s/%s ne peuvent pas être vérifiées. --]\n" "\n" -#: crypt.c:1012 +#: crypt.c:1022 msgid "" "[-- The following data is signed --]\n" "\n" @@ -1685,7 +1697,7 @@ "[-- Les données suivantes sont signées --]\n" "\n" -#: crypt.c:1018 +#: crypt.c:1028 msgid "" "[-- Warning: Can't find any signatures. --]\n" "\n" @@ -1693,7 +1705,7 @@ "[-- Attention : Impossible de trouver des signatures. --]\n" "\n" -#: crypt.c:1024 +#: crypt.c:1034 msgid "" "\n" "[-- End of signed data --]\n" @@ -2537,78 +2549,78 @@ msgstr "Erreur à l'ouverture de la boîte aux lettres" # , c-format -#: imap/imap.c:818 imap/imap.c:2190 imap/message.c:1014 muttlib.c:1683 +#: imap/imap.c:818 imap/imap.c:2212 imap/message.c:1014 muttlib.c:1683 #, c-format msgid "Create %s?" msgstr "Créer %s ?" -#: imap/imap.c:1215 +#: imap/imap.c:1228 msgid "Expunge failed" msgstr "Expunge a échoué" # , c-format -#: imap/imap.c:1227 +#: imap/imap.c:1240 #, c-format msgid "Marking %d messages deleted..." msgstr "Marquage de %d messages à effacer..." # , c-format -#: imap/imap.c:1259 +#: imap/imap.c:1272 #, c-format msgid "Saving changed messages... [%d/%d]" msgstr "La sauvegarde a changé des messages... [%d/%d]" -#: imap/imap.c:1315 +#: imap/imap.c:1328 msgid "Error saving flags. Close anyway?" msgstr "Erreur en sauvant les indicateurs. Fermer tout de même ?" -#: imap/imap.c:1323 +#: imap/imap.c:1336 msgid "Error saving flags" msgstr "Erreur en sauvant les indicateurs" -#: imap/imap.c:1346 +#: imap/imap.c:1359 msgid "Expunging messages from server..." msgstr "Effacement des messages sur le serveur..." -#: imap/imap.c:1352 +#: imap/imap.c:1365 msgid "imap_sync_mailbox: EXPUNGE failed" msgstr "imap_sync_mailbox : EXPUNGE a échoué" -#: imap/imap.c:1839 +#: imap/imap.c:1852 #, c-format msgid "Header search without header name: %s" msgstr "Recherche d'en-tête sans nom d'en-tête : %s" -#: imap/imap.c:1910 +#: imap/imap.c:1923 msgid "Bad mailbox name" msgstr "Mauvaise boîte aux lettres" # , c-format -#: imap/imap.c:1934 +#: imap/imap.c:1947 #, c-format msgid "Subscribing to %s..." msgstr "Abonnement à %s..." # , c-format -#: imap/imap.c:1936 +#: imap/imap.c:1949 #, c-format msgid "Unsubscribing from %s..." msgstr "Désabonnement de %s..." # , c-format -#: imap/imap.c:1946 +#: imap/imap.c:1959 #, c-format msgid "Subscribed to %s" msgstr "Abonné à %s" # , c-format -#: imap/imap.c:1948 +#: imap/imap.c:1961 #, c-format msgid "Unsubscribed from %s" msgstr "Désabonné de %s" # , c-format -#: imap/imap.c:2175 imap/message.c:978 +#: imap/imap.c:2197 imap/message.c:978 #, c-format msgid "Copying %d messages to %s..." msgstr "Copie de %d messages dans %s..." @@ -3494,40 +3506,40 @@ msgid "Certificate host check failed: %s" msgstr "Échec de vérification de machine : %s" -#: mutt_ssl.c:1181 mutt_ssl_gnutls.c:868 +#: mutt_ssl.c:1181 mutt_ssl_gnutls.c:869 msgid "This certificate belongs to:" msgstr "Ce certificat appartient à :" -#: mutt_ssl.c:1189 mutt_ssl_gnutls.c:907 +#: mutt_ssl.c:1189 mutt_ssl_gnutls.c:908 msgid "This certificate was issued by:" msgstr "Ce certificat a été émis par :" -#: mutt_ssl.c:1197 mutt_ssl_gnutls.c:946 +#: mutt_ssl.c:1197 mutt_ssl_gnutls.c:947 #, c-format msgid "This certificate is valid" msgstr "Ce certificat est valide" -#: mutt_ssl.c:1198 mutt_ssl_gnutls.c:949 +#: mutt_ssl.c:1198 mutt_ssl_gnutls.c:950 #, c-format msgid " from %s" msgstr " de %s" -#: mutt_ssl.c:1200 mutt_ssl_gnutls.c:953 +#: mutt_ssl.c:1200 mutt_ssl_gnutls.c:954 #, c-format msgid " to %s" msgstr " à %s" -#: mutt_ssl.c:1206 mutt_ssl_gnutls.c:958 +#: mutt_ssl.c:1206 mutt_ssl_gnutls.c:959 #, c-format msgid "SHA1 Fingerprint: %s" msgstr "Empreinte SHA1 : %s" -#: mutt_ssl.c:1209 mutt_ssl_gnutls.c:961 +#: mutt_ssl.c:1209 mutt_ssl_gnutls.c:962 #, c-format msgid "MD5 Fingerprint: %s" msgstr "Empreinte MD5 : %s" -#: mutt_ssl.c:1212 mutt_ssl_gnutls.c:990 +#: mutt_ssl.c:1212 mutt_ssl_gnutls.c:991 #, c-format msgid "SSL Certificate check (certificate %d of %d in chain)" msgstr "Vérification du certificat SSL (certificat %d sur %d dans la chaîne)" @@ -3546,7 +3558,7 @@ msgid "(r)eject, accept (o)nce, (a)ccept always, (s)kip" msgstr "(r)ejeter, accepter (u)ne fois, (a)ccepter toujours, (s)auter" -#: mutt_ssl.c:1244 mutt_ssl_gnutls.c:999 +#: mutt_ssl.c:1244 mutt_ssl_gnutls.c:1000 msgid "(r)eject, accept (o)nce, (a)ccept always" msgstr "(r)ejeter, accepter (u)ne fois, (a)ccepter toujours" @@ -3554,15 +3566,15 @@ msgid "(r)eject, accept (o)nce, (s)kip" msgstr "(r)ejeter, accepter (u)ne fois, (s)auter" -#: mutt_ssl.c:1251 mutt_ssl_gnutls.c:1010 +#: mutt_ssl.c:1251 mutt_ssl_gnutls.c:1011 msgid "(r)eject, accept (o)nce" msgstr "(r)ejeter, accepter (u)ne fois" -#: mutt_ssl.c:1284 mutt_ssl_gnutls.c:1066 +#: mutt_ssl.c:1284 mutt_ssl_gnutls.c:1067 msgid "Warning: Couldn't save certificate" msgstr "Attention : le certificat n'a pas pu être sauvé" -#: mutt_ssl.c:1289 mutt_ssl_gnutls.c:1071 +#: mutt_ssl.c:1289 mutt_ssl_gnutls.c:1072 msgid "Certificate saved" msgstr "Certificat sauvé" @@ -3586,36 +3598,36 @@ msgid "SSL/TLS connection using %s (%s/%s/%s)" msgstr "Connexion SSL/TLS utilisant %s (%s/%s/%s)" -#: mutt_ssl_gnutls.c:695 mutt_ssl_gnutls.c:847 +#: mutt_ssl_gnutls.c:696 mutt_ssl_gnutls.c:848 msgid "Error initialising gnutls certificate data" msgstr "Erreur d'initialisation des données du certificat gnutls" -#: mutt_ssl_gnutls.c:702 mutt_ssl_gnutls.c:854 +#: mutt_ssl_gnutls.c:703 mutt_ssl_gnutls.c:855 msgid "Error processing certificate data" msgstr "Erreur de traitement des données du certificat" -#: mutt_ssl_gnutls.c:838 +#: mutt_ssl_gnutls.c:839 msgid "Warning: Server certificate was signed using an insecure algorithm" msgstr "" "Attention : le certificat du serveur a été signé avec un algorithme peu sûr" -#: mutt_ssl_gnutls.c:966 +#: mutt_ssl_gnutls.c:967 msgid "WARNING: Server certificate is not yet valid" msgstr "ATTENTION ! Le certificat du serveur n'est pas encore valide" -#: mutt_ssl_gnutls.c:971 +#: mutt_ssl_gnutls.c:972 msgid "WARNING: Server certificate has expired" msgstr "ATTENTION ! Le certificat du serveur a expiré" -#: mutt_ssl_gnutls.c:976 +#: mutt_ssl_gnutls.c:977 msgid "WARNING: Server certificate has been revoked" msgstr "ATTENTION ! Le certificat du serveur a été révoqué" -#: mutt_ssl_gnutls.c:981 +#: mutt_ssl_gnutls.c:982 msgid "WARNING: Server hostname does not match certificate" msgstr "ATTENTION ! Le nom du serveur ne correspond pas au certificat" -#: mutt_ssl_gnutls.c:986 +#: mutt_ssl_gnutls.c:987 msgid "WARNING: Signer of server certificate is not a CA" msgstr "ATTENTION ! Le signataire du certificat du serveur n'est pas un CA" @@ -3625,7 +3637,7 @@ #. * This is an interactive certificate confirmation prompt for #. * a GNUTLS connection. #. -#: mutt_ssl_gnutls.c:1006 +#: mutt_ssl_gnutls.c:1007 msgid "roa" msgstr "rua" @@ -3635,20 +3647,20 @@ #. * These is an interactive certificate confirmation prompt for #. * a GNUTLS connection. #. -#: mutt_ssl_gnutls.c:1017 +#: mutt_ssl_gnutls.c:1018 msgid "ro" msgstr "ru" -#: mutt_ssl_gnutls.c:1100 mutt_ssl_gnutls.c:1135 mutt_ssl_gnutls.c:1145 +#: mutt_ssl_gnutls.c:1101 mutt_ssl_gnutls.c:1136 mutt_ssl_gnutls.c:1146 msgid "Unable to get certificate from peer" msgstr "Impossible d'obtenir le certificat de la machine distante" -#: mutt_ssl_gnutls.c:1106 +#: mutt_ssl_gnutls.c:1107 #, c-format msgid "Certificate verification error (%s)" msgstr "Erreur de vérification du certificat (%s)" -#: mutt_ssl_gnutls.c:1115 +#: mutt_ssl_gnutls.c:1116 msgid "Certificate is not X.509" msgstr "Le certificat n'est pas de type X.509" @@ -4924,846 +4936,1266 @@ msgid "Parent message is not visible in this limited view." msgstr "Le message père n'est pas visible dans cette vue limitée." -#: ../keymap_alldefs.h:5 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:7 msgid "null operation" msgstr "opération nulle" -#: ../keymap_alldefs.h:6 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:10 msgid "end of conditional execution (noop)" msgstr "fin d'exécution conditionnelle (noop)" -#: ../keymap_alldefs.h:7 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:13 msgid "force viewing of attachment using mailcap" msgstr "" "forcer la visualisation d'un attachment en utilisant le fichier mailcap" -#: ../keymap_alldefs.h:8 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:16 msgid "view attachment as text" msgstr "visualiser un attachment en tant que texte" -#: ../keymap_alldefs.h:9 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:19 msgid "Toggle display of subparts" msgstr "Inverser l'affichage des sous-parties" -#: ../keymap_alldefs.h:10 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:22 msgid "move to the bottom of the page" msgstr "aller en bas de la page" -#: ../keymap_alldefs.h:11 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:25 msgid "remail a message to another user" msgstr "renvoyer un message à un autre utilisateur" -#: ../keymap_alldefs.h:12 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:28 msgid "select a new file in this directory" msgstr "sélectionner un nouveau fichier dans ce répertoire" -#: ../keymap_alldefs.h:13 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:31 msgid "view file" msgstr "visualiser le fichier" -#: ../keymap_alldefs.h:14 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:34 msgid "display the currently selected file's name" msgstr "afficher le nom du fichier sélectionné actuellement" -#: ../keymap_alldefs.h:15 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:37 msgid "subscribe to current mailbox (IMAP only)" msgstr "s'abonner à la BAL courante (IMAP seulement)" -#: ../keymap_alldefs.h:16 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:40 msgid "unsubscribe from current mailbox (IMAP only)" msgstr "se désabonner de la BAL courante (IMAP seulement)" -#: ../keymap_alldefs.h:17 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:43 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 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:46 msgid "list mailboxes with new mail" msgstr "lister les BAL ayant de nouveaux messages" -#: ../keymap_alldefs.h:19 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:49 msgid "change directories" msgstr "changer de répertoires" -#: ../keymap_alldefs.h:20 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:52 msgid "check mailboxes for new mail" msgstr "vérifier la présence de nouveaux messages dans les BAL" -#: ../keymap_alldefs.h:21 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:55 msgid "attach file(s) to this message" msgstr "attacher des fichiers à ce message" -#: ../keymap_alldefs.h:22 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:58 msgid "attach message(s) to this message" msgstr "attacher des messages à ce message" -#: ../keymap_alldefs.h:23 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:61 msgid "edit the BCC list" msgstr "éditer la liste BCC" -#: ../keymap_alldefs.h:24 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:64 msgid "edit the CC list" msgstr "éditer la liste CC" -#: ../keymap_alldefs.h:25 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:67 msgid "edit attachment description" msgstr "éditer la description de l'attachement" -#: ../keymap_alldefs.h:26 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:70 msgid "edit attachment transfer-encoding" msgstr "éditer le transfer-encoding de l'attachement" -#: ../keymap_alldefs.h:27 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:73 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 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:76 msgid "edit the file to be attached" msgstr "éditer le fichier à attacher" -#: ../keymap_alldefs.h:29 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:79 msgid "edit the from field" msgstr "éditer le champ from" -#: ../keymap_alldefs.h:30 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:82 msgid "edit the message with headers" msgstr "éditer le message avec ses en-têtes" -#: ../keymap_alldefs.h:31 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:85 msgid "edit the message" msgstr "éditer le message" -#: ../keymap_alldefs.h:32 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:88 msgid "edit attachment using mailcap entry" msgstr "éditer l'attachement en utilisant l'entrée mailcap" -#: ../keymap_alldefs.h:33 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:91 msgid "edit the Reply-To field" msgstr "éditer le champ Reply-To" -#: ../keymap_alldefs.h:34 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:94 msgid "edit the subject of this message" msgstr "éditer l'objet (Subject) de ce message" -#: ../keymap_alldefs.h:35 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:97 msgid "edit the TO list" msgstr "éditer la liste TO" -#: ../keymap_alldefs.h:36 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:100 msgid "create a new mailbox (IMAP only)" msgstr "créer une nouvelle BAL (IMAP seulement)" -#: ../keymap_alldefs.h:37 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:103 msgid "edit attachment content type" msgstr "éditer le content-type de l'attachement" -#: ../keymap_alldefs.h:38 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:106 msgid "get a temporary copy of an attachment" msgstr "obtenir une copie temporaire d'un attachement" -#: ../keymap_alldefs.h:39 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:109 msgid "run ispell on the message" msgstr "lancer ispell sur le message" -#: ../keymap_alldefs.h:40 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:112 msgid "compose new attachment using mailcap entry" msgstr "composer un nouvel attachement en utilisant l'entrée mailcap" -#: ../keymap_alldefs.h:41 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:115 msgid "toggle recoding of this attachment" msgstr "inverser le recodage de cet attachement" -#: ../keymap_alldefs.h:42 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:118 msgid "save this message to send later" msgstr "sauvegarder ce message pour l'envoyer plus tard" -#: ../keymap_alldefs.h:43 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:121 msgid "send attachment with a different name" msgstr "envoyer l'attachement avec un nom différent" -#: ../keymap_alldefs.h:44 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:124 msgid "rename/move an attached file" msgstr "renommer/déplacer un fichier attaché" -#: ../keymap_alldefs.h:45 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:127 msgid "send the message" msgstr "envoyer le message" -#: ../keymap_alldefs.h:46 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:130 msgid "toggle disposition between inline/attachment" msgstr "changer la disposition (en ligne/attachement)" -#: ../keymap_alldefs.h:47 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:133 msgid "toggle whether to delete file after sending it" msgstr "changer l'option de suppression de fichier après envoi" -#: ../keymap_alldefs.h:48 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:136 msgid "update an attachment's encoding info" msgstr "mettre à jour les informations de codage d'un attachement" -#: ../keymap_alldefs.h:49 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:139 msgid "write the message to a folder" msgstr "écrire le message dans un dossier" -#: ../keymap_alldefs.h:50 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:142 msgid "copy a message to a file/mailbox" msgstr "copier un message dans un fichier ou une BAL" -#: ../keymap_alldefs.h:51 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:145 msgid "create an alias from a message sender" msgstr "créer un alias à partir de l'expéditeur d'un message" -#: ../keymap_alldefs.h:52 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:148 msgid "move entry to bottom of screen" msgstr "déplacer l'entrée au bas de l'écran" -#: ../keymap_alldefs.h:53 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:151 msgid "move entry to middle of screen" msgstr "déplacer l'entrée au milieu de l'écran" -#: ../keymap_alldefs.h:54 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:154 msgid "move entry to top of screen" msgstr "déplacer l'entrée en haut de l'écran" -#: ../keymap_alldefs.h:55 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:157 msgid "make decoded (text/plain) copy" msgstr "faire une copie décodée (text/plain)" -#: ../keymap_alldefs.h:56 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:160 msgid "make decoded copy (text/plain) and delete" msgstr "faire une copie décodée (text/plain) et effacer" -#: ../keymap_alldefs.h:57 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:163 msgid "delete the current entry" msgstr "effacer l'entrée courante" -#: ../keymap_alldefs.h:58 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:166 msgid "delete the current mailbox (IMAP only)" msgstr "supprimer la BAL courante (IMAP seulement)" -#: ../keymap_alldefs.h:59 +#. L10N: Help screen function description. +#. Generated from one of the OPS files. +#: ../keymap_alldefs.h:169 msgid "delete all messages in subthread" msgstr "effacer tous les messages dans la sous-discussion"