DLR's fixes: arg for operatingdir's getopt_long text, changes to cases 2b and 2c in do_wrap for Pico compatibility, and new arg save_cutbuffer to global_init() to stop the cutbuffer from being lost with multiple buffers

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@789 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
This commit is contained in:
Chris Allegretta 2001-09-27 02:46:53 +00:00
parent 5050d35e87
commit 56214c6aef
2 changed files with 43 additions and 23 deletions

View File

@ -34,6 +34,12 @@ CVS code -
lines aren't lined up since the menu width changed though,
this breakage depends on whether the new widths will be kept
or not (FEEDBACK!!)
do_wrap()
- Fixes for Pico incompatibility in cases 2b and 2c.
(David Lawrence Ramsey).
global_init()
- New arg save_cutbuffer, allows cutbuffer to not be lost when
using multibuffer.
- nano.texi:
- corrected the Mouse Toggle section, noticed by Daniel Bonniot.
- rcfile.c:

60
nano.c
View File

@ -202,8 +202,9 @@ void clear_filename(void)
filename[0] = 0;
}
/* Initialize global variables - no better way for now */
void global_init(void)
/* Initialize global variables - no better way for now. If
save_cutbuffer is nonzero, don't set cutbuffer to NULL. */
void global_init(int save_cutbuffer)
{
current_x = 0;
current_y = 0;
@ -212,11 +213,13 @@ void global_init(void)
die_too_small();
fileage = NULL;
cutbuffer = NULL;
if (!save_cutbuffer)
cutbuffer = NULL;
current = NULL;
edittop = NULL;
editbot = NULL;
totlines = 0;
totsize = 0;
placewewant = 0;
#ifndef DISABLE_WRAPJUSTIFY
@ -449,7 +452,7 @@ void usage(void)
#endif
#ifndef DISABLE_OPERATINGDIR
printf(_
(" -o [dir] --operatingdir Set operating directory\n"));
(" -o [dir] --operatingdir=[dir] Set operating directory\n"));
#endif
printf(_
(" -p --pico Emulate Pico as closely as possible\n"));
@ -884,13 +887,10 @@ void do_wrap(filestruct * inptr, char input_char)
* it is all spaces between previous word and next word which appears after fill.
* b) cursor is at the word at the wrap point.
* - word at wrap point starts a new line.
* 1. pressed a space and at first character of wrap point word.
* - white space on original line is kept to where cursor was.
* 2. pressed non space (or space elsewhere).
* - white space at end of original line is cleared.
* - white space on original line is kept to where cursor was.
* c) cursor is past the word at the wrap point.
* - word at wrap point starts a new line.
* - white space at end of original line is cleared
* - white space at end of original line is cleared
*/
temp = nmalloc(sizeof(filestruct));
@ -933,6 +933,10 @@ void do_wrap(filestruct * inptr, char input_char)
/* Inside word, remove it from original, and move cursor to right spot. */
if (current_x >= current_word_start) {
right = current_x - current_word_start;
/* Decrease totsize by the number of spaces we removed, less
one for the new line we're replacing the spaces with. */
totsize -= (current_word_start - 1);
current_x = 0;
#ifndef NANO_SMALL
if (ISSET(AUTOINDENT)) {
@ -965,10 +969,16 @@ void do_wrap(filestruct * inptr, char input_char)
if (!isspace((int) input_char)) {
i = current_word_start - 1;
/* Decrement totsize each time we remove a space. */
while (isspace((int) inptr->data[i])) {
i--;
totsize--;
assert(i >= 0);
}
/* And increment it to account for the blank line we're
replacing the spaces with. */
totsize++;
} else if (current_x <= last_word_end)
i = last_word_end - 1;
else
@ -1000,20 +1010,14 @@ void do_wrap(filestruct * inptr, char input_char)
}
#endif
i = current_word_start - 1;
if (isspace((int) input_char)
&& (current_x == current_word_start)) {
current_x = current_word_start;
current_x = current_word_start;
null_at(inptr->data, current_word_start);
} else {
null_at(inptr->data, current_word_start);
while (isspace((int) inptr->data[i])) {
i--;
assert(i >= 0);
}
inptr->data = nrealloc(inptr->data, i + 2);
inptr->data[i + 1] = 0;
}
/* Increment totsize to account for the new line that
will be added below, so that it won't end up being
short by one. */
totsize++;
}
@ -1029,12 +1033,17 @@ void do_wrap(filestruct * inptr, char input_char)
current_x = current_word_start;
i = current_word_start - 1;
/* Decrement totsize each time we remove a space. */
while (isspace((int) inptr->data[i])) {
i--;
totsize--;
assert(i >= 0);
inptr->data = nrealloc(inptr->data, i + 2);
inptr->data[i + 1] = 0;
}
/* And increment it to account for the blank line we're
replacing the spaces with. */
totsize++;
}
}
@ -1046,6 +1055,11 @@ void do_wrap(filestruct * inptr, char input_char)
char *p =
charalloc((strlen(temp->data) + strlen(inptr->next->data) + 2));
/* We're adding to an existing line instead of creating a new
one; decrement totlines here so that when it gets incremented
below, it won't end up being high by one. */
totlines--;
#ifndef NANO_SMALL
if (ISSET(AUTOINDENT)) {
int non = 0;
@ -1562,7 +1576,7 @@ int do_alt_speller(char *file_name)
refresh();
free_filestruct(fileage);
global_init();
global_init(1);
open_file(file_name, 0, 1);
/* go back to the old line while keeping the same position, mark the
@ -2676,7 +2690,7 @@ int main(int argc, char *argv[])
noecho();
/* Set up some global variables */
global_init();
global_init(0);
shortcut_init(0);
#ifndef DISABLE_HELP
init_help_msg();