From c7fa5e1f9ea2009f7ab7a38d82f1aa390a7b0e2e 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/trunk/nano@4203 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 5 ++ configure.ac | 199 ++---------------------------------------- doc/texinfo/nano.texi | 8 +- src/nano.c | 43 ++------- src/nano.h | 9 +- src/winio.c | 7 -- 6 files changed, 19 insertions(+), 252 deletions(-) diff --git a/ChangeLog b/ChangeLog index e423dcd8..728aa27a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2007-12-17 David Lawrence Ramsey + * configure.ac, doc/texinfo/nano.texi, nano.c (version, + handle_sigwinch, terminal_init), winio.c (total_redraw): 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. * nano.c (disable_signals, main): Simplify terminal handling by using raw mode instead of cbreak mode. This eliminates the need for disable_signals(). diff --git a/configure.ac b/configure.ac index 787b36f1..3811ba27 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) @@ -466,16 +279,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 a4aac9af..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 23 Aug 2007 +@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 807d825a..a5f7e5ee 100644 --- a/src/nano.c +++ b/src/nano.c @@ -944,9 +944,6 @@ void version(void) #endif #ifdef ENABLE_UTF8 printf(" --enable-utf8"); -#endif -#ifdef USE_SLANG - printf(" --with-slang"); #endif printf("\n"); } @@ -1146,19 +1143,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(); @@ -1303,31 +1291,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 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