]> granicus.if.org Git - neomutt/commitdiff
Change km_dokey() to return -2 on a timeout/sigwinch.
authorKevin McCarthy <kevin@8t8.us>
Thu, 1 Jun 2017 22:17:01 +0000 (15:17 -0700)
committerRichard Russon <rich@flatcap.org>
Wed, 7 Jun 2017 21:53:18 +0000 (22:53 +0100)
In some cases, such as tag-prefix or _mutt_enter_string(), it is
desirable to be able to distinguish between a timeout/sigwinch event
and an input error/abort/ctrl-g.

curs_main.c
enter.c
keymap.c
menu.c
pager.c

index a2cf46b2b31fdaaebbd5f35f2a86139f29e28a41..fa5c32efeaf80fb45ee6c516861c5786836eed6f 100644 (file)
@@ -1030,7 +1030,7 @@ int mutt_index_menu(void)
         do_buffy_notify = 1;
     }
 
-    if (op != -1)
+    if (op >= 0)
       mutt_curs_set(0);
 
     if (menu->menu == MENU_MAIN)
@@ -1071,7 +1071,7 @@ int mutt_index_menu(void)
 
       mutt_debug(4, "mutt_index_menu[%d]: Got op %d\n", __LINE__, op);
 
-      if (op == -1)
+      if (op < 0)
       {
         mutt_timeout_hook();
         continue; /* either user abort or timeout */
@@ -2126,7 +2126,7 @@ int mutt_index_menu(void)
          * set CurrentMenu incorrectly when we return back to the index menu. */
         menu->menu = MENU_MAIN;
 
-        if ((op = mutt_display_message(CURHDR)) == -1)
+        if ((op = mutt_display_message(CURHDR)) < 0)
         {
           unset_option(OPTNEEDRESORT);
           break;
diff --git a/enter.c b/enter.c
index 03df49263fbe0cb3667f113eec97e1a3dbb4e3cb..17d3b40cbe645124dc87506665c2a0b537653a9c 100644 (file)
--- a/enter.c
+++ b/enter.c
@@ -324,9 +324,9 @@ int _mutt_enter_string(char *buf, size_t buflen, int col, int flags, int multipl
     }
     mutt_refresh();
 
-    if ((ch = km_dokey(MENU_EDITOR)) == -1)
+    if ((ch = km_dokey(MENU_EDITOR)) < 0)
     {
-      rv = SigWinch ? 1 : -1;
+      rv = (SigWinch && ch == -2) ? 1 : -1;
       goto bye;
     }
 
index c0297e849e68ae8210bcfe528c151043d410297e..2f1987e650d4eadea9f4edc32ea95f473d883ab6 100644 (file)
--- a/keymap.c
+++ b/keymap.c
@@ -453,6 +453,7 @@ static int retry_generic(int menu, keycode_t *keys, int keyslen, int lastkey)
  *      >0              function to execute
  *      OP_NULL         no function bound to key sequence
  *      -1              error occurred while reading input
+ *      -2              a timeout or sigwinch occurred
  */
 int km_dokey(int menu)
 {
@@ -505,7 +506,7 @@ int km_dokey(int menu)
 
     LastKey = tmp.ch;
     if (LastKey < 0)
-      return -1;
+      return LastKey;
 
     /* do we have an op already? */
     if (tmp.op)
diff --git a/menu.c b/menu.c
index 9cdd0b825235d90521303502d18e64442f7b25e8..3f454a568110bde81b8682be691e23d041d5f18a 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -1138,7 +1138,7 @@ int mutt_menu_loop(struct Menu *menu)
     }
 #endif
 
-    if (i == -1)
+    if (i < 0)
       continue;
 
     if (!menu->dialog)
diff --git a/pager.c b/pager.c
index 7e7d6adb077a9d778bbd9efa87f7b2ca1d867f78..372ddedb836adac49b5df96451749486b8cc553d 100644 (file)
--- a/pager.c
+++ b/pager.c
@@ -2092,7 +2092,7 @@ int mutt_pager(const char *banner, const char *fname, int flags, struct Pager *e
       OldHdr = NULL;
 
     ch = km_dokey(MENU_PAGER);
-    if (ch != -1)
+    if (ch >= 0)
     {
       mutt_clear_error();
     }
@@ -2208,7 +2208,7 @@ int mutt_pager(const char *banner, const char *fname, int flags, struct Pager *e
       continue;
     }
 #endif
-    if (ch == -1)
+    if (ch < 0)
     {
       ch = 0;
       mutt_timeout_hook();