]> git.wh0rd.org Git - nano.git/commitdiff
a few miscellaneous Pico compatibility tweaks and bugfixes (most
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Fri, 23 Jul 2004 12:30:40 +0000 (12:30 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Fri, 23 Jul 2004 12:30:40 +0000 (12:30 +0000)
importantly, a fix for a segfault when trying to full-justify a file
with no paragraphs)

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1862 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

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

index 944f18f9b7f02f58ba7fd7c85f4a52c726cf659d..336a668fa5ae4c6610643fe150b13bdc65cbd3f7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -61,21 +61,34 @@ CVS code -
   shortcut_init()
        - Fix erroneous #ifdef so that nano compiles with
          --disable-justify again. (DLR; found by Mike Frysinger)
+       - Change the Cancel shortcut in the file browser to an Exit
+         shortcut, to be more compatible with the current version of
+         Pico. (DLR)
   thanks_for_all_the_fish()
        - Delete topwin, edit, and bottomwin. (David Benbennick)
 - nano.c:
   do_justify()
-       - Add on_next_line flag, used to indicate when we've moved to
+       - Add allow_respacing flag, used to indicate when we've moved to
          the next line after justifying the current line, and only run
          the respacing routine when it's true.  This keeps the
          respacing routine from erroneously being run more than once on
          the same line. (DLR)
+       - Check for first_par_line's not being NULL and only run the
+         renumbering and cutbuffer-splicing routines depending on that
+         if that's the case.  This fixes a segfault occurring when
+         trying to do full justification on a file with no paragraphs
+         (in which case there are no normal lines to renumber and no
+         backed-up lines to be stored in the cutbuffer or spliced back
+         in during unjustify). (DLR)
   do_exit()
        - Tweak for efficiency. (David Benbennick)
   main()
        - Move the reset_cursor() call to the beginning of the main
          input loop, and remove the apparently unnecessary wrefresh()
          call. (David Benbennick)
+- nano.h:
+       - Reassign the key for full justification to Ctrl-U, for
+         compatibility with the current version of Pico. (DLR)
 - proto.h:
        - Change the variables in the prototypes for do_justify(),
          get_verbatim_kbinput(), and get_mouseinput() to match the ones
@@ -108,6 +121,18 @@ CVS code -
        - Tweak the code to update the edit window just before getting
          statusbar input for efficiency, and update bottomwin just
          before then too. (David Benbennick)
+       - Don't delete the statusbar line on UnCut, since the current
+         version of Pico doesn't. (DLR)
+  line_len()
+       - Rename to help_line_len() so as not to conflict with the
+         line_len variable used elsewhere, and move inside the
+         DISABLE_HELP #ifdef surrounding do_help() since it's only
+         called in do_help(). (DLR)
+  do_help()
+       - Have help_line_len() properly return an int again, since its
+         value can't be larger than COLS. (DLR)
+       - Allow the user to exit the help browser via Ctrl-C as well as
+         Ctrl-X, for consistency with the file browser. (DLR)
 
 GNU nano 1.3.3 - 2004.06.28
 - General:
index e341f516fd62d44106dd540a98ef1b7bfed2835b..34e00834c20647256801b9e9fe1655240cfc279c 100644 (file)
@@ -323,7 +323,8 @@ void shortcut_init(int unjustify)
     const char *nano_multibuffer_msg = N_("Insert into new buffer");
 #endif
 #ifndef DISABLE_BROWSER
-    const char *nano_gotodir_msg = N_("Go to directory");
+    const char *nano_exit_browser_msg = N_("Exit from the file browser");
+    const char *nano_goto_dir_msg = N_("Go to directory");
 #endif
 #endif /* !DISABLE_HELP */
 
@@ -913,8 +914,8 @@ void shortcut_init(int unjustify)
 #endif
                );
 
-    sc_init_one(&browser_list, NANO_CANCEL_KEY, cancel_msg,
-       IFHELP(nano_cancel_msg, NANO_NO_KEY), NANO_NO_KEY,
+    sc_init_one(&browser_list, NANO_EXIT_KEY, exit_msg,
+       IFHELP(nano_exit_browser_msg, NANO_NO_KEY), NANO_EXIT_FKEY,
        NANO_NO_KEY, VIEW, 0);
 
     sc_init_one(&browser_list, NANO_PREVPAGE_KEY, prev_page_msg,
@@ -927,7 +928,7 @@ void shortcut_init(int unjustify)
 
     /* Translators: try to keep this string under 22 characters long */
     sc_init_one(&browser_list, NANO_GOTO_KEY, N_("Go To Dir"),
-       IFHELP(nano_gotodir_msg, NANO_ALT_GOTO_KEY), NANO_GOTO_FKEY,
+       IFHELP(nano_goto_dir_msg, NANO_ALT_GOTO_KEY), NANO_GOTO_FKEY,
        NANO_NO_KEY, VIEW, 0);
 
     free_shortcutage(&gotodir_list);
index 992f893cfb714c8cff80821d77cc575ff039aad1..f521ee27a8d9436e03fbb60128ae32b30d74ae57 100644 (file)
@@ -2638,12 +2638,15 @@ void do_justify(int full_justify)
     /* We are now done justifying the paragraph or the file, so clean
      * up.  totlines, totsize, and current_y have been maintained above.
      * Set last_par_line to the new end of the paragraph, update
-     * fileage, and set current_x.  Also, edit_refresh() needs the line
-     * numbers to be right, so renumber(). */
+     * fileage, and renumber() since edit_refresh() needs the line
+     * numbers to be right (but only do the last two if we actually
+     * justified something). */
     last_par_line = current->prev;
-    if (first_par_line->prev == NULL)
-       fileage = first_par_line;
-    renumber(first_par_line);
+    if (first_par_line != NULL) {
+       if (first_par_line->prev == NULL)
+           fileage = first_par_line;
+       renumber(first_par_line);
+    }
 
     edit_refresh();
 
@@ -2681,20 +2684,23 @@ void do_justify(int full_justify)
        current_y = current_y_save;
        edittop = edittop_save;
 
-       /* Splice the cutbuffer back into the file. */
-       cutbottom->next = last_par_line->next;
-       cutbottom->next->prev = cutbottom;
+       /* Splice the cutbuffer back into the file, but only if we
+        * actually justified something. */
+       if (first_par_line != NULL) {
+           cutbottom->next = last_par_line->next;
+           cutbottom->next->prev = cutbottom;
            /* The line numbers after the end of the paragraph have been
             * changed, so we change them back. */
-       renumber(cutbottom->next);
-       if (first_par_line->prev != NULL) {
-           cutbuffer->prev = first_par_line->prev;
-           cutbuffer->prev->next = cutbuffer;
-       } else
-           fileage = cutbuffer;
+           renumber(cutbottom->next);
+           if (first_par_line->prev != NULL) {
+               cutbuffer->prev = first_par_line->prev;
+               cutbuffer->prev->next = cutbuffer;
+           } else
+               fileage = cutbuffer;
 
-       last_par_line->next = NULL;
-       free_filestruct(first_par_line);
+           last_par_line->next = NULL;
+           free_filestruct(first_par_line);
+       }
 
        /* Restore global variables from before the justify. */
        totsize = totsize_save;
index 34dbc755a62c30d6822a6d5112600b2c59773dd7..98c9d0ac520f3bf96feee6babca2208ee80eafd1 100644 (file)
@@ -434,7 +434,7 @@ typedef struct historyheadtype {
 #define NANO_PREVWORD_KEY      NANO_ALT_SPACE
 #define NANO_PARABEGIN_KEY     NANO_CONTROL_W
 #define NANO_PARAEND_KEY       NANO_CONTROL_O
-#define NANO_FULLJUSTIFY_KEY   NANO_CONTROL_J
+#define NANO_FULLJUSTIFY_KEY   NANO_CONTROL_U
 #define NANO_VERBATIM_KEY      NANO_ALT_V
 
 #ifndef NANO_SMALL
index 32ac485521c6395cf75cc8d74090ed33c7b2bbfa..abe135e309550e8e4dfbd5daabd4131ecccc0cc1 100644 (file)
@@ -554,8 +554,10 @@ void total_refresh(void);
 void display_main_list(void);
 void do_cursorpos(int constant);
 void do_cursorpos_void(void);
-size_t line_len(const char *ptr);
+#ifndef DISABLE_HELP
+int help_line_len(const char *ptr);
 void do_help(void);
+#endif
 void do_replace_highlight(int highlight_flag, const char *word);
 #ifdef DEBUG
 void dump_buffer(const filestruct *inptr);
index 87e593064c3907dfa04f6fc92b2b7a3d8673eedf..70e300b5e657ba0593993ff14155e0f3496b925b 100644 (file)
@@ -1669,10 +1669,8 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
            }
            break;
        case NANO_CUT_KEY:
-       case NANO_UNCUT_KEY:
            /* If we're using restricted mode, the filename isn't blank,
-            * and we're at the "Write File" prompt, disable Cut and
-            * UnCut. */
+            * and we're at the "Write File" prompt, disable Cut. */
            if (!ISSET(RESTRICTED) || filename[0] == '\0' || s != writefile_list) {
                null_at(&answer, 0);
                xend = 0;
@@ -3000,10 +2998,11 @@ void do_cursorpos_void(void)
     do_cursorpos(FALSE);
 }
 
+#ifndef DISABLE_HELP
 /* Calculate the next line of help_text, starting at ptr. */
-size_t line_len(const char *ptr)
+int help_line_len(const char *ptr)
 {
-    size_t j = 0;
+    int j = 0;
 
     while (*ptr != '\n' && *ptr != '\0' && j < COLS - 5) {
        ptr++;
@@ -3026,7 +3025,6 @@ size_t line_len(const char *ptr)
     return j;
 }
 
-#ifndef DISABLE_HELP
 /* Our dynamic, shortcut-list-compliant help function. */
 void do_help(void)
 {
@@ -3113,13 +3111,13 @@ void do_help(void)
        /* Calculate where in the text we should be, based on the
         * page. */
        for (i = 0; i < line; i++) {
-           ptr += line_len(ptr);
+           ptr += help_line_len(ptr);
            if (*ptr == '\n')
                ptr++;
        }
 
        for (i = 0; i < editwinrows && *ptr != '\0'; i++) {
-           int j = line_len(ptr);
+           int j = help_line_len(ptr);
 
            mvwaddnstr(edit, i, 0, ptr, j);
            ptr += j;
@@ -3130,7 +3128,8 @@ void do_help(void)
 
   skip_redisplay:
        kbinput = get_kbinput(edit, &meta_key);
-    } while (kbinput != NANO_EXIT_KEY && kbinput != NANO_EXIT_FKEY);
+    } while (kbinput != NANO_CANCEL_KEY && kbinput != NANO_EXIT_KEY &&
+       kbinput != NANO_EXIT_FKEY);
 
 #ifndef DISABLE_MOUSE
     currshortcut = oldshortcut;