mirror of
git://git.sv.gnu.org/nano.git
synced 2024-11-25 22:29:42 +03:00
tweak a few functions to remove the assumption that the file always ends
in a magicline, and to rely on fileage and filebot instead of NULL for their checks to detect the top or bottom of the file git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3080 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
This commit is contained in:
parent
38ebba11b7
commit
2ffdea4fc1
@ -37,6 +37,15 @@ CVS code -
|
||||
source file, and adjust related variables accordingly. New
|
||||
file help.c; changes to help_init(), help_line_len(), and
|
||||
do_help() (all moved to help.c). (DLR)
|
||||
- Tweak a few functions to remove the assumption that the file
|
||||
always ends in a magicline. Changes to do_cut_till_end(),
|
||||
do_next_word(), and do_wordlinechar_count(). (DLR)
|
||||
- Tweak a few functions to rely on fileage and filebot instead
|
||||
of NULL for their checks to detect the top or bottom of the
|
||||
file. Changes to cut_line(), cut_to_eol(), do_page_up(),
|
||||
do_page_down(), do_para_end(), do_next_word(), do_prev_word(),
|
||||
do_up(), do_down(), do_scroll_down(), do_right(), do_mouse(),
|
||||
do_gotolinecolumn(), do_delete(), and find_paragraph(). (DLR)
|
||||
- nano.h:
|
||||
- Readd MIN_EDITOR_COLS #define. (DLR)
|
||||
- winio.c:
|
||||
|
27
src/cut.c
27
src/cut.c
@ -38,12 +38,12 @@ void cutbuffer_reset(void)
|
||||
keep_cutbuffer = FALSE;
|
||||
}
|
||||
|
||||
/* If we're not on the magicline, move all the text of the current line,
|
||||
* plus the newline at the end, to the cutbuffer, and set the current
|
||||
* place we want to where the line used to start. */
|
||||
/* If we're not on the last line of the file, move all the text of the
|
||||
* current line, plus the newline at the end, to the cutbuffer, and set
|
||||
* the current place we want to where the line used to start. */
|
||||
void cut_line(void)
|
||||
{
|
||||
if (openfile->current->next != NULL) {
|
||||
if (openfile->current != openfile->filebot) {
|
||||
move_to_filestruct(&cutbuffer, &cutbottom, openfile->current, 0,
|
||||
openfile->current->next, 0);
|
||||
openfile->placewewant = xplustabs();
|
||||
@ -68,9 +68,9 @@ void cut_marked(void)
|
||||
/* If we're not at the end of the current line, move all the text from
|
||||
* the current cursor position to the end of the current line,
|
||||
* not counting the newline at the end, to the cutbuffer. If we are,
|
||||
* and we're not on the magicline, move the newline at the end to the
|
||||
* cutbuffer, and set the current place we want to where the newline
|
||||
* used to be. */
|
||||
* and we're not on the last line of the file, move the newline at the
|
||||
* end to the cutbuffer, and set the current place we want to where the
|
||||
* newline used to be. */
|
||||
void cut_to_eol(void)
|
||||
{
|
||||
size_t data_len = strlen(openfile->current->data);
|
||||
@ -83,11 +83,11 @@ void cut_to_eol(void)
|
||||
* the end, to the cutbuffer. */
|
||||
move_to_filestruct(&cutbuffer, &cutbottom, openfile->current,
|
||||
openfile->current_x, openfile->current, data_len);
|
||||
else if (openfile->current->next != NULL) {
|
||||
/* If we're at the end of the line, and it isn't the magicline,
|
||||
* move all the text from the current position up to the
|
||||
* beginning of the next line, i.e, the newline at the end, to
|
||||
* the cutbuffer. */
|
||||
else if (openfile->current != openfile->filebot) {
|
||||
/* If we're at the end of the line, and it isn't the last line
|
||||
* of the file, move all the text from the current position up
|
||||
* to the beginning of the next line, i.e, the newline at the
|
||||
* end, to the cutbuffer. */
|
||||
move_to_filestruct(&cutbuffer, &cutbottom, openfile->current,
|
||||
openfile->current_x, openfile->current->next, 0);
|
||||
openfile->placewewant = xplustabs();
|
||||
@ -149,7 +149,8 @@ void do_cut_till_end(void)
|
||||
check_statusblank();
|
||||
|
||||
move_to_filestruct(&cutbuffer, &cutbottom, openfile->current,
|
||||
openfile->current_x, openfile->filebot, 0);
|
||||
openfile->current_x, openfile->filebot,
|
||||
strlen(openfile->filebot->data));
|
||||
|
||||
edit_refresh();
|
||||
set_modified();
|
||||
|
33
src/move.c
33
src/move.c
@ -86,8 +86,8 @@ void do_page_up(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
for (i = editwinrows - 2; i > 0 && openfile->current->prev != NULL;
|
||||
i--)
|
||||
for (i = editwinrows - 2; i > 0 && openfile->current !=
|
||||
openfile->fileage; i--)
|
||||
openfile->current = openfile->current->prev;
|
||||
|
||||
openfile->current_x = actual_x(openfile->current->data,
|
||||
@ -127,8 +127,8 @@ void do_page_down(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
for (i = editwinrows - 2; i > 0 && openfile->current->next != NULL;
|
||||
i--)
|
||||
for (i = editwinrows - 2; i > 0 && openfile->current !=
|
||||
openfile->filebot; i--)
|
||||
openfile->current = openfile->current->next;
|
||||
|
||||
openfile->current_x = actual_x(openfile->current->data,
|
||||
@ -151,7 +151,7 @@ void do_para_begin(bool allow_update)
|
||||
openfile->current_x = 0;
|
||||
openfile->placewewant = 0;
|
||||
|
||||
if (openfile->current->prev != NULL) {
|
||||
if (openfile->current != openfile->fileage) {
|
||||
do {
|
||||
openfile->current = openfile->current->prev;
|
||||
openfile->current_y--;
|
||||
@ -181,17 +181,18 @@ void do_para_end(bool allow_update)
|
||||
openfile->current_x = 0;
|
||||
openfile->placewewant = 0;
|
||||
|
||||
while (openfile->current->next != NULL && !inpar(openfile->current))
|
||||
while (openfile->current != openfile->filebot &&
|
||||
!inpar(openfile->current))
|
||||
openfile->current = openfile->current->next;
|
||||
|
||||
while (openfile->current->next != NULL &&
|
||||
while (openfile->current != openfile->filebot &&
|
||||
inpar(openfile->current->next) &&
|
||||
!begpar(openfile->current->next)) {
|
||||
openfile->current = openfile->current->next;
|
||||
openfile->current_y++;
|
||||
}
|
||||
|
||||
if (openfile->current->next != NULL)
|
||||
if (openfile->current != openfile->filebot)
|
||||
openfile->current = openfile->current->next;
|
||||
|
||||
if (allow_update)
|
||||
@ -272,7 +273,7 @@ bool do_next_word(bool allow_punct, bool allow_update)
|
||||
if (!end_line)
|
||||
break;
|
||||
|
||||
if (openfile->current->next != NULL) {
|
||||
if (openfile->current != openfile->filebot) {
|
||||
end_line = FALSE;
|
||||
openfile->current_x = 0;
|
||||
}
|
||||
@ -282,8 +283,10 @@ bool do_next_word(bool allow_punct, bool allow_update)
|
||||
|
||||
/* If we haven't found it, leave the cursor at the end of the
|
||||
* file. */
|
||||
if (openfile->current == NULL)
|
||||
if (openfile->current == NULL) {
|
||||
openfile->current = openfile->filebot;
|
||||
openfile->current_x = strlen(openfile->filebot->data);
|
||||
}
|
||||
|
||||
openfile->placewewant = xplustabs();
|
||||
|
||||
@ -372,7 +375,7 @@ bool do_prev_word(bool allow_punct, bool allow_update)
|
||||
if (!begin_line)
|
||||
break;
|
||||
|
||||
if (openfile->current->prev != NULL) {
|
||||
if (openfile->current != openfile->fileage) {
|
||||
begin_line = FALSE;
|
||||
openfile->current_x = strlen(openfile->current->prev->data);
|
||||
}
|
||||
@ -483,7 +486,7 @@ void do_up(void)
|
||||
#endif
|
||||
|
||||
/* If we're at the top of the file, get out. */
|
||||
if (openfile->current->prev == NULL)
|
||||
if (openfile->current == openfile->fileage)
|
||||
return;
|
||||
|
||||
assert(openfile->current_y == openfile->current->lineno - openfile->edittop->lineno);
|
||||
@ -546,7 +549,7 @@ void do_down(void)
|
||||
#endif
|
||||
|
||||
/* If we're at the bottom of the file, get out. */
|
||||
if (openfile->current->next == NULL)
|
||||
if (openfile->current == openfile->filebot)
|
||||
return;
|
||||
|
||||
assert(openfile->current_y == openfile->current->lineno - openfile->edittop->lineno);
|
||||
@ -585,7 +588,7 @@ void do_scroll_down(void)
|
||||
#endif
|
||||
|
||||
/* If we're at the bottom of the file, get out. */
|
||||
if (openfile->current->next == NULL)
|
||||
if (openfile->current == openfile->filebot)
|
||||
return;
|
||||
|
||||
assert(openfile->current_y == openfile->current->lineno - openfile->edittop->lineno);
|
||||
@ -631,7 +634,7 @@ void do_right(void)
|
||||
if (openfile->current->data[openfile->current_x] != '\0')
|
||||
openfile->current_x = move_mbright(openfile->current->data,
|
||||
openfile->current_x);
|
||||
else if (openfile->current->next != NULL) {
|
||||
else if (openfile->current != openfile->filebot) {
|
||||
do_down();
|
||||
openfile->current_x = 0;
|
||||
}
|
||||
|
@ -230,7 +230,7 @@ partition *partition_filestruct(filestruct *top, size_t top_x,
|
||||
}
|
||||
|
||||
/* Unpartition a filestruct so it begins at (fileage, 0) and ends at
|
||||
* (filebot, strlen(filebot)) again. */
|
||||
* (filebot, strlen(filebot->data)) again. */
|
||||
void unpartition_filestruct(partition **p)
|
||||
{
|
||||
char *tmp;
|
||||
@ -1412,10 +1412,12 @@ bool do_mouse(void)
|
||||
|
||||
/* Move to where the click occurred. */
|
||||
for (; openfile->current_y < mouse_y &&
|
||||
openfile->current->next != NULL; openfile->current_y++)
|
||||
openfile->current != openfile->filebot;
|
||||
openfile->current_y++)
|
||||
openfile->current = openfile->current->next;
|
||||
for (; openfile->current_y > mouse_y &&
|
||||
openfile->current->prev != NULL; openfile->current_y--)
|
||||
openfile->current != openfile->fileage;
|
||||
openfile->current_y--)
|
||||
openfile->current = openfile->current->prev;
|
||||
|
||||
openfile->current_x = actual_x(openfile->current->data,
|
||||
|
@ -994,7 +994,7 @@ void do_gotolinecolumn(ssize_t line, ssize_t column, bool use_answer,
|
||||
}
|
||||
|
||||
for (openfile->current = openfile->fileage;
|
||||
openfile->current->next != NULL && line > 1; line--)
|
||||
openfile->current != openfile->filebot && line > 1; line--)
|
||||
openfile->current = openfile->current->next;
|
||||
|
||||
openfile->current_x = actual_x(openfile->current->data, column - 1);
|
||||
|
29
src/text.c
29
src/text.c
@ -97,11 +97,7 @@ void do_delete(void)
|
||||
openfile->mark_begin_x -= char_buf_len;
|
||||
#endif
|
||||
openfile->totsize--;
|
||||
} else if (openfile->current != openfile->filebot &&
|
||||
(openfile->current->next != openfile->filebot ||
|
||||
openfile->current->data[0] == '\0')) {
|
||||
/* We can delete the line before filebot only if it is blank: it
|
||||
* becomes the new magicline then. */
|
||||
} else if (openfile->current != openfile->filebot) {
|
||||
filestruct *foo = openfile->current->next;
|
||||
|
||||
assert(openfile->current_x == strlen(openfile->current->data));
|
||||
@ -132,6 +128,12 @@ void do_delete(void)
|
||||
#ifndef DISABLE_WRAPPING
|
||||
wrap_reset();
|
||||
#endif
|
||||
|
||||
/* If we deleted the line before filebot, and the resulting
|
||||
* line at filebot isn't blank, add a new magicline. */
|
||||
if (openfile->current == openfile->filebot &&
|
||||
openfile->current->data[0] != '\0')
|
||||
new_magicline();
|
||||
} else
|
||||
return;
|
||||
|
||||
@ -1065,7 +1067,7 @@ bool find_paragraph(size_t *const quote, size_t *const par)
|
||||
if (openfile->current == current_save ||
|
||||
!inpar(openfile->current->prev))
|
||||
return FALSE;
|
||||
if (openfile->current->prev != NULL)
|
||||
if (openfile->current != openfile->fileage)
|
||||
openfile->current = openfile->current->prev;
|
||||
}
|
||||
if (!begpar(openfile->current))
|
||||
@ -2074,21 +2076,15 @@ void do_wordlinechar_count(void)
|
||||
size_t pww_save = openfile->placewewant;
|
||||
filestruct *current_save = openfile->current;
|
||||
bool old_mark_set = openfile->mark_set;
|
||||
bool added_magicline = FALSE;
|
||||
/* Whether we added a magicline after filebot. */
|
||||
filestruct *top, *bot;
|
||||
size_t top_x, bot_x;
|
||||
|
||||
if (old_mark_set) {
|
||||
/* If the mark is on, partition the filestruct so that it
|
||||
* contains only the marked text, keep track of whether the text
|
||||
* will need a magicline added while we're counting words, add
|
||||
* the magicline if necessary, and turn the mark off. */
|
||||
* contains only the marked text, and turn the mark off. */
|
||||
mark_order((const filestruct **)&top, &top_x,
|
||||
(const filestruct **)&bot, &bot_x, NULL);
|
||||
filepart = partition_filestruct(top, top_x, bot, bot_x);
|
||||
if ((added_magicline = (openfile->filebot->data[0] != '\0')))
|
||||
new_magicline();
|
||||
openfile->mark_set = FALSE;
|
||||
}
|
||||
|
||||
@ -2102,7 +2098,7 @@ void do_wordlinechar_count(void)
|
||||
* until we reach the end of the file, incrementing the total word
|
||||
* count whenever we're on a word just before moving. */
|
||||
while (openfile->current != openfile->filebot ||
|
||||
openfile->current_x != 0) {
|
||||
openfile->current->data[openfile->current_x] != '\0') {
|
||||
if (do_next_word(TRUE, FALSE))
|
||||
words++;
|
||||
}
|
||||
@ -2110,11 +2106,6 @@ void do_wordlinechar_count(void)
|
||||
/* Get the total line and character counts, as "wc -l" and "wc -c"
|
||||
* do, but get the latter in multibyte characters. */
|
||||
if (old_mark_set) {
|
||||
/* If the mark was on and we added a magicline, remove it
|
||||
* now. */
|
||||
if (added_magicline)
|
||||
remove_magicline();
|
||||
|
||||
lines = openfile->filebot->lineno -
|
||||
openfile->fileage->lineno + 1;
|
||||
chars = get_totsize(openfile->fileage, openfile->filebot);
|
||||
|
Loading…
Reference in New Issue
Block a user