]> git.llucax.com Git - software/mutt-debian.git/blobdiff - keymap.c
new patch from upstream to fix the atime issue
[software/mutt-debian.git] / keymap.c
index ca23443d41690b31e151714239342a2874396818..bcc00226c9a65a6248f3d164a8ca0993100d7781 100644 (file)
--- a/keymap.c
+++ b/keymap.c
@@ -26,6 +26,9 @@
 #include "keymap.h"
 #include "mapping.h"
 #include "mutt_crypt.h"
+#ifdef USE_IMAP
+#include "imap/imap.h"
+#endif
 
 #include <stdlib.h>
 #include <string.h>
@@ -384,17 +387,39 @@ int km_dokey (int menu)
 
   FOREVER
   {
-    /* ncurses doesn't return on resized screen when timeout is set to zero */
-    if (menu != MENU_EDITOR)
-      timeout ((Timeout > 0 ? Timeout : 60) * 1000);
+    i = Timeout > 0 ? Timeout : 60;
+#ifdef USE_IMAP
+    /* keepalive may need to run more frequently than Timeout allows */
+    if (ImapKeepalive)
+    {
+      if (ImapKeepalive >= i)
+       imap_keepalive ();
+      else
+       while (ImapKeepalive && ImapKeepalive < i)
+       {
+         timeout (ImapKeepalive * 1000);
+         tmp = mutt_getch ();
+         timeout (-1);
+         if (tmp.ch != -2)
+           /* something other than timeout */
+           goto gotkey;
+         i -= ImapKeepalive;
+         imap_keepalive ();
+       }
+    }
+#endif
 
+    timeout (i * 1000);
     tmp = mutt_getch();
+    timeout (-1);
 
-    if (menu != MENU_EDITOR)
-      timeout (-1); /* restore blocking operation */
+    /* hide timeouts from line editor */
+    if (menu == MENU_EDITOR && tmp.ch == -2)
+      continue;
 
+  gotkey:
     LastKey = tmp.ch;
-    if (LastKey == -1)
+    if (LastKey < 0)
       return -1;
 
     /* do we have an op already? */
@@ -975,4 +1000,5 @@ void mutt_what_key (void)
   while (ch != ERR && ch != ctrl ('G'));
 
   mutt_flushinp();
+  mutt_clear_error();
 }