add DB's (slightly tweaked) changes to make resizing more flexible, and
also add his replacement of RETSIGTYPE with void, which avoids some potential problems git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2289 35c25a1d-7b9e-4130-9fde-d3aeb78583b8master
parent
b80077dae3
commit
5040666fbb
13
ChangeLog
13
ChangeLog
|
@ -128,6 +128,18 @@ CVS code -
|
||||||
statusbar prompt. New functions do_statusbar_next_word() and
|
statusbar prompt. New functions do_statusbar_next_word() and
|
||||||
do_statusbar_prev_word(); changes to do_statusbar_input().
|
do_statusbar_prev_word(); changes to do_statusbar_input().
|
||||||
(DLR)
|
(DLR)
|
||||||
|
- Make resizing more flexible. We now can work with as few as
|
||||||
|
one row, and with no limit on the number of columns (except of
|
||||||
|
course the curses-imposed limit that it be greater than zero).
|
||||||
|
New function resize_variables(); changes to die_too_small()
|
||||||
|
(renamed check_die_too_small()), global_init(), window_init(),
|
||||||
|
and handle_sigwinch(). (David Benbennick) DLR: Tweak the
|
||||||
|
coordinate formula in window_init() so that the statusbar
|
||||||
|
prompt is always visible.
|
||||||
|
- Use void instead of RETSIGTYPE, as signal handlers are
|
||||||
|
supposed to return void anyway. Also, the value of RETSIGTYPE
|
||||||
|
is sometimes misdetected as int, leading to compilation
|
||||||
|
warnings or errors. (David Benbennick)
|
||||||
- cut.c:
|
- cut.c:
|
||||||
do_cut_text()
|
do_cut_text()
|
||||||
- If keep_cutbuffer is FALSE, only blow away the text in the
|
- If keep_cutbuffer is FALSE, only blow away the text in the
|
||||||
|
@ -186,6 +198,7 @@ CVS code -
|
||||||
- nano.h:
|
- nano.h:
|
||||||
- Remove now-unneeded #defines for functions that now have
|
- Remove now-unneeded #defines for functions that now have
|
||||||
multibyte equivalents. (DLR)
|
multibyte equivalents. (DLR)
|
||||||
|
- Remove now-unneeded MIN_EDITOR_COLS. (David Benbennick)
|
||||||
- utils.c:
|
- utils.c:
|
||||||
regexec_safe()
|
regexec_safe()
|
||||||
- Remove redundant regexec #define, and move the regexec #undef
|
- Remove redundant regexec #define, and move the regexec #undef
|
||||||
|
|
91
src/nano.c
91
src/nano.c
|
@ -79,6 +79,11 @@ static filestruct *jusbottom = NULL;
|
||||||
/* Pointer to end of justify buffer. */
|
/* Pointer to end of justify buffer. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void print_view_warning(void)
|
||||||
|
{
|
||||||
|
statusbar(_("Key illegal in VIEW mode"));
|
||||||
|
}
|
||||||
|
|
||||||
/* What we do when we're all set to exit. */
|
/* What we do when we're all set to exit. */
|
||||||
void finish(void)
|
void finish(void)
|
||||||
{
|
{
|
||||||
|
@ -178,36 +183,17 @@ void die_save_file(const char *die_filename)
|
||||||
|
|
||||||
/* Die with an error message that the screen was too small if, well, the
|
/* Die with an error message that the screen was too small if, well, the
|
||||||
* screen is too small. */
|
* screen is too small. */
|
||||||
void die_too_small(void)
|
void check_die_too_small(void)
|
||||||
{
|
{
|
||||||
die(_("Window size is too small for nano...\n"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_view_warning(void)
|
|
||||||
{
|
|
||||||
statusbar(_("Key illegal in VIEW mode"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize global variables -- no better way for now. If
|
|
||||||
* save_cutbuffer is TRUE, don't set cutbuffer to NULL. */
|
|
||||||
void global_init(bool save_cutbuffer)
|
|
||||||
{
|
|
||||||
current_x = 0;
|
|
||||||
current_y = 0;
|
|
||||||
|
|
||||||
editwinrows = LINES - 5 + no_more_space() + no_help();
|
editwinrows = LINES - 5 + no_more_space() + no_help();
|
||||||
if (editwinrows < MIN_EDITOR_ROWS || COLS < MIN_EDITOR_COLS)
|
if (editwinrows < MIN_EDITOR_ROWS)
|
||||||
die_too_small();
|
die(_("Window size is too small for nano...\n"));
|
||||||
|
}
|
||||||
fileage = NULL;
|
|
||||||
if (!save_cutbuffer)
|
|
||||||
cutbuffer = NULL;
|
|
||||||
current = NULL;
|
|
||||||
edittop = NULL;
|
|
||||||
totlines = 0;
|
|
||||||
totsize = 0;
|
|
||||||
placewewant = 0;
|
|
||||||
|
|
||||||
|
/* Reassign variables that depend on the window size. That is, fill and
|
||||||
|
* hblank. */
|
||||||
|
void resize_variables(void)
|
||||||
|
{
|
||||||
#ifndef DISABLE_WRAPJUSTIFY
|
#ifndef DISABLE_WRAPJUSTIFY
|
||||||
fill = wrap_at;
|
fill = wrap_at;
|
||||||
if (fill <= 0)
|
if (fill <= 0)
|
||||||
|
@ -216,16 +202,33 @@ void global_init(bool save_cutbuffer)
|
||||||
fill = 0;
|
fill = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
hblank = charalloc(COLS + 1);
|
hblank = charealloc(hblank, COLS + 1);
|
||||||
memset(hblank, ' ', COLS);
|
memset(hblank, ' ', COLS);
|
||||||
hblank[COLS] = '\0';
|
hblank[COLS] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Initialize global variables -- no better way for now. If
|
||||||
|
* save_cutbuffer is TRUE, don't set cutbuffer to NULL. */
|
||||||
|
void global_init(bool save_cutbuffer)
|
||||||
|
{
|
||||||
|
check_die_too_small();
|
||||||
|
resize_variables();
|
||||||
|
|
||||||
|
fileage = NULL;
|
||||||
|
edittop = NULL;
|
||||||
|
current = NULL;
|
||||||
|
if (!save_cutbuffer)
|
||||||
|
cutbuffer = NULL;
|
||||||
|
current_x = 0;
|
||||||
|
placewewant = 0;
|
||||||
|
current_y = 0;
|
||||||
|
totlines = 0;
|
||||||
|
totsize = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void window_init(void)
|
void window_init(void)
|
||||||
{
|
{
|
||||||
editwinrows = LINES - 5 + no_more_space() + no_help();
|
check_die_too_small();
|
||||||
if (editwinrows < MIN_EDITOR_ROWS)
|
|
||||||
die_too_small();
|
|
||||||
|
|
||||||
if (topwin != NULL)
|
if (topwin != NULL)
|
||||||
delwin(topwin);
|
delwin(topwin);
|
||||||
|
@ -237,7 +240,7 @@ void window_init(void)
|
||||||
/* Set up the windows. */
|
/* Set up the windows. */
|
||||||
topwin = newwin(2 - no_more_space(), COLS, 0, 0);
|
topwin = newwin(2 - no_more_space(), COLS, 0, 0);
|
||||||
edit = newwin(editwinrows, COLS, 2 - no_more_space(), 0);
|
edit = newwin(editwinrows, COLS, 2 - no_more_space(), 0);
|
||||||
bottomwin = newwin(3 - no_help(), COLS, LINES - 3 + no_help(), 0);
|
bottomwin = newwin(3 - no_help(), COLS, editwinrows + 1, 0);
|
||||||
|
|
||||||
/* Turn the keypad back on. */
|
/* Turn the keypad back on. */
|
||||||
keypad(edit, TRUE);
|
keypad(edit, TRUE);
|
||||||
|
@ -1054,7 +1057,7 @@ void nano_disabled_msg(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NANO_SMALL
|
#ifndef NANO_SMALL
|
||||||
RETSIGTYPE cancel_fork(int signal)
|
void cancel_fork(int signal)
|
||||||
{
|
{
|
||||||
if (kill(pid, SIGKILL) == -1)
|
if (kill(pid, SIGKILL) == -1)
|
||||||
nperror("kill");
|
nperror("kill");
|
||||||
|
@ -3259,13 +3262,13 @@ void signal_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handler for SIGHUP (hangup) and SIGTERM (terminate). */
|
/* Handler for SIGHUP (hangup) and SIGTERM (terminate). */
|
||||||
RETSIGTYPE handle_hupterm(int signal)
|
void handle_hupterm(int signal)
|
||||||
{
|
{
|
||||||
die(_("Received SIGHUP or SIGTERM\n"));
|
die(_("Received SIGHUP or SIGTERM\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handler for SIGTSTP (suspend). */
|
/* Handler for SIGTSTP (suspend). */
|
||||||
RETSIGTYPE do_suspend(int signal)
|
void do_suspend(int signal)
|
||||||
{
|
{
|
||||||
endwin();
|
endwin();
|
||||||
printf("\n\n\n\n\n%s\n", _("Use \"fg\" to return to nano"));
|
printf("\n\n\n\n\n%s\n", _("Use \"fg\" to return to nano"));
|
||||||
|
@ -3285,7 +3288,7 @@ RETSIGTYPE do_suspend(int signal)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handler for SIGCONT (continue after suspend). */
|
/* Handler for SIGCONT (continue after suspend). */
|
||||||
RETSIGTYPE do_cont(int signal)
|
void do_cont(int signal)
|
||||||
{
|
{
|
||||||
#ifndef NANO_SMALL
|
#ifndef NANO_SMALL
|
||||||
/* Perhaps the user resized the window while we slept. Handle it
|
/* Perhaps the user resized the window while we slept. Handle it
|
||||||
|
@ -3321,21 +3324,9 @@ void handle_sigwinch(int s)
|
||||||
* But not in all cases, argh. */
|
* But not in all cases, argh. */
|
||||||
COLS = win.ws_col;
|
COLS = win.ws_col;
|
||||||
LINES = win.ws_row;
|
LINES = win.ws_row;
|
||||||
editwinrows = LINES - 5 + no_more_space() + no_help();
|
|
||||||
if (editwinrows < MIN_EDITOR_ROWS || COLS < MIN_EDITOR_COLS)
|
|
||||||
die_too_small();
|
|
||||||
|
|
||||||
#ifndef DISABLE_WRAPJUSTIFY
|
check_die_too_small();
|
||||||
fill = wrap_at;
|
resize_variables();
|
||||||
if (fill <= 0)
|
|
||||||
fill += COLS;
|
|
||||||
if (fill < 0)
|
|
||||||
fill = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
hblank = charealloc(hblank, COLS + 1);
|
|
||||||
memset(hblank, ' ', COLS);
|
|
||||||
hblank[COLS] = '\0';
|
|
||||||
|
|
||||||
/* If we've partitioned the filestruct, unpartition it now. */
|
/* If we've partitioned the filestruct, unpartition it now. */
|
||||||
if (filepart != NULL)
|
if (filepart != NULL)
|
||||||
|
|
|
@ -501,10 +501,7 @@ typedef struct historyheadtype {
|
||||||
#define NOVIEW FALSE
|
#define NOVIEW FALSE
|
||||||
|
|
||||||
/* Minimum editor window rows required for nano to work correctly. */
|
/* Minimum editor window rows required for nano to work correctly. */
|
||||||
#define MIN_EDITOR_ROWS 3
|
#define MIN_EDITOR_ROWS 1
|
||||||
|
|
||||||
/* Minimum editor window cols required for nano to work correctly. */
|
|
||||||
#define MIN_EDITOR_COLS 10
|
|
||||||
|
|
||||||
/* Default number of characters from end-of-line where text wrapping
|
/* Default number of characters from end-of-line where text wrapping
|
||||||
* occurs. */
|
* occurs. */
|
||||||
|
|
13
src/proto.h
13
src/proto.h
|
@ -343,11 +343,12 @@ void do_right(bool allow_update);
|
||||||
void do_right_void(void);
|
void do_right_void(void);
|
||||||
|
|
||||||
/* Public functions in nano.c. */
|
/* Public functions in nano.c. */
|
||||||
|
void print_view_warning(void);
|
||||||
void finish(void);
|
void finish(void);
|
||||||
void die(const char *msg, ...);
|
void die(const char *msg, ...);
|
||||||
void die_save_file(const char *die_filename);
|
void die_save_file(const char *die_filename);
|
||||||
void die_too_small(void);
|
void check_die_too_small(void);
|
||||||
void print_view_warning(void);
|
void resize_variables(void);
|
||||||
void global_init(bool save_cutbuffer);
|
void global_init(bool save_cutbuffer);
|
||||||
void window_init(void);
|
void window_init(void);
|
||||||
#ifndef DISABLE_MOUSE
|
#ifndef DISABLE_MOUSE
|
||||||
|
@ -380,7 +381,7 @@ int no_more_space(void);
|
||||||
int no_help(void);
|
int no_help(void);
|
||||||
void nano_disabled_msg(void);
|
void nano_disabled_msg(void);
|
||||||
#ifndef NANO_SMALL
|
#ifndef NANO_SMALL
|
||||||
RETSIGTYPE cancel_fork(int signal);
|
void cancel_fork(int signal);
|
||||||
bool open_pipe(const char *command);
|
bool open_pipe(const char *command);
|
||||||
#endif
|
#endif
|
||||||
void do_verbatim_input(void);
|
void do_verbatim_input(void);
|
||||||
|
@ -428,9 +429,9 @@ void do_full_justify(void);
|
||||||
#endif /* !DISABLE_JUSTIFY */
|
#endif /* !DISABLE_JUSTIFY */
|
||||||
void do_exit(void);
|
void do_exit(void);
|
||||||
void signal_init(void);
|
void signal_init(void);
|
||||||
RETSIGTYPE handle_hupterm(int signal);
|
void handle_hupterm(int signal);
|
||||||
RETSIGTYPE do_suspend(int signal);
|
void do_suspend(int signal);
|
||||||
RETSIGTYPE do_cont(int signal);
|
void do_cont(int signal);
|
||||||
#ifndef NANO_SMALL
|
#ifndef NANO_SMALL
|
||||||
void handle_sigwinch(int s);
|
void handle_sigwinch(int s);
|
||||||
void allow_pending_sigwinch(bool allow);
|
void allow_pending_sigwinch(bool allow);
|
||||||
|
|
Loading…
Reference in New Issue