a few miscellaneous Pico compatibility tweaks and bugfixes (most

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
master
David Lawrence Ramsey 2004-07-23 12:30:40 +00:00
parent 94b975ce7c
commit 8037fe076b
6 changed files with 65 additions and 32 deletions

View File

@ -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:

View 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);

View 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;

View 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

View 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);

View 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;