]> git.wh0rd.org Git - nano.git/commitdiff
ignore unhandled meta key sequences and escape sequences, and indicate
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 24 May 2006 17:36:00 +0000 (17:36 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 24 May 2006 17:36:00 +0000 (17:36 +0000)
it on the statusbar when we get an unhandled shortcut or toggle, as Pico
does

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3554 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/chars.c
src/nano.c
src/prompt.c
src/proto.h
src/winio.c

index 03769664d2fd0561dee1fbc38b4a6e0dd5229e9d..8124feb74254fd8a9ab3f3f51900fd6fbcca9273 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -96,6 +96,12 @@ CVS code -
          do_page_down(), do_up(), do_scroll_up(), do_down(),
          do_scroll_down(), do_input(), do_search(), do_research(), and
          do_delete(). (DLR)
+       - Ignore unhandled meta key sequences and escape sequences, and
+         indicate it on the statusbar when we get an unhandled shortcut
+         or toggle, as Pico does.  New function is_ascii_cntrl_char();
+         changes to do_input(), do_statusbar_input(), and
+         parse_kbinput(). (DLR, suggested by Nick Warne and Benno
+         Schulenberg)
 - browser.c:
   do_browser()
        - Reference NANO_GOTODIR_(ALT|F)?KEY instead of
index 0f78767c513d0c311101e26fff7775246cd5d8fb..5f7c3c545c67b038ec0350f553f2793fcd7f3229 100644 (file)
@@ -120,6 +120,13 @@ bool is_blank_mbchar(const char *c)
        return isblank((unsigned char)*c);
 }
 
+/* This function is equivalent to iscntrl(), except in that it only
+ * handles non-high-bit control characters. */
+bool is_ascii_cntrl_char(int c)
+{
+    return (0 <= c && c < 32);
+}
+
 /* This function is equivalent to iscntrl(), except in that it also
  * handles high-bit control characters. */
 bool is_cntrl_char(int c)
index 634fc9681340803b3ee496d3630da36899ebc656..ac6b4886a3d67790ea4b49ea675c4e1e615a4c8e 100644 (file)
@@ -1297,6 +1297,17 @@ int do_input(bool *meta_key, bool *func_key, bool *s_or_t, bool
 #endif
        );
 
+    /* If we got a non-high-bit control key or a Meta key sequence, and
+     * it's not a shortcut or toggle, ignore it, and indicate this on
+     * the statusbar. */
+    if (*s_or_t == FALSE) {
+       if (is_ascii_cntrl_char(input) || *meta_key == TRUE) {
+           input = ERR;
+           *meta_key = FALSE;
+           statusbar(_("Unknown Command"));
+       }
+    }
+
     if (allow_funcs) {
        /* If we got a character, and it isn't a shortcut or toggle,
         * it's a normal text character.  Display the warning if we're
index 140d2bfdbbc60858ecdda3c265c8f69862b245e9..3fa7b90956c05f35452f19b63b2f3e05d42c7481 100644 (file)
@@ -99,6 +99,15 @@ int do_statusbar_input(bool *meta_key, bool *func_key, bool *s_or_t,
     /* Set s_or_t to TRUE if we got a shortcut. */
     *s_or_t = have_shortcut;
 
+    /* If we got a non-high-bit control key or a Meta key sequence, and
+     * it's not a shortcut or toggle, ignore it. */
+    if (*s_or_t == FALSE) {
+       if (is_ascii_cntrl_char(input) || *meta_key == TRUE) {
+           input = ERR;
+           *meta_key = FALSE;
+       }
+    }
+
     if (allow_funcs) {
        /* If we got a character, and it isn't a shortcut or toggle,
         * it's a normal text character.  Display the warning if we're
index 138b371aa4b8d8f2fc4330ad07d552b86c87db5c..b55e8fa93f0f24adfe2b6ddd3dc27c3d7bfe2642 100644 (file)
@@ -174,6 +174,7 @@ bool niswblank(wchar_t wc);
 bool is_byte(int c);
 bool is_alnum_mbchar(const char *c);
 bool is_blank_mbchar(const char *c);
+bool is_ascii_cntrl_char(int c);
 bool is_cntrl_char(int c);
 #ifdef ENABLE_UTF8
 bool is_cntrl_wchar(wchar_t wc);
index 50eb5a23a2325b7b648c1dff1917a95d85995ae0..df869b559a1158e08e47e55d1861afc788953da5 100644 (file)
@@ -536,10 +536,10 @@ int parse_kbinput(WINDOW *win, bool *meta_key, bool *func_key)
                                &ignore_seq);
 
                        /* If the escape sequence is unrecognized and
-                        * not ignored, put back all of its characters
-                        * except for the initial escape. */
+                        * not ignored, indicate this on the
+                        * statusbar. */
                        if (retval == ERR && !ignore_seq)
-                           unget_input(seq, seq_len);
+                           statusbar(_("Unknown Command"));
 
                        free(seq);
                    }