revert last changes, but disable all the same features that
--enable-tiny does when --with-slang is used git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4204 35c25a1d-7b9e-4130-9fde-d3aeb78583b8master
parent
c7fa5e1f9e
commit
f78bc85db1
11
ChangeLog
11
ChangeLog
|
@ -1,13 +1,10 @@
|
||||||
2007-12-17 David Lawrence Ramsey <pooka109@gmail.com>
|
2007-12-17 David Lawrence Ramsey <pooka109@gmail.com>
|
||||||
|
|
||||||
* configure.ac, doc/texinfo/nano.texi, nano.c (version,
|
* configure.ac, doc/texinfo/nano.texi, nano.c (terminal_init):
|
||||||
handle_sigwinch, terminal_init), winio.c (total_redraw): Remove
|
Change slang curses emulation support to turn off the same
|
||||||
slang curses emulation support, as it's hopelessly broken, and
|
options as --enable-tiny, as it's hopelessly broken otherwise.
|
||||||
it doesn't make the binary very much smaller, especially when
|
|
||||||
--enable-tiny is used.
|
|
||||||
* nano.c (disable_signals, main): Simplify terminal handling by
|
* nano.c (disable_signals, main): Simplify terminal handling by
|
||||||
using raw mode instead of cbreak mode. This eliminates the need
|
using raw mode instead of cbreak mode.
|
||||||
for disable_signals().
|
|
||||||
* text.c (execute_command): Call terminal_init() instead of just
|
* text.c (execute_command): Call terminal_init() instead of just
|
||||||
disable_signals() after executing the command, as the command
|
disable_signals() after executing the command, as the command
|
||||||
may have changed the terminal settings.
|
may have changed the terminal settings.
|
||||||
|
|
211
configure.ac
211
configure.ac
|
@ -185,6 +185,205 @@ fi],
|
||||||
[enable_utf8=auto])
|
[enable_utf8=auto])
|
||||||
AC_MSG_RESULT($enable_utf8)
|
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 <slcurses.h>
|
||||||
|
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 <slcurses.h>
|
||||||
|
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 <slcurses.h>
|
||||||
|
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 <slcurses.h>
|
||||||
|
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 <slcurses.h>
|
||||||
|
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 <slcurses.h>
|
||||||
|
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)])
|
||||||
|
|
||||||
|
if test x$with_slang != xno; then
|
||||||
|
AC_DEFINE(NANO_TINY, 1, [Define this to make the nano executable as small as possible.]) tiny_support=yes
|
||||||
|
AC_DEFINE(DISABLE_BROWSER, 1, [Define this to disable the built-in file browser.])
|
||||||
|
AC_DEFINE(DISABLE_HELP, 1, [Define this to disable the help text display.])
|
||||||
|
AC_DEFINE(DISABLE_JUSTIFY, 1, [Define this to disable the justify routines.])
|
||||||
|
AC_DEFINE(DISABLE_MOUSE, 1, [Define this to disable the mouse functions.])
|
||||||
|
AC_DEFINE(DISABLE_OPERATINGDIR, 1, [Define this to disable the setting of the operating directory (chroot of sorts).])
|
||||||
|
AC_DEFINE(DISABLE_SPELLER, 1, [Define this to disable the spell checker functions.])
|
||||||
|
AC_DEFINE(DISABLE_TABCOMP, 1, [Define to disable the tab completion functions for files and search strings.])
|
||||||
|
AC_DEFINE(DISABLE_WRAPPING, 1, [Define this to disable all text wrapping.])
|
||||||
|
fi
|
||||||
|
|
||||||
AM_CONDITIONAL(USE_COLOR, test x$color_support = xyes)
|
AM_CONDITIONAL(USE_COLOR, test x$color_support = xyes)
|
||||||
AM_CONDITIONAL(USE_NANORC, test x$nanorc_support = xyes)
|
AM_CONDITIONAL(USE_NANORC, test x$nanorc_support = xyes)
|
||||||
|
|
||||||
|
@ -279,14 +478,16 @@ else
|
||||||
AC_MSG_ERROR([
|
AC_MSG_ERROR([
|
||||||
*** UTF-8 support was requested, but insufficient UTF-8 support was
|
*** UTF-8 support was requested, but insufficient UTF-8 support was
|
||||||
*** detected in your curses and/or C libraries. Please verify that your
|
*** detected in your curses and/or C libraries. Please verify that your
|
||||||
*** curses was built with wide character support, and that your C
|
*** slang was built with UTF-8 support or your curses was built with
|
||||||
*** library was built with wide character support.])
|
*** wide character support, and that your C library was built with wide
|
||||||
|
*** character support.])
|
||||||
elif test x$enable_utf8 != xno; then
|
elif test x$enable_utf8 != xno; then
|
||||||
AC_MSG_WARN([
|
AC_MSG_WARN([
|
||||||
*** Insufficient UTF-8 support was detected in your curses and/or C
|
*** Insufficient UTF-8 support was detected in your curses and/or C
|
||||||
*** libraries. If you want UTF-8 support, please verify that your
|
*** libraries. If you want UTF-8 support, please verify that your slang
|
||||||
*** curses was built with wide character support, and that your C
|
*** was built with UTF-8 support or your curses was built with wide
|
||||||
*** library was built with wide character support.])
|
*** character support, and that your C library was built with wide
|
||||||
|
*** character support.])
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -842,11 +842,15 @@ Disable long line wrapping by default when nano is run as root.
|
||||||
|
|
||||||
@item --enable-utf8
|
@item --enable-utf8
|
||||||
Enable support for reading and writing Unicode files. This will require
|
Enable support for reading and writing Unicode files. This will require
|
||||||
a wide version of curses.
|
either a wide version of curses, or a UTF-8-enabled version of Slang.
|
||||||
|
|
||||||
@item --disable-utf8
|
@item --disable-utf8
|
||||||
Disable support for reading and writing Unicode files.
|
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
|
@end table
|
||||||
|
|
||||||
@contents
|
@contents
|
||||||
|
|
59
src/nano.c
59
src/nano.c
|
@ -944,6 +944,9 @@ void version(void)
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_UTF8
|
#ifdef ENABLE_UTF8
|
||||||
printf(" --enable-utf8");
|
printf(" --enable-utf8");
|
||||||
|
#endif
|
||||||
|
#ifdef USE_SLANG
|
||||||
|
printf(" --with-slang");
|
||||||
#endif
|
#endif
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
@ -1143,10 +1146,19 @@ RETSIGTYPE handle_sigwinch(int signal)
|
||||||
if (filepart != NULL)
|
if (filepart != NULL)
|
||||||
unpartition_filestruct(&filepart);
|
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
|
/* Do the equivalent of what Minimum Profit does: Leave and
|
||||||
* immediately reenter curses mode. */
|
* immediately reenter curses mode. */
|
||||||
endwin();
|
endwin();
|
||||||
doupdate();
|
doupdate();
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Restore the terminal to its previous state. */
|
/* Restore the terminal to its previous state. */
|
||||||
terminal_init();
|
terminal_init();
|
||||||
|
@ -1246,6 +1258,19 @@ void disable_extended_io(void)
|
||||||
tcsetattr(0, TCSANOW, &term);
|
tcsetattr(0, TCSANOW, &term);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_SLANG
|
||||||
|
/* Disable interpretation of the special control keys in our terminal
|
||||||
|
* settings. */
|
||||||
|
void disable_signals(void)
|
||||||
|
{
|
||||||
|
struct termios term;
|
||||||
|
|
||||||
|
tcgetattr(0, &term);
|
||||||
|
term.c_lflag &= ~ISIG;
|
||||||
|
tcsetattr(0, TCSANOW, &term);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef NANO_TINY
|
#ifndef NANO_TINY
|
||||||
/* Enable interpretation of the special control keys in our terminal
|
/* Enable interpretation of the special control keys in our terminal
|
||||||
* settings. */
|
* settings. */
|
||||||
|
@ -1291,12 +1316,34 @@ void enable_flow_control(void)
|
||||||
* control characters. */
|
* control characters. */
|
||||||
void terminal_init(void)
|
void terminal_init(void)
|
||||||
{
|
{
|
||||||
raw();
|
#ifdef USE_SLANG
|
||||||
nonl();
|
/* Slang curses emulation brain damage, part 2: Slang doesn't
|
||||||
noecho();
|
* implement raw(), nonl(), or noecho() properly, so there's no way
|
||||||
disable_extended_io();
|
* to properly reinitialize the terminal using them. We have to
|
||||||
if (ISSET(PRESERVE))
|
* disable the special control keys using termios, save the terminal
|
||||||
enable_flow_control();
|
* 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
|
||||||
|
disable_signals();
|
||||||
|
|
||||||
|
tcgetattr(0, &newterm);
|
||||||
|
newterm_set = TRUE;
|
||||||
|
} else
|
||||||
|
tcsetattr(0, TCSANOW, &newterm);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read in a character, interpret it as a shortcut or toggle if
|
/* Read in a character, interpret it as a shortcut or toggle if
|
||||||
|
|
|
@ -61,8 +61,15 @@
|
||||||
#define PATH_MAX 4096
|
#define PATH_MAX 4096
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_SLANG
|
||||||
|
/* Slang support. */
|
||||||
|
#include <slcurses.h>
|
||||||
|
/* 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. */
|
/* Ncurses support. */
|
||||||
#ifdef HAVE_NCURSES_H
|
#elif defined(HAVE_NCURSES_H)
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#else
|
#else
|
||||||
/* Curses support. */
|
/* Curses support. */
|
||||||
|
|
|
@ -475,6 +475,9 @@ void allow_pending_sigwinch(bool allow);
|
||||||
void do_toggle(const toggle *which);
|
void do_toggle(const toggle *which);
|
||||||
#endif
|
#endif
|
||||||
void disable_extended_io(void);
|
void disable_extended_io(void);
|
||||||
|
#ifdef USE_SLANG
|
||||||
|
void disable_signals(void);
|
||||||
|
#endif
|
||||||
#ifndef NANO_TINY
|
#ifndef NANO_TINY
|
||||||
void enable_signals(void);
|
void enable_signals(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -3167,7 +3167,14 @@ void edit_update(update_type location)
|
||||||
/* Unconditionally redraw the entire screen. */
|
/* Unconditionally redraw the entire screen. */
|
||||||
void total_redraw(void)
|
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);
|
wrefresh(curscr);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unconditionally redraw the entire screen, and then refresh it using
|
/* Unconditionally redraw the entire screen, and then refresh it using
|
||||||
|
|
Loading…
Reference in New Issue