moving: redraw not just the new current line but also the prior one
This fixes http://savannah.gnu.org/bugs/?51821.master
parent
047cf9be9c
commit
a850bb2513
20
src/move.c
20
src/move.c
|
@ -463,6 +463,7 @@ void do_end(void)
|
||||||
* also scroll the screen one row, so the cursor stays in the same spot. */
|
* also scroll the screen one row, so the cursor stays in the same spot. */
|
||||||
void do_up(bool scroll_only)
|
void do_up(bool scroll_only)
|
||||||
{
|
{
|
||||||
|
filestruct *was_current = openfile->current;
|
||||||
size_t leftedge, target_column;
|
size_t leftedge, target_column;
|
||||||
|
|
||||||
/* When just scrolling and the top of the file is onscreen, get out. */
|
/* When just scrolling and the top of the file is onscreen, get out. */
|
||||||
|
@ -482,7 +483,7 @@ void do_up(bool scroll_only)
|
||||||
if (scroll_only)
|
if (scroll_only)
|
||||||
edit_scroll(UPWARD, 1);
|
edit_scroll(UPWARD, 1);
|
||||||
|
|
||||||
edit_redraw(openfile->current, FLOWING);
|
edit_redraw(was_current, FLOWING);
|
||||||
|
|
||||||
/* <Up> should not change placewewant, so restore it. */
|
/* <Up> should not change placewewant, so restore it. */
|
||||||
openfile->placewewant = leftedge + target_column;
|
openfile->placewewant = leftedge + target_column;
|
||||||
|
@ -492,6 +493,7 @@ void do_up(bool scroll_only)
|
||||||
* scroll the screen one row, so the cursor stays in the same spot. */
|
* scroll the screen one row, so the cursor stays in the same spot. */
|
||||||
void do_down(bool scroll_only)
|
void do_down(bool scroll_only)
|
||||||
{
|
{
|
||||||
|
filestruct *was_current = openfile->current;
|
||||||
size_t leftedge, target_column;
|
size_t leftedge, target_column;
|
||||||
|
|
||||||
get_edge_and_target(&leftedge, &target_column);
|
get_edge_and_target(&leftedge, &target_column);
|
||||||
|
@ -506,7 +508,7 @@ void do_down(bool scroll_only)
|
||||||
if (scroll_only)
|
if (scroll_only)
|
||||||
edit_scroll(DOWNWARD, 1);
|
edit_scroll(DOWNWARD, 1);
|
||||||
|
|
||||||
edit_redraw(openfile->current, FLOWING);
|
edit_redraw(was_current, FLOWING);
|
||||||
|
|
||||||
/* <Down> should not change placewewant, so restore it. */
|
/* <Down> should not change placewewant, so restore it. */
|
||||||
openfile->placewewant = leftedge + target_column;
|
openfile->placewewant = leftedge + target_column;
|
||||||
|
@ -541,33 +543,31 @@ void do_scroll_down(void)
|
||||||
/* Move left one character. */
|
/* Move left one character. */
|
||||||
void do_left(void)
|
void do_left(void)
|
||||||
{
|
{
|
||||||
|
filestruct *was_current = openfile->current;
|
||||||
|
|
||||||
if (openfile->current_x > 0)
|
if (openfile->current_x > 0)
|
||||||
openfile->current_x = move_mbleft(openfile->current->data,
|
openfile->current_x = move_mbleft(openfile->current->data,
|
||||||
openfile->current_x);
|
openfile->current_x);
|
||||||
else if (openfile->current != openfile->fileage) {
|
else if (openfile->current != openfile->fileage) {
|
||||||
openfile->current = openfile->current->prev;
|
openfile->current = openfile->current->prev;
|
||||||
openfile->current_x = strlen(openfile->current->data);
|
openfile->current_x = strlen(openfile->current->data);
|
||||||
|
|
||||||
edit_redraw(openfile->current->next, FLOWING);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
edit_redraw(openfile->current, FLOWING);
|
edit_redraw(was_current, FLOWING);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Move right one character. */
|
/* Move right one character. */
|
||||||
void do_right(void)
|
void do_right(void)
|
||||||
{
|
{
|
||||||
|
filestruct *was_current = openfile->current;
|
||||||
|
|
||||||
if (openfile->current->data[openfile->current_x] != '\0')
|
if (openfile->current->data[openfile->current_x] != '\0')
|
||||||
openfile->current_x = move_mbright(openfile->current->data,
|
openfile->current_x = move_mbright(openfile->current->data,
|
||||||
openfile->current_x);
|
openfile->current_x);
|
||||||
else if (openfile->current != openfile->filebot) {
|
else if (openfile->current != openfile->filebot) {
|
||||||
openfile->current = openfile->current->next;
|
openfile->current = openfile->current->next;
|
||||||
openfile->current_x = 0;
|
openfile->current_x = 0;
|
||||||
|
|
||||||
edit_redraw(openfile->current->prev, FLOWING);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
edit_redraw(openfile->current, FLOWING);
|
edit_redraw(was_current, FLOWING);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue