]> git.wh0rd.org Git - nano.git/commitdiff
when getting printable input from the edit window or statusbar prompt,
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 16 Mar 2005 15:34:22 +0000 (15:34 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 16 Mar 2005 15:34:22 +0000 (15:34 +0000)
don't swallow non-ASCII control characters, since they're parts of UTF-8
sequences

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

ChangeLog
configure.ac
src/chars.c
src/nano.c
src/proto.h
src/winio.c

index 211ccdb6be7d940b4e66e43b39c14168e49bd56a..97bf46f8936f2110e8e0e791c917b86f89dac2ba 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -94,17 +94,17 @@ CVS code -
          support to a few more functions as well, and move multibyte
          character-specific functions to their own source file.  New
          file chars.c; new functions is_alnum_char(),
-         is_alnum_mbchar(), is_alnum_wchar(), is_blank_mbchar(),
-         is_blank_wchar(), is_cntrl_mbchar(), is_cntrl_wchar(),
-         control_mbrep(), control_wrep(), mbwidth(), mb_cur_max(),
-         make_mbchar(), mbstrlen(), mbstrnlen(), mbstrcasecmp(),
-         mbstrncasecmp(), mbstrcasestr(), and mbrevstrcasestr();
-         changes to help_init(), is_byte() (moved to chars.c),
-         is_blank_char() (moved to chars.c), is_cntrl_char() (moved to
-         chars.c), nstricmp() (renamed nstrcasecmp() and moved to
-         chars.c), nstrnicmp() (renamed nstrncasecmp() and moved to
-         chars.c), nstristr() (renamed nstrcasestr() and moved to
-         chars.c), revstrstr() (moved to chars.c), revstristr()
+         is_alnum_mbchar(), is_alnum_wchar(), is_ascii_char(),
+         is_blank_mbchar(), is_blank_wchar(), is_cntrl_mbchar(),
+         is_cntrl_wchar(), control_mbrep(), control_wrep(), mbwidth(),
+         mb_cur_max(), make_mbchar(), mbstrlen(), mbstrnlen(),
+         mbstrcasecmp(), mbstrncasecmp(), mbstrcasestr(), and
+         mbrevstrcasestr(); changes to help_init(), is_byte() (moved to
+         chars.c), is_blank_char() (moved to chars.c), is_cntrl_char()
+         (moved to chars.c), nstricmp() (renamed nstrcasecmp() and
+         moved to chars.c), nstrnicmp() (renamed nstrncasecmp() and
+         moved to chars.c), nstristr() (renamed nstrcasestr() and moved
+         to chars.c), revstrstr() (moved to chars.c), revstristr()
          (renamed revstrcasestr() and moved to chars.c), nstrnlen()
          (moved to chars.c), parse_char() (renamed parse_mbchar() and
          moved to chars.c), move_left() (renamed move_mbleft() and
@@ -328,8 +328,8 @@ CVS code -
          obsolete and it defines a struct termio that we don't use
          anywhere. (DLR)
        - Typo fixes. (DLR)
-       - Add checks for iswalnum(), iswblank() or iswspace(), mblen(),
-         and wctype.h. (DLR)
+       - Add checks for isascii(), iswalnum(), iswblank() or
+         iswspace(), mblen(), and wctype.h. (DLR)
 - doc/faq.html:
        - Remove now-inaccurate note about verbatim input's not working
          at prompts, and update its description to mention that it
index ba1a2b316cf1e3aca9e62b7fffbac25a7f5bb4b4..0492452de3cb2131a651d752e181d42d3e64cf41 100644 (file)
@@ -291,7 +291,7 @@ AC_MSG_WARN([*** Can not use slang when cross-compiling])),
     esac], [AC_MSG_RESULT(no)])
 
 dnl Checks for functions
-AC_CHECK_FUNCS(snprintf vsnprintf isblank iswalnum iswblank iswspace strcasecmp strncasecmp strcasestr strnlen getline getdelim mblen mbtowc wctomb wcwidth)
+AC_CHECK_FUNCS(snprintf vsnprintf isascii isblank iswalnum iswblank iswspace strcasecmp strncasecmp strcasestr strnlen getline getdelim mblen mbtowc wctomb wcwidth)
 if test "x$ac_cv_func_snprintf" = "xno" -o "x$ac_cv_func_vsnprintf" = "xno"
 then
        AM_PATH_GLIB_2_0(2.0.0,,
index 8080b77578a954a9a7aafb4c63ea8d2ec0093562..9e39bf9f4fc9accc998d3070d554f938efdaa8f8 100644 (file)
@@ -81,6 +81,18 @@ bool is_alnum_wchar(wchar_t wc)
 }
 #endif
 
+/* This function is equivalent to isascii(). */
+bool is_ascii_char(int c)
+{
+    return
+#ifdef HAVE_ISASCII
+       isascii(c)
+#else
+       ((unsigned int)c == (signed char)c)
+#endif
+       ;
+}
+
 /* This function is equivalent to isblank(). */
 bool is_blank_char(int c)
 {
index 83bf41e19c9516bfe2325a95644c5f74a395b7be..220c35b14bfb6fdfb9556d08a564a95a3e192421 100644 (file)
@@ -3616,10 +3616,11 @@ int do_input(bool *meta_key, bool *func_key, bool *s_or_t, bool
 
     if (allow_funcs) {
        /* If we got a character, and it isn't a shortcut, toggle, or
-        * control character, it's a normal text character.  Display the
-        * warning if we're in view mode, or add the character to the
-        * input buffer if we're not. */
-       if (input != ERR && *s_or_t == FALSE && !is_cntrl_char(input)) {
+        * ASCII control character, it's a normal text character.
+        * Display the warning if we're in view mode, or add the
+        * character to the input buffer if we're not. */
+       if (input != ERR && *s_or_t == FALSE &&
+               (!is_ascii_char(input) || !is_cntrl_char(input))) {
            if (ISSET(VIEW_MODE))
                print_view_warning();
            else {
index a976c22a2217830ff6d7fb71c6bbbc48da132b9e..5cf9f045b771fafab88ababf72406d7fb95974cf 100644 (file)
@@ -157,6 +157,7 @@ bool is_alnum_mbchar(const char *c);
 #ifdef NANO_WIDE
 bool is_alnum_wchar(wchar_t wc);
 #endif
+bool is_ascii_char(int c);
 bool is_blank_char(int c);
 bool is_blank_mbchar(const char *c);
 #ifdef NANO_WIDE
index 2e23045dc9190fd09e15864cd353f1ce5e9dd13e..78ba2f7af7c22831b69482abac4eb8a73a7e7f37 100644 (file)
@@ -1676,7 +1676,12 @@ int do_statusbar_input(bool *meta_key, bool *func_key, bool *s_or_t,
     *s_or_t = have_shortcut;
 
     if (allow_funcs) {
-       if (input != ERR && *s_or_t == FALSE && !is_cntrl_char(input)) {
+       /* If we got a character, and it isn't a shortcut, toggle, or
+        * ASCII control character, it's a normal text character.
+        * Display the warning if we're in view mode, or add the
+        * character to the input buffer if we're not. */
+       if (input != ERR && *s_or_t == FALSE &&
+               (!is_ascii_char(input) || !is_cntrl_char(input))) {
            /* If we're using restricted mode, the filename isn't blank,
             * and we're at the "Write File" prompt, disable text
             * input. */