From 1fdf53ddcd7e936fe7e057b9baab5f87c127d1ef Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Tue, 18 Dec 2007 02:39:25 +0000 Subject: [PATCH] remove slang curses emulation support, as it's hopelessly broken, and it doesn't make the binary very much smaller, especially when --enable-tiny is used git-svn-id: svn://svn.savannah.gnu.org/nano/branches/nano_2_0_branch/nano@4203 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 5 ++ configure.ac | 199 ++---------------------------------------- doc/texinfo/nano.texi | 8 +- src/nano.c | 49 ++--------- src/nano.h | 9 +- src/winio.c | 7 -- 6 files changed, 20 insertions(+), 257 deletions(-) diff --git a/ChangeLog b/ChangeLog index 94de6aa1..dda32cd4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -48,6 +48,11 @@ CVS code - need_statusbar_horizontal_update(). (DLR) - Simplify terminal handling by using raw mode instead of cbreak mode. Changes to main(); removal of disable_signals(). (DLR) + - Remove slang curses emulation support, as it's hopelessly + broken, and it doesn't make the binary very much smaller, + especially when --enable-tiny is used. Changes to + configure.ac, doc/texinfo/nano.texi, version(), + handle_sigwinch(), terminal_init(), and total_redraw(). (DLR) - chars.c: nstrncasecmp(), mbstrncasecmp() - For efficiency, return zero immediately if s1 and s2 point to diff --git a/configure.ac b/configure.ac index 31fdd71f..f8fe6f81 100644 --- a/configure.ac +++ b/configure.ac @@ -185,193 +185,6 @@ fi], [enable_utf8=auto]) AC_MSG_RESULT($enable_utf8) -AC_MSG_CHECKING([whether to use slang]) -CURSES_LIB_NAME="" -AC_ARG_WITH(slang, -[ --with-slang[=DIR] Use the slang library instead of curses], -[ case "$with_slang" in - no) - AC_MSG_RESULT(no) - ;; - *) - AC_MSG_RESULT(yes) - - if test x$with_slang != xyes; then - # Add additional search path - LDFLAGS="-L$with_slang/lib $LDFLAGS" - CPPFLAGS="-I$with_slang/include $CPPFLAGS" - fi - - if test x$enable_utf8 != xno; then - AC_CHECK_HEADER(slcurses.h, - AC_MSG_CHECKING([for SLutf8_enable in -lslang]) - _libs=$LIBS - LIBS="$LIBS -lslang" - AC_TRY_RUN([ -#include -int main(void) -{ - SLutf8_enable(1); - return 0; -}], - [AC_MSG_RESULT(yes) - AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.]) slang_support=yes - CURSES_LIB_WIDE=yes - if test x$with_slang != xyes; then - CURSES_LIB="-L${with_slang}/lib -lslang" - else - CURSES_LIB="-lslang" - fi - CURSES_LIB_NAME=slang], - [AC_MSG_RESULT(no) - - # We might need the term library - for termlib in ncurses curses termcap terminfo termlib; do - AC_CHECK_LIB([${termlib}], tputs, [tcap="-l$termlib"]) - test -n "$tcap" && break - done - - AC_MSG_CHECKING([for SLutf8_enable in -lslang $tcap]) - LIBS="$LIBS $tcap" - AC_TRY_RUN([ -#include -int main(void) -{ - SLutf8_enable(1); - return 0; -}], - [AC_MSG_RESULT(yes) - AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.]) slang_support=yes - CURSES_LIB_WIDE=yes - if test x$with_slang != xyes; then - CURSES_LIB="-L${with_slang}/lib -lslang $tcap" - else - CURSES_LIB="-lslang $tcap" - fi - CURSES_LIB_NAME=slang], - [AC_MSG_RESULT(no) - - # We might need the math library - AC_MSG_CHECKING([for SLutf8_enable in -lslang $tcap -lm]) - LIBS="$LIBS -lm" - AC_TRY_RUN([ -#include -int main(void) -{ - SLutf8_enable(1); - return 0; -}], - [AC_MSG_RESULT(yes) - AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.]) slang_support=yes - CURSES_LIB_WIDE=yes - if test x$with_slang != xyes; then - CURSES_LIB="-L${with_slang}/lib -lslang $tcap -lm" - else - CURSES_LIB="-lslang $tcap -lm" - fi - CURSES_LIB_NAME=slang], - [AC_MSG_RESULT(no)], - AC_MSG_WARN([*** Can not use slang when cross-compiling]))], - AC_MSG_WARN([*** Can not use slang when cross-compiling]))], - AC_MSG_WARN([*** Can not use slang when cross-compiling])), - AC_MSG_ERROR([ -*** The header file slcurses.h was not found. If you wish to use -*** slang support this header file is required. Please either -*** install a version of slang that includes the slcurses.h file or -*** do not call the configure script with --with-slang.])) - fi - - if eval "test x$CURSES_LIB_NAME = x"; then - # Reset libs if the above slang tests failed - if test x$enable_utf8 != xno; then - LIBS=$_libs - fi - - AC_CHECK_HEADER(slcurses.h, - AC_MSG_CHECKING([for SLtt_initialize in -lslang]) - _libs=$LIBS - LIBS="$LIBS -lslang" - AC_TRY_RUN([ -#include -int main(void) -{ - SLtt_initialize(NULL); - return 0; -}], - [AC_MSG_RESULT(yes) - AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.]) slang_support=yes - if test x$with_slang != xyes; then - CURSES_LIB="-L${with_slang}/lib -lslang" - else - CURSES_LIB="-lslang" - fi - CURSES_LIB_NAME=slang], - [AC_MSG_RESULT(no) - - # We might need the term library - for termlib in ncurses curses termcap terminfo termlib; do - AC_CHECK_LIB([${termlib}], tputs, [tcap="-l$termlib"]) - test -n "$tcap" && break - done - - AC_MSG_CHECKING([for SLtt_initialize in -lslang $tcap]) - LIBS="$LIBS $tcap" - AC_TRY_RUN([ -#include -int main(void) -{ - SLtt_initialize(NULL); - return 0; -}], - [AC_MSG_RESULT(yes) - AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.]) slang_support=yes - if test x$with_slang != xyes; then - CURSES_LIB="-L${with_slang}/lib -lslang $tcap" - else - CURSES_LIB="-lslang $tcap" - fi - CURSES_LIB_NAME=slang], - [AC_MSG_RESULT(no) - - # We might need the math library - AC_MSG_CHECKING([for SLtt_initialize in -lslang $tcap -lm]) - LIBS="$LIBS -lm" - AC_TRY_RUN([ -#include -int main(void) -{ - SLtt_initialize(NULL); - return 0; -}], - [AC_MSG_RESULT(yes) - AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.]) slang_support=yes - if test x$with_slang != xyes; then - CURSES_LIB="-L${with_slang}/lib -lslang $tcap -lm" - else - CURSES_LIB="-lslang $tcap -lm" - fi - CURSES_LIB_NAME=slang], - [AC_MSG_RESULT(no)], - AC_MSG_WARN([*** Can not use slang when cross-compiling]))], - AC_MSG_WARN([*** Can not use slang when cross-compiling]))], - AC_MSG_WARN([*** Can not use slang when cross-compiling])), - AC_MSG_ERROR([ -*** The header file slcurses.h was not found. If you wish to use -*** slang support this header file is required. Please either -*** install a version of slang that includes the slcurses.h file or -*** do not call the configure script with --with-slang.])) - fi - - if test "${_libs+set}" = "set"; then - LIBS=$_libs - fi - - if test x$with_slang != xyes; then - LDFLAGS=${_ldflags} - fi - ;; - esac], [AC_MSG_RESULT(no)]) - AM_CONDITIONAL(USE_COLOR, test x$color_support = xyes) AM_CONDITIONAL(USE_NANORC, test x$nanorc_support = xyes) @@ -465,16 +278,14 @@ else AC_MSG_ERROR([ *** UTF-8 support was requested, but insufficient UTF-8 support was *** detected in your curses and/or C libraries. Please verify that your -*** slang was built with UTF-8 support or your curses was built with -*** wide character support, and that your C library was built with wide -*** character support.]) +*** curses was built with wide character support, and that your C +*** library was built with wide character support.]) elif test x$enable_utf8 != xno; then AC_MSG_WARN([ *** Insufficient UTF-8 support was detected in your curses and/or C -*** libraries. If you want UTF-8 support, please verify that your slang -*** was built with UTF-8 support or your curses was built with wide -*** character support, and that your C library was built with wide -*** character support.]) +*** libraries. If you want UTF-8 support, please verify that your +*** curses was built with wide character support, and that your C +*** library was built with wide character support.]) fi fi diff --git a/doc/texinfo/nano.texi b/doc/texinfo/nano.texi index e44164b3..847756fb 100644 --- a/doc/texinfo/nano.texi +++ b/doc/texinfo/nano.texi @@ -9,7 +9,7 @@ @smallbook @set EDITION 0.1 @set VERSION 2.0.0 -@set UPDATED 27 Oct 2006 +@set UPDATED 17 Dec 2007 @dircategory Editors @direntry @@ -842,15 +842,11 @@ Disable long line wrapping by default when nano is run as root. @item --enable-utf8 Enable support for reading and writing Unicode files. This will require -either the wide version of ncurses, or a UTF-8-enabled version of Slang. +a wide version of curses. @item --disable-utf8 Disable support for reading and writing Unicode files. -@item --with-slang -Compiling @code{nano} with Slang is supported, and will make the binary -notably smaller than if compiled with ncurses or other curses libraries. - @end table @contents diff --git a/src/nano.c b/src/nano.c index 68c7cda0..439adf72 100644 --- a/src/nano.c +++ b/src/nano.c @@ -942,9 +942,6 @@ void version(void) #endif #ifdef ENABLE_UTF8 printf(" --enable-utf8"); -#endif -#ifdef USE_SLANG - printf(" --with-slang"); #endif printf("\n"); } @@ -1144,19 +1141,10 @@ RETSIGTYPE handle_sigwinch(int signal) if (filepart != NULL) unpartition_filestruct(&filepart); -#ifdef USE_SLANG - /* Slang curses emulation brain damage, part 1: If we just do what - * curses does here, it'll only work properly if the resize made the - * window smaller. Do what mutt does: Leave and immediately reenter - * Slang screen management mode. */ - SLsmg_reset_smg(); - SLsmg_init_smg(); -#else /* Do the equivalent of what Minimum Profit does: Leave and * immediately reenter curses mode. */ endwin(); doupdate(); -#endif /* Restore the terminal to its previous state. */ terminal_init(); @@ -1301,31 +1289,12 @@ void enable_flow_control(void) * control characters. */ void terminal_init(void) { -#ifdef USE_SLANG - /* Slang curses emulation brain damage, part 2: Slang doesn't - * implement nonl() or noecho() properly, so there's no way to - * properly reinitialize the terminal using them. We have to save - * the terminal state after the first call and restore it on - * subsequent calls. */ - static struct termios newterm; - static bool newterm_set = FALSE; - - if (!newterm_set) { -#endif - - raw(); - nonl(); - noecho(); - disable_extended_io(); - if (ISSET(PRESERVE)) - enable_flow_control(); - -#ifdef USE_SLANG - tcgetattr(0, &newterm); - newterm_set = TRUE; - } else - tcsetattr(0, TCSANOW, &newterm); -#endif + raw(); + nonl(); + noecho(); + disable_extended_io(); + if (ISSET(PRESERVE)) + enable_flow_control(); } /* Read in a character, interpret it as a shortcut or toggle if @@ -1760,12 +1729,8 @@ int main(int argc, char **argv) char *locale = setlocale(LC_ALL, ""); if (locale != NULL && (strcasestr(locale, "UTF8") != NULL || - strcasestr(locale, "UTF-8") != NULL)) { -#ifdef USE_SLANG - SLutf8_enable(1); -#endif + strcasestr(locale, "UTF-8") != NULL)) utf8_init(); - } } #else setlocale(LC_ALL, ""); diff --git a/src/nano.h b/src/nano.h index 370d6d33..28b22591 100644 --- a/src/nano.h +++ b/src/nano.h @@ -61,15 +61,8 @@ #define PATH_MAX 4096 #endif -#ifdef USE_SLANG -/* Slang support. */ -#include -/* Slang curses emulation brain damage, part 3: Slang doesn't define the - * curses equivalents of the Insert or Delete keys. */ -#define KEY_DC SL_KEY_DELETE -#define KEY_IC SL_KEY_IC /* Ncurses support. */ -#elif defined(HAVE_NCURSES_H) +#ifdef HAVE_NCURSES_H #include #else /* Curses support. */ diff --git a/src/winio.c b/src/winio.c index b205b1df..bf4be4d3 100644 --- a/src/winio.c +++ b/src/winio.c @@ -3167,14 +3167,7 @@ void edit_update(update_type location) /* Unconditionally redraw the entire screen. */ void total_redraw(void) { -#ifdef USE_SLANG - /* Slang curses emulation brain damage, part 4: Slang doesn't define - * curscr. */ - SLsmg_touch_screen(); - SLsmg_refresh(); -#else wrefresh(curscr); -#endif } /* Unconditionally redraw the entire screen, and then refresh it using -- 2.39.5