]> git.wh0rd.org Git - nano.git/commitdiff
add DB's (slightly tweaked) changes to make resizing more flexible, and
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 19 Jan 2005 19:52:42 +0000 (19:52 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 19 Jan 2005 19:52:42 +0000 (19:52 +0000)
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-d3aeb78583b8

ChangeLog
src/nano.c
src/nano.h
src/proto.h

index fc42e5c0a5f57c26fc741b642df6e7323670e77a..b9d2ab679c493f03629363f531e65e25e3688c59 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -128,6 +128,18 @@ CVS code -
          statusbar prompt.  New functions do_statusbar_next_word() and
          do_statusbar_prev_word(); changes to do_statusbar_input().
          (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:
   do_cut_text()
        - If keep_cutbuffer is FALSE, only blow away the text in the
@@ -186,6 +198,7 @@ CVS code -
 - nano.h:
        - Remove now-unneeded #defines for functions that now have
          multibyte equivalents. (DLR)
+       - Remove now-unneeded MIN_EDITOR_COLS. (David Benbennick)
 - utils.c:
   regexec_safe()
        - Remove redundant regexec #define, and move the regexec #undef
index 9e072ade5ce90e377f66081b80f7cf9e89a5a03f..342e3af85aa2aa04ec9c8b939eb65c7aa855f933 100644 (file)
@@ -79,6 +79,11 @@ static filestruct *jusbottom = NULL;
        /* Pointer to end of justify buffer. */
 #endif
 
+void print_view_warning(void)
+{
+    statusbar(_("Key illegal in VIEW mode"));
+}
+
 /* What we do when we're all set to exit. */
 void finish(void)
 {
@@ -178,54 +183,52 @@ void die_save_file(const char *die_filename)
 
 /* Die with an error message that the screen was too small if, well, the
  * screen is too small. */
-void die_too_small(void)
+void check_die_too_small(void)
 {
-    die(_("Window size is too small for nano...\n"));
+    editwinrows = LINES - 5 + no_more_space() + no_help();
+    if (editwinrows < MIN_EDITOR_ROWS)
+       die(_("Window size is too small for nano...\n"));
 }
 
-void print_view_warning(void)
+/* Reassign variables that depend on the window size.  That is, fill and
+ * hblank. */
+void resize_variables(void)
 {
-    statusbar(_("Key illegal in VIEW mode"));
+#ifndef DISABLE_WRAPJUSTIFY
+    fill = wrap_at;
+    if (fill <= 0)
+       fill += COLS;
+    if (fill < 0)
+       fill = 0;
+#endif
+
+    hblank = charealloc(hblank, COLS + 1);
+    memset(hblank, ' ', COLS);
+    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)
 {
-    current_x = 0;
-    current_y = 0;
-
-    editwinrows = LINES - 5 + no_more_space() + no_help();
-    if (editwinrows < MIN_EDITOR_ROWS || COLS < MIN_EDITOR_COLS)
-       die_too_small();
+    check_die_too_small();
+    resize_variables();
 
     fileage = NULL;
+    edittop = NULL;
+    current = NULL;
     if (!save_cutbuffer)
        cutbuffer = NULL;
-    current = NULL;
-    edittop = NULL;
+    current_x = 0;
+    placewewant = 0;
+    current_y = 0;
     totlines = 0;
     totsize = 0;
-    placewewant = 0;
-
-#ifndef DISABLE_WRAPJUSTIFY
-    fill = wrap_at;
-    if (fill <= 0)
-       fill += COLS;
-    if (fill < 0)
-       fill = 0;
-#endif
-
-    hblank = charalloc(COLS + 1);
-    memset(hblank, ' ', COLS);
-    hblank[COLS] = '\0';
 }
 
 void window_init(void)
 {
-    editwinrows = LINES - 5 + no_more_space() + no_help();
-    if (editwinrows < MIN_EDITOR_ROWS)
-       die_too_small();
+    check_die_too_small();
 
     if (topwin != NULL)
        delwin(topwin);
@@ -237,7 +240,7 @@ void window_init(void)
     /* Set up the windows. */
     topwin = newwin(2 - no_more_space(), COLS, 0, 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. */
     keypad(edit, TRUE);
@@ -1054,7 +1057,7 @@ void nano_disabled_msg(void)
 }
 
 #ifndef NANO_SMALL
-RETSIGTYPE cancel_fork(int signal)
+void cancel_fork(int signal)
 {
     if (kill(pid, SIGKILL) == -1)
        nperror("kill");
@@ -3259,13 +3262,13 @@ void signal_init(void)
 }
 
 /* Handler for SIGHUP (hangup) and SIGTERM (terminate). */
-RETSIGTYPE handle_hupterm(int signal)
+void handle_hupterm(int signal)
 {
     die(_("Received SIGHUP or SIGTERM\n"));
 }
 
 /* Handler for SIGTSTP (suspend). */
-RETSIGTYPE do_suspend(int signal)
+void do_suspend(int signal)
 {
     endwin();
     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). */
-RETSIGTYPE do_cont(int signal)
+void do_cont(int signal)
 {
 #ifndef NANO_SMALL
     /* 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. */
     COLS = win.ws_col;
     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
-    fill = wrap_at;
-    if (fill <= 0)
-       fill += COLS;
-    if (fill < 0)
-       fill = 0;
-#endif
 
-    hblank = charealloc(hblank, COLS + 1);
-    memset(hblank, ' ', COLS);
-    hblank[COLS] = '\0';
+    check_die_too_small();
+    resize_variables();
 
     /* If we've partitioned the filestruct, unpartition it now. */
     if (filepart != NULL)
index 31a50866a35e028b61e2af3500c7662dba724334..b8814d5ab85f970cbbe36a281d7364736ed7db05 100644 (file)
@@ -501,10 +501,7 @@ typedef struct historyheadtype {
 #define NOVIEW FALSE
 
 /* Minimum editor window rows required for nano to work correctly. */
-#define MIN_EDITOR_ROWS 3
-
-/* Minimum editor window cols required for nano to work correctly. */
-#define MIN_EDITOR_COLS 10
+#define MIN_EDITOR_ROWS 1
 
 /* Default number of characters from end-of-line where text wrapping
  * occurs. */
index 9413b164cb58eade5bab7a4746d3c9be128d7056..0b1581e90bffdd350b2342e35941c42b66c7eea2 100644 (file)
@@ -343,11 +343,12 @@ void do_right(bool allow_update);
 void do_right_void(void);
 
 /* Public functions in nano.c. */
+void print_view_warning(void);
 void finish(void);
 void die(const char *msg, ...);
 void die_save_file(const char *die_filename);
-void die_too_small(void);
-void print_view_warning(void);
+void check_die_too_small(void);
+void resize_variables(void);
 void global_init(bool save_cutbuffer);
 void window_init(void);
 #ifndef DISABLE_MOUSE
@@ -380,7 +381,7 @@ int no_more_space(void);
 int no_help(void);
 void nano_disabled_msg(void);
 #ifndef NANO_SMALL
-RETSIGTYPE cancel_fork(int signal);
+void cancel_fork(int signal);
 bool open_pipe(const char *command);
 #endif
 void do_verbatim_input(void);
@@ -428,9 +429,9 @@ void do_full_justify(void);
 #endif /* !DISABLE_JUSTIFY */
 void do_exit(void);
 void signal_init(void);
-RETSIGTYPE handle_hupterm(int signal);
-RETSIGTYPE do_suspend(int signal);
-RETSIGTYPE do_cont(int signal);
+void handle_hupterm(int signal);
+void do_suspend(int signal);
+void do_cont(int signal);
 #ifndef NANO_SMALL
 void handle_sigwinch(int s);
 void allow_pending_sigwinch(bool allow);