--- PATCHES Dec 2002 17:44:54 -0000	3.6
+++ PATCHES Feb 2004 06:07:13 -0000
@@ -0,0 +1,4 @@
+patch-1.5.6.dw.multiple-crypt-hook.2
+patch-1.5.6.dw.confirm-crypt-hook.1
+patch-1.5.6.dw.crypt-autoselectkey.1
+patch-1.5.6.dw.pgp-menu-traditional.2
--- compose.c Oct 2003 20:34:59 -0000	3.14
+++ compose.c Feb 2004 06:07:13 -0000
@@ -133,2 +133,9 @@ static void redraw_crypt_lines (HEADER *
     addstr (_("Clear"));
+
+  if ((WithCrypto & APPLICATION_PGP))
+    if ((msg->security & (ENCRYPT | SIGN)))
+      if ((msg->security & INLINE))
+	addstr (_(" (inline)"));
+      else
+	addstr (_(" (PGP/MIME)"));
   clrtoeol ();
@@ -158,2 +165,3 @@ static int pgp_send_menu (HEADER *msg, i
 {
+  int use_autoinline = 0;
   pgp_key_t p;
@@ -164,7 +172,10 @@ static int pgp_send_menu (HEADER *msg, i
 
-  switch (mutt_multi_choice (_("PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "),
-			     N_("esabf")))
+  if (!(msg->security & (SIGN | ENCRYPT)))
+    use_autoinline = 1;
+
+  switch (mutt_multi_choice (_("PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "),
+			     N_("esabif")))
   {
   case 1: /* (e)ncrypt */
-    msg->security |= ENCRYPT;
+    msg->security ^= ENCRYPT;
     break;
@@ -172,3 +183,3 @@ static int pgp_send_menu (HEADER *msg, i
   case 2: /* (s)ign */
-    msg->security |= SIGN;
+    msg->security ^= SIGN;
     break;
@@ -199,6 +210,16 @@ static int pgp_send_menu (HEADER *msg, i
   case 4: /* (b)oth */
-    msg->security = ENCRYPT | SIGN;
+    if ((msg->security & (ENCRYPT | SIGN)) == (ENCRYPT | SIGN))
+      msg->security = 0;
+    else
+      msg->security |= (ENCRYPT | SIGN);
     break;
 
-  case 5: /* (f)orget it */
+  case 5: /* (i)nline */
+    if ((msg->security & (ENCRYPT | SIGN)))
+      msg->security ^= INLINE;
+    else
+      msg->security &= ~INLINE;
+    break;
+
+  case 6: /* (f)orget it */
     msg->security = 0;
@@ -207,6 +228,16 @@ static int pgp_send_menu (HEADER *msg, i
 
-  if (msg->security && msg->security != APPLICATION_PGP)
-    msg->security |= APPLICATION_PGP;
-  else
-    msg->security = 0;
+  if (msg->security)
+  {
+    if (!(msg->security & (ENCRYPT | SIGN)))
+    {
+      msg->security = 0;
+    }
+    else
+    {
+      msg->security |= APPLICATION_PGP;
+
+      if (use_autoinline && option (OPTPGPAUTOINLINE))
+	msg->security |= INLINE;
+    }
+  }
 
--- crypt.c Jan 2004 19:59:38 -0000	3.22
+++ crypt.c Feb 2004 06:07:13 -0000
@@ -161,3 +161,3 @@ int crypt_valid_passphrase(int flags)
 
-int mutt_protect (HEADER *msg, HEADER *cur, char *keylist)
+int mutt_protect (HEADER *msg, char *keylist)
 {
@@ -166,3 +166,2 @@ int mutt_protect (HEADER *msg, HEADER *c
   BODY *tmp_pgp_pbody = NULL;
-  int traditional = 0;
   int flags = (WithCrypto & APPLICATION_PGP)? msg->security: 0;
@@ -176,29 +175,9 @@ int mutt_protect (HEADER *msg, HEADER *c
 
-  if ((WithCrypto & APPLICATION_PGP) && (msg->security & APPLICATION_PGP))
+  if ((WithCrypto & APPLICATION_PGP) && ((msg->security & PGPINLINE) == PGPINLINE))
   {
-    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)
+    /* they really want to send it inline... go for it */
+    if (!isendwin ()) mutt_endwin _("Invoking PGP...");
+    pbody = crypt_pgp_traditional_encryptsign (msg->content, flags, keylist);
+    if (pbody)
     {
-      if (!isendwin ()) mutt_endwin _("Invoking PGP...");
-      if (!(pbody = crypt_pgp_traditional_encryptsign (msg->content, flags, keylist)))
-	return -1;
-
       msg->content = pbody;
@@ -206,2 +185,8 @@ int mutt_protect (HEADER *msg, HEADER *c
     }
+
+    /* otherwise inline won't work...ask for revert */
+    if ((i = query_quadoption (OPT_PGPMIMEASK, _("Message can't be sent inline.  Revert to using PGP/MIME?"))) != M_YES)
+      return -1;
+
+    /* go ahead with PGP/MIME */
   }
@@ -393,2 +378,5 @@ int mutt_is_application_pgp (BODY *m)
   }
+  if (t)
+    t |= PGPINLINE;
+
   return t;
--- hook.c Jan 2004 09:52:55 -0000	3.8
+++ hook.c Feb 2004 06:07:13 -0000
@@ -119,3 +119,7 @@ int mutt_parse_hook (BUFFER *buf, BUFFER
     {
+#ifdef M_CRYPTHOOK
+      if (data & (M_FOLDERHOOK | M_SENDHOOK | M_MESSAGEHOOK | M_ACCOUNTHOOK | M_REPLYHOOK | M_CRYPTHOOK))
+#else
       if (data & (M_FOLDERHOOK | M_SENDHOOK | M_MESSAGEHOOK | M_ACCOUNTHOOK | M_REPLYHOOK))
+#endif
       {
@@ -445,5 +449,21 @@ char *mutt_iconv_hook (const char *chs)
 
-char *mutt_crypt_hook (ADDRESS *adr)
+LIST *mutt_crypt_hook (ADDRESS *adr)
 {
-  return _mutt_string_hook (adr->mailbox, M_CRYPTHOOK);
+  HOOK *hook;
+  LIST *key_list = NULL;
+
+  if (!adr && !adr->mailbox)
+    return (NULL);
+
+  for (hook = Hooks; hook; hook = hook->next)
+  {
+    if (!hook->command)
+      continue;
+    if (!(hook->type & M_CRYPTHOOK))
+      continue;
+
+    if ((regexec (hook->rx.rx, adr->mailbox, 0, NULL, 0) == 0) ^ hook->rx.not)
+      key_list = mutt_add_list (key_list, hook->command);
+  }
+  return (key_list);
 }
--- init.h Feb 2004 17:10:43 -0000	3.43
+++ init.h Feb 2004 06:07:14 -0000
@@ -1205,2 +1205,12 @@ struct option_t MuttVars[] = {
   */
+  
+
+  { "pgp_autoselectkey",	DT_SYN,  R_NONE, UL "crypt_autoselectkey", 0 },
+  { "crypt_autoselectkey",	DT_BOOL, R_NONE, OPTCRYPTAUTOSELECT, 0 },
+  /*
+  ** .pp
+  ** If set, then a list of keys is not presented for selection when only
+  ** one matching key is available.  This may be useful in conjunction with
+  ** the \fIcrypt-hook\fP command.
+  */
   { "pgp_autosign", 	DT_SYN,  R_NONE, UL "crypt_autosign", 0 },
@@ -1230,2 +1240,11 @@ struct option_t MuttVars[] = {
   */
+  { "pgp_confirmhook",		DT_SYN, R_NONE, UL "crypt_confirmhook", 1 },
+  { "crypt_confirmhook",	DT_BOOL, R_NONE, OPTCRYPTCONFIRMHOOK, 1 },
+  /*
+  ** .pp
+  ** If set, then you will be prompted for confirmation of keys when using
+  ** the \fIcrypt-hook\fP command.  If unset, no such confirmation prompt will
+  ** be presented.  This is generally considered unsafe, especially where
+  ** typos are concerned.
+  */
   { "pgp_ignore_subkeys", DT_BOOL, R_NONE, OPTPGPIGNORESUB, 1},
@@ -1374,2 +1393,44 @@ struct option_t MuttVars[] = {
   */
+  { "pgp_create_traditional",	DT_SYN, R_NONE, UL "pgp_autoinline", 0 },
+  { "pgp_autoinline",		DT_BOOL, R_NONE, OPTPGPAUTOINLINE, 0 },
+  /*
+  ** .pp
+  ** This option controls whether Mutt generates old-style inline
+  ** (traditional) PGP encrypted or signed messages under certain
+  ** circumstances.  This can be overridden by use of the \fIpgp-menu\fP,
+  ** when inline is not required.
+  ** .pp
+  ** Note that Mutt might automatically use PGP/MIME for messages
+  ** which consist of more than a single MIME part.  Mutt can be
+  ** configured to ask before sending PGP/MIME messages when inline
+  ** (traditional) would not work.
+  ** See also: ``$$pgp_mime_ask''.
+  ** .pp
+  ** Also note that using the old-style PGP message format is \fBstrongly\fP
+  ** \fBdeprecated\fP.
+  ** (PGP only)
+  */
+  { "pgp_auto_traditional",	DT_SYN, R_NONE, UL "pgp_replyinline", 0 },
+  { "pgp_replyinline",		DT_BOOL, R_NONE, OPTPGPREPLYINLINE, 0 },
+  /*
+  ** .pp
+  ** Setting this variable will cause Mutt to always attempt to
+  ** create an inline (traditional) message when replying to a
+  ** message which is PGP encrypted/signed inline.  This can be
+  ** overridden by use of the \fIpgp-menu\fP, when inline is not
+  ** required.  This option does not automatically detect if the
+  ** (replied-to) message is inline; instead it relies on Mutt
+  ** internals for previously checked/flagged messages.
+  ** .pp
+  ** Note that Mutt might automatically use PGP/MIME for messages
+  ** which consist of more than a single MIME part.  Mutt can be
+  ** configured to ask before sending PGP/MIME messages when inline
+  ** (traditional) would not work.
+  ** See also: ``$$pgp_mime_ask''.
+  ** .pp
+  ** Also note that using the old-style PGP message format is \fBstrongly\fP
+  ** \fBdeprecated\fP.
+  ** (PGP only)
+  ** 
+  */
   { "pgp_show_unusable", DT_BOOL, R_NONE, OPTPGPSHOWUNUSABLE, 1 },
@@ -1423,11 +1484,8 @@ struct option_t MuttVars[] = {
   */
-  { "pgp_create_traditional", DT_QUAD, R_NONE, OPT_PGPTRADITIONAL, M_NO },
+  { "pgp_mime_ask", DT_QUAD, R_NONE, OPT_PGPMIMEASK, 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.
+  ** This option controls whether Mutt will prompt you for
+  ** automatically sending a (signed/encrypted) message using
+  ** PGP/MIME when inline (traditional) fails (for any reason).
   ** .pp
@@ -1435,19 +1493,2 @@ struct option_t MuttVars[] = {
   ** \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)
--- mutt.h Feb 2004 17:10:43 -0000	3.23
+++ mutt.h Feb 2004 06:07:14 -0000
@@ -278,3 +278,2 @@ enum
   OPT_MOVE,
-  OPT_PGPTRADITIONAL, /* create old-style PGP messages */
 #ifdef USE_POP
@@ -284,2 +283,3 @@ enum
   OPT_POSTPONE,
+  OPT_PGPMIMEASK,     /* ask to revert to PGP/MIME when inline fails */
   OPT_PRINT,
@@ -431,2 +431,3 @@ enum
   
+  OPTCRYPTAUTOSELECT,
   OPTCRYPTAUTOSIGN,
@@ -442,2 +443,3 @@ enum
   OPTSDEFAULTDECRYPTKEY,
+  OPTCRYPTCONFIRMHOOK,
   OPTPGPIGNORESUB,
@@ -445,3 +447,2 @@ enum
   OPTPGPLONGIDS,
-  OPTPGPAUTOTRAD,
 #if 0
@@ -453,2 +454,4 @@ enum
   OPTPGPSHOWUNUSABLE,
+  OPTPGPAUTOINLINE,
+  OPTPGPREPLYINLINE,
 
@@ -642,4 +645,4 @@ typedef struct header
 {
-  unsigned int security : 9;  /* bit 0-6: flags, bit 7,8: application.
-				 see: crypt.h pgplib.h, smime.h */
+  unsigned int security : 10;  /* bit 0-7: flags, bit 8,9: application.
+				 see: mutt_crypt.h */
 
--- mutt_crypt.h Dec 2003 13:04:20 -0000	3.5
+++ mutt_crypt.h Feb 2004 06:07:14 -0000
@@ -38,6 +38,7 @@
 #define SIGNOPAQUE (1 << 5)
-/* (1 << 6) is used by PGPKEY below. */
+#define KEYBLOCK   (1 << 6) /* KEY too generic? */
+#define INLINE     (1 << 7)
 
-#define APPLICATION_PGP    (1 << 7) 
-#define APPLICATION_SMIME  (1 << 8)
+#define APPLICATION_PGP    (1 << 8) 
+#define APPLICATION_SMIME  (1 << 9)
 
@@ -46,3 +47,4 @@
 #define PGPGOODSIGN (APPLICATION_PGP | GOODSIGN)
-#define PGPKEY      (APPLICATION_PGP | (1 << 6)) 
+#define PGPKEY      (APPLICATION_PGP | KEYBLOCK) 
+#define PGPINLINE   (APPLICATION_PGP | INLINE)
 
@@ -105,3 +107,3 @@ typedef struct pgp_keyinfo *pgp_key_t;
 
-int mutt_protect (HEADER *, HEADER *, char *);
+int mutt_protect (HEADER *, char *);
 
--- pgp.c Sep 2003 13:03:26 -0000	3.26
+++ pgp.c Feb 2004 06:07:14 -0000
@@ -1018,2 +1018,4 @@ char *pgp_findKeys (ADDRESS *to, ADDRESS
   size_t keylist_used = 0;
+  LIST *hook_list = NULL;
+  LIST *hook = NULL;
   ADDRESS *tmp = NULL, *addr = NULL;
@@ -1051,66 +1053,93 @@ char *pgp_findKeys (ADDRESS *to, ADDRESS
     q = p;
-    k_info = NULL;
 
-    if ((keyID = mutt_crypt_hook (p)) != NULL)
+    /*
+     * grab the list of matching hooks (matching on recipient address)
+     * process each entry singly so that auto key selection still works
+     */
+    hook_list = mutt_crypt_hook (p);
+    hook = hook_list;
+    while (1)
     {
       int r;
-      snprintf (buf, sizeof (buf), _("Use keyID = \"%s\" for %s?"), keyID, p->mailbox);
-      if ((r = mutt_yesorno (buf, M_YES)) == M_YES)
+
+      k_info = NULL;
+      key = NULL;
+
+      if (hook)
       {
-	if (is_numerical_keyid (keyID))
+	keyID = (char *)hook->data;
+	snprintf (buf, sizeof (buf), _("Use keyID = \"%s\" for %s?"), keyID, p->mailbox);
+	if (!option(OPTCRYPTCONFIRMHOOK) || (r = mutt_yesorno (buf, M_YES)) == M_YES)
 	{
-	  if (strncmp (keyID, "0x", 2) == 0)
-	    keyID += 2;
-	  goto bypass_selection;		/* you don't see this. */
+	  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);
 	}
-	
-	/* check for e-mail address */
-	if ((t = strchr (keyID, '@')) && 
-	    (addr = rfc822_parse_adrlist (NULL, keyID)))
+	else if (r == -1)
 	{
-	  if (fqdn) rfc822_qualify (addr, fqdn);
-	  q = addr;
+	  /*
+	   * yes, this implies that if one key fails they all do
+	   */
+	  FREE (&keylist);
+	  rfc822_free_address (&tmp);
+	  rfc822_free_address (&addr);
+	  mutt_free_list (&hook_list);
+	  return NULL;
 	}
-	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 (k_info == NULL)
+	pgp_invoke_getkeys (q);
 
-      if ((key = pgp_ask_for_key (buf, q->mailbox,
-				  KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL)
+      if (k_info == NULL && (k_info = pgp_getkeybyaddr (q, KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL)
       {
-	FREE (&keylist);
-	rfc822_free_address (&tmp);
-	rfc822_free_address (&addr);
-	return 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);
+	  mutt_free_list (&hook_list);
+	  return NULL;
+	}
       }
-    }
-    else
-      key = k_info;
+      else
+	key = k_info;
 
-    keyID = pgp_keyid (key);
+      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);
+      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);
+      pgp_free_key (&key);
+      rfc822_free_address (&addr);
+
+      if (!hook_list)
+	break;
+
+      hook = hook->next;
+      if (!hook)
+	break;
+
+    }
+    mutt_free_list (&hook_list);
 
--- pgpkey.c Oct 2003 19:55:39 -0000	3.8
+++ pgpkey.c Feb 2004 06:07:14 -0000
@@ -437,4 +437,9 @@ static int pgp_id_matches_addr (ADDRESS 
 
+
+#define pgp_trusted_id(uid) (!option(OPTPGPCHECKTRUST) \
+			     || (pgp_id_is_valid((uid)) \
+				 && pgp_id_is_strong((uid))))
+
 static pgp_key_t pgp_select_key (pgp_key_t keys,
-                                 ADDRESS * p, const char *s)
+				  ADDRESS * p, const char *s)
 {
@@ -452,2 +457,3 @@ static pgp_key_t pgp_select_key (pgp_key
 
+  int keymatch = 0;		/* count matching keys */
   int unusable = 0;
@@ -481,2 +487,3 @@ static pgp_key_t pgp_select_key (pgp_key
     }
+    keymatch++;
   }
@@ -489,2 +496,17 @@ static pgp_key_t pgp_select_key (pgp_key
   }
+  else if (keymatch == 1 && option(OPTCRYPTAUTOSELECT))
+  {
+    /*
+     * Only one matching key...see if there's an id with enough trust to auto-select
+     */
+    kp = KeyTable[0]->parent;
+    for (a = kp->address; a; a = a->next)
+    {
+      if (pgp_trusted_id(a))
+      {
+	safe_free ((void **) &KeyTable);
+	return (kp);
+      }
+    }
+  }
 
@@ -599,5 +621,3 @@ static pgp_key_t pgp_select_key (pgp_key
       
-      if (option (OPTPGPCHECKTRUST) &&
-	  (!pgp_id_is_valid (KeyTable[menu->current])
-	   || !pgp_id_is_strong (KeyTable[menu->current])))
+      if (!pgp_trusted_id(KeyTable[menu->current]))
       {
--- postpone.c Sep 2003 17:22:09 -0000	3.9
+++ postpone.c Feb 2004 06:07:14 -0000
@@ -486,2 +486,7 @@ int mutt_parse_crypt_hdr (char *p, int s
 
+      case 'i':
+      case 'I':
+	pgp |= INLINE;
+	break;
+
       default:
--- protos.h Feb 2004 17:10:43 -0000	3.19
+++ protos.h Feb 2004 06:07:14 -0000
@@ -131,3 +131,3 @@ const char *mutt_get_name (ADDRESS *);
 char *mutt_get_parameter (const char *, PARAMETER *);
-char *mutt_crypt_hook (ADDRESS *);
+LIST *mutt_crypt_hook (ADDRESS *);
 char *mutt_make_date (char *, size_t);
--- send.c Jan 2004 10:03:46 -0000	3.29
+++ send.c Feb 2004 06:07:14 -0000
@@ -1258,2 +1258,9 @@ ci_send_message (int flags,		/* send mod
 	msg->security |= SIGN;
+      if ((WithCrypto & APPLICATION_PGP) && (msg->security & (ENCRYPT | SIGN)))
+      {
+	if (option (OPTPGPAUTOINLINE))
+	  msg->security |= INLINE;
+	if (option (OPTPGPREPLYINLINE) && cur && (cur->security & INLINE))
+	  msg->security |= INLINE;
+      }
     }      
@@ -1496,3 +1503,3 @@ main_loop:
       if ((crypt_get_keys (msg, &pgpkeylist) == -1) ||
-          mutt_protect (msg, cur, pgpkeylist) == -1)
+          mutt_protect (msg, pgpkeylist) == -1)
       {
@@ -1576,3 +1583,3 @@ main_loop:
 
-	  if (mutt_protect (msg, cur, pgpkeylist) == -1)
+	  if (mutt_protect (msg, pgpkeylist) == -1)
 	  {
--- sendlib.c Sep 2003 13:03:26 -0000	3.24
+++ sendlib.c Feb 2004 06:07:14 -0000
@@ -2407,2 +2407,4 @@ int mutt_write_fcc (const char *path, HE
     }
+    if (hdr->security & INLINE)
+      fputc ('I', msg->fp);
     fputc ('\n', msg->fp);
--- doc/manual.sgml.head Feb 2004 17:45:33 -0000	3.26
+++ doc/manual.sgml.head Feb 2004 06:07:15 -0000
@@ -1450,3 +1450,5 @@ normally use.  The crypt-hook command pr
 specify the ID of the public key to be used when encrypting messages to
-a certain recipient.
+a certain recipient.  You may use multiple pgp-hook's with the same
+pattern; multiple matching pgp-hook's result in the use of multiple
+keyids for recipient.
 
--- doc/muttrc.man.head Feb 2004 17:10:43 -0000	3.10
+++ doc/muttrc.man.head Feb 2004 06:07:15 -0000
@@ -297,3 +297,6 @@ to a certain recipient.  The meaning of 
 broadly: This can be a different e-mail address, a numerical key ID,
-or even just an arbitrary search string.
+or even just an arbitrary search string.  You may use multiple
+\fBpgp-hook\fPs with the same \fIpattern\fP; multiple matching
+\fBpgp-hook\fPs result in the use of multiple \fIkey-id\fPs for
+recipient.
 .TP
--- po/ca.po Feb 2004 18:26:11 -0000	3.13
+++ po/ca.po Feb 2004 06:07:15 -0000
@@ -603,10 +603,10 @@ 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)mbds, o en (c)lar? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP: (x)ifra, (s)igna, s(i)gna com a, (a)mbds, en (l)nia, o en (c)lar? "
 
 # ivb (2003/03/26)
-# ivb  (x)ifra, (s)igna, si(g)na com a, (a)mbds, (c)lar
+# ivb  (x)ifra, (s)igna, s(i)gna com a, (a)mbds, en (l)nia, o en (c)lar
 #: compose.c:166
-msgid "esabf"
-msgstr "xsgac"
+msgid "esabif"
+msgstr "xsialc"
 
--- po/cs.po Feb 2004 18:26:11 -0000	3.12
+++ po/cs.po Feb 2004 06:07:16 -0000
@@ -683,4 +683,4 @@ msgstr "Zaifrovat 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?"
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP - ()ifrovat, (p)odepsat, podepsat (j)ako, (o)boj, p(m), i (n)ic?"
 
@@ -688,4 +688,4 @@ msgstr "PGP - ()ifrovat, (p)odepsat, po
 #: compose.c:166
-msgid "esabf"
-msgstr "pjon"
+msgid "esabif"
+msgstr "pjomn"
 
--- po/da.po Feb 2004 18:26:11 -0000	3.11
+++ po/da.po Feb 2004 06:07:16 -0000
@@ -578,8 +578,8 @@ msgstr "Kryptr"
 #, fuzzy
-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
-msgstr "(k)ryptr, (u)nderskriv, underskriv (s)om, (b)egge, (i)ngen PGP"
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "(k)ryptr, (u)nderskriv, underskriv (s)om, (b)egge, i(n)tegreret, (i)ngen PGP"
 
 #: compose.c:166
-msgid "esabf"
-msgstr "kusbi"
+msgid "esabif"
+msgstr "kusbni"
 
--- po/de.po Feb 2004 18:26:11 -0000	3.15
+++ po/de.po Feb 2004 06:07:16 -0000
@@ -569,8 +569,8 @@ msgstr "Verschlsseln 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? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP (v)erschl., (s)ign., sign. (a)ls, (b)eides, (i)nline, (k)ein PGP? "
 
 #: compose.c:166
-msgid "esabf"
-msgstr "vsabk"
+msgid "esabif"
+msgstr "vsabik"
 
--- po/el.po Feb 2004 18:26:11 -0000	3.12
+++ po/el.po Feb 2004 06:07:17 -0000
@@ -700,4 +700,4 @@ msgstr " : "
 #: 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? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i),  (f)orget it? "
 
@@ -706,4 +706,4 @@ msgstr "PGP (e)ncrypt, (s)ign, sign (a)s
 #: compose.c:166
-msgid "esabf"
-msgstr "esabf"
+msgid "esabif"
+msgstr "esabif"
 
--- po/eo.po Feb 2004 18:26:11 -0000	3.13
+++ po/eo.po Feb 2004 06:07:17 -0000
@@ -571,8 +571,8 @@ 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? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP (i)fri, (s)ubskribi, subskribi (k)iel, (a)mba, \"i(n)line\", a (f)orgesi? "
 
 #: compose.c:166
-msgid "esabf"
-msgstr "iskaf"
+msgid "esabif"
+msgstr "iskanf"
 
--- po/es.po Feb 2004 18:26:11 -0000	3.14
+++ po/es.po Feb 2004 06:07:17 -0000
@@ -576,4 +576,4 @@ msgstr "Cifrar"
 #, 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? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "co(d)ificar, f(i)rmar (c)omo, amb(o)s, inc(l)uido, o ca(n)celar? "
 
@@ -581,4 +581,4 @@ msgstr "co(d)ificar, f(i)rmar (c)omo, a
 #, fuzzy
-msgid "esabf"
-msgstr "dicon"
+msgid "esabif"
+msgstr "dicoln"
 
--- po/et.po Feb 2004 18:26:11 -0000	3.13
+++ po/et.po Feb 2004 06:07:18 -0000
@@ -571,8 +571,8 @@ msgstr "Krpti kasutades: "
 #: compose.c:165
-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
-msgstr "PGP (k)rpti, (a)llkiri, allk. ku(i), (m)lemad vi (u)nusta? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP (k)rpti, (a)llkiri, allk. ku(i), (m)lemad, k(e)hasse, vi (u)nusta? "
 
 #: compose.c:166
-msgid "esabf"
-msgstr "kaimu"
+msgid "esabif"
+msgstr "kaimeu"
 
--- po/fr.po Feb 2004 18:26:11 -0000	3.23
+++ po/fr.po Feb 2004 06:07:18 -0000
@@ -596,8 +596,8 @@ 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 ? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "(c)hiffrer PGP, (s)igner, (e)n tant que, les (d)eux, en (l)igne, ou (o)ublier ? "
 
 #: compose.c:166
-msgid "esabf"
-msgstr "csedo"
+msgid "esabif"
+msgstr "csedlo"
 
--- po/gl.po Feb 2004 18:26:11 -0000	3.11
+++ po/gl.po Feb 2004 06:07:18 -0000
@@ -580,8 +580,8 @@ msgstr "Encriptar"
 #, 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? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "(e)ncriptar, (f)irmar, firmar (c)omo, (a)mbas, (i)nterior, ou (o)lvidar? "
 
 #: compose.c:166
-msgid "esabf"
-msgstr "efcao"
+msgid "esabif"
+msgstr "efcaio"
 
--- po/hu.po Feb 2004 18:26:11 -0000	3.12
+++ po/hu.po Feb 2004 06:07:19 -0000
@@ -571,8 +571,8 @@ msgstr "Titkosts: "
 #: compose.c:165
-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
-msgstr "PGP (t)itkost, (a)lr, alr (m)int, titkost (s) alr, m(g)se? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP (t)itkost, (a)lr, alr (m)int, titkost (s) alr, (b)egyazott, m(g)se? "
 
 #: compose.c:166
-msgid "esabf"
-msgstr "tamsg"
+msgid "esabif"
+msgstr "tamsbg"
 
--- po/id.po Feb 2004 18:26:12 -0000	3.14
+++ po/id.po Feb 2004 06:07:19 -0000
@@ -572,8 +572,8 @@ 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? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP (e)nkrip, (t)andatangan, tandatangan (s)bg, ke(d)uanya, (i)nline, (b)atal? "
 
 #: compose.c:166
-msgid "esabf"
-msgstr "etsdb"
+msgid "esabif"
+msgstr "etsdib"
 
--- po/it.po Feb 2004 18:26:12 -0000	3.11
+++ po/it.po Feb 2004 06:07:19 -0000
@@ -582,8 +582,8 @@ msgstr "Crittografa"
 #, 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) "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "cifra(e), firma(s), firma come(a), entrambi(b), in l(i)nea , annulla(f) "
 
 #: compose.c:166
-msgid "esabf"
-msgstr "esabf"
+msgid "esabif"
+msgstr "esabif"
 
--- po/ja.po Feb 2004 18:26:12 -0000	3.21
+++ po/ja.po Feb 2004 06:07:20 -0000
@@ -569,8 +569,8 @@ 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)?"
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP (e)Ź沽,(s)̾,(a)..Ȥƽ̾,(b)ξ,(i)nline,(f)?"
 
 #: compose.c:166
-msgid "esabf"
-msgstr "esabf"
+msgid "esabif"
+msgstr "esabif"
 
--- po/ko.po Feb 2004 18:26:12 -0000	3.15
+++ po/ko.po Feb 2004 06:07:20 -0000
@@ -570,8 +570,8 @@ 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)? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP ȣȭ(e), (s),  (a),  (b), (i)nline, (f)? "
 
 #: compose.c:166
-msgid "esabf"
-msgstr "esabf"
+msgid "esabif"
+msgstr "esabif"
 
--- po/lt.po Feb 2004 18:26:12 -0000	3.11
+++ po/lt.po Feb 2004 06:07:20 -0000
@@ -578,5 +578,5 @@ msgstr "Uifruoti"
 #, fuzzy
-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
 msgstr ""
-"(u)ifruot, pa(s)irayt, pasirayt k(a)ip, a(b)u, rinktis (m)ic algoritm, "
+"(u)ifruot, pa(s)irayt, pasirayt k(a)ip, a(b)u, (l)aike, "
 "ar (p)amirti?"
@@ -585,4 +585,4 @@ msgstr ""
 #, fuzzy
-msgid "esabf"
-msgstr "usabmp"
+msgid "esabif"
+msgstr "usablp"
 
@@ -598,4 +598,3 @@ msgid ""
 msgstr ""
-"(u)ifruot, pa(s)irayt, pasirayt k(a)ip, a(b)u, rinktis (m)ic algoritm, "
-"ar (p)amirti?"
+"(u)ifruot, pa(s)irayt, uifruo(t) su, pasirayt k(a)ip, a(b)u, ar (p)amirti?"
 
@@ -604,3 +603,3 @@ msgstr ""
 msgid "eswabf"
-msgstr "usabmp"
+msgstr "ustabp"
 
--- po/nl.po Feb 2004 18:26:12 -0000	3.16
+++ po/nl.po Feb 2004 06:07:21 -0000
@@ -568,8 +568,8 @@ 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? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP (v)ersleutel, (o)ndertekenen, ondert. (a)ls, (b)eiden, ber(i)cht, (g)een? "
 
 #: compose.c:166
-msgid "esabf"
-msgstr "voabg"
+msgid "esabif"
+msgstr "voabig"
 
--- po/pl.po Feb 2004 18:26:12 -0000	3.17
+++ po/pl.po Feb 2004 06:07:21 -0000
@@ -571,8 +571,8 @@ msgstr "Zaszyfruj uywajc: "
 #: 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? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP: (z)aszyfruj, podpi(s)z, podpisz j(a)ko, o(b)a, (i)nline, b(e)z PGP? "
 
 #: compose.c:166
-msgid "esabf"
-msgstr "zsabe"
+msgid "esabif"
+msgstr "zsabie"
 
--- po/pt_BR.po Feb 2004 18:26:13 -0000	3.12
+++ po/pt_BR.po Feb 2004 06:07:21 -0000
@@ -581,5 +581,5 @@ msgstr "Encriptar"
 #, fuzzy
-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
 msgstr ""
-"(e)ncripa, a(s)sina, assina (c)omo, (a)mbos, escolhe (m)ic, ou es(q)uece? "
+"(e)ncripa, a(s)sina, assina (c)omo, (a)mbos, em l(i)nha, ou es(q)uece? "
 
@@ -587,4 +587,4 @@ msgstr ""
 #, fuzzy
-msgid "esabf"
-msgstr "escamq"
+msgid "esabif"
+msgstr "escaiq"
 
@@ -600,3 +600,3 @@ msgid ""
 msgstr ""
-"(e)ncripa, a(s)sina, assina (c)omo, (a)mbos, escolhe (m)ic, ou es(q)uece? "
+"(e)ncripa, a(s)sina, e(n)cripa com, assina (c)omo, (a)mbos, ou es(q)uece? "
 
@@ -605,3 +605,3 @@ msgstr ""
 msgid "eswabf"
-msgstr "escamq"
+msgstr "esncaq"
 
--- po/ru.po Feb 2004 18:26:13 -0000	3.19
+++ po/ru.po Feb 2004 06:07:22 -0000
@@ -577,8 +577,8 @@ 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)? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP (e), (s), (a) , (b), (i)nline, (f)? "
 
 #: compose.c:166
-msgid "esabf"
-msgstr "esabf"
+msgid "esabif"
+msgstr "esabif"
 
--- po/sk.po Feb 2004 18:26:13 -0000	3.11
+++ po/sk.po Feb 2004 06:07:22 -0000
@@ -586,5 +586,5 @@ msgstr "Zaifruj"
 #, fuzzy
-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
 msgstr ""
-"(e)-ifr, (s)-podp, podp (a)ko, o(b)e, ozna alg. mi(c), alebo (f)-zabudn "
+"(e)-ifr, (s)-podp, podp (a)ko, o(b)e, (i)nline, alebo (f)-zabudn "
 "na to? "
@@ -593,4 +593,4 @@ msgstr ""
 #, fuzzy
-msgid "esabf"
-msgstr "esabmf"
+msgid "esabif"
+msgstr "esabif"
 
@@ -606,4 +606,3 @@ msgid ""
 msgstr ""
-"(e)-ifr, (s)-podp, podp (a)ko, o(b)e, ozna alg. mi(c), alebo (f)-zabudn "
-"na to? "
+"(e)-ifr, (s)-podp, (w)-ifr s, podp (a)ko, o(b)e, alebo (f)-zabudn na to? "
 
@@ -612,3 +611,3 @@ msgstr ""
 msgid "eswabf"
-msgstr "esabmf"
+msgstr "eswabf"
 
--- po/sv.po Feb 2004 18:26:13 -0000	3.12
+++ po/sv.po Feb 2004 06:07:22 -0000
@@ -568,8 +568,8 @@ 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?"
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr "PGP: (k)ryptera, (s)ignera, signera s(o)m, (b)da, i(n)fogat, eller sk(i)ppa det?"
 
 #: compose.c:166
-msgid "esabf"
-msgstr "ksobi"
+msgid "esabif"
+msgstr "ksobni"
 
--- po/tr.po Feb 2004 18:26:13 -0000	3.11
+++ po/tr.po Feb 2004 06:07:22 -0000
@@ -577,5 +577,5 @@ msgstr "ifrele"
 #, fuzzy
-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
 msgstr ""
-"(i)frele, i(m)zala, (f)arkl imzala, i(k)isi de, mi(c) algoritmini se "
+"(i)frele, i(m)zala, (f)arkl imzala, i(k)isi de, (i)nline, "
 "yoksa i(p)talm? "
@@ -583,4 +583,4 @@ msgstr ""
 #: compose.c:166
-msgid "esabf"
-msgstr "imfkcp"
+msgid "esabif"
+msgstr "imfkip"
 
--- po/uk.po Feb 2004 18:26:13 -0000	3.12
+++ po/uk.po Feb 2004 06:07:23 -0000
@@ -572,8 +572,8 @@ msgstr ""
 #, fuzzy
-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
-msgstr ".(e), Ц.(s), Ц. (a), (b)  צͦ(f)? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+msgstr ".(e), Ц.(s), Ц. (a), (b), (i)nline  צͦ(f)? "
 
 #: compose.c:166
-msgid "esabf"
-msgstr ""
+msgid "esabif"
+msgstr "esabif"
 
--- po/zh_CN.po Feb 2004 18:26:13 -0000	3.11
+++ po/zh_CN.po Feb 2004 06:07:23 -0000
@@ -585,5 +585,5 @@ msgstr ""
 #, fuzzy
-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
 msgstr ""
-"(e), (s)ǩ, (a)ñǩ, (b)߽Ҫ, ѡ (m)ic 㷨  (f)"
+"(e), (s)ǩ, (a)ñǩ, (b)߽Ҫ, (i)nline,  (f)"
 ""
@@ -591,4 +591,4 @@ msgstr ""
 #: compose.c:166
-msgid "esabf"
-msgstr ""
+msgid "esabif"
+msgstr "esabif"
 
--- po/zh_TW.po Feb 2004 18:26:13 -0000	3.11
+++ po/zh_TW.po Feb 2004 06:07:24 -0000
@@ -577,3 +577,3 @@ msgstr "加密"
 #, fuzzy
-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
 msgstr "(1)加密, (2)簽名, (3)用別的身份簽, (4)兩者皆要, 或 (5)放棄？"
@@ -581,4 +581,4 @@ msgstr "(1)加密, (2)簽名, (3)用別
 #: compose.c:166
-msgid "esabf"
-msgstr "12345"
+msgid "esabif"
+msgstr "1234i5"
 
