tweaks: don't turn the mark off before it's needed
The mark only needs to be off when calling replace_marked_buffer(), because this indirectly calls ingraft_buffer(), which fiddles with the end points if the mark is on.master
parent
adf69a05f1
commit
d5b950cc29
28
src/text.c
28
src/text.c
|
@ -2873,8 +2873,6 @@ const char *do_alt_speller(char *tempfile_name)
|
||||||
filestruct *top, *bot;
|
filestruct *top, *bot;
|
||||||
size_t top_x, bot_x;
|
size_t top_x, bot_x;
|
||||||
bool right_side_up = FALSE;
|
bool right_side_up = FALSE;
|
||||||
bool old_mark_set = openfile->mark_set;
|
|
||||||
ssize_t mb_lineno_save = 0;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Get the timestamp and the size of the temporary file. */
|
/* Get the timestamp and the size of the temporary file. */
|
||||||
|
@ -2885,14 +2883,7 @@ const char *do_alt_speller(char *tempfile_name)
|
||||||
if (spellfileinfo.st_size == 0)
|
if (spellfileinfo.st_size == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
#ifndef NANO_TINY
|
/* Exit from curses mode. */
|
||||||
/* Save the mark's position and turn it off. */
|
|
||||||
if (old_mark_set) {
|
|
||||||
mb_lineno_save = openfile->mark_begin->lineno;
|
|
||||||
openfile->mark_set = FALSE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
endwin();
|
endwin();
|
||||||
|
|
||||||
/* Set up an argument list to pass to execvp(). */
|
/* Set up an argument list to pass to execvp(). */
|
||||||
|
@ -2937,18 +2928,17 @@ const char *do_alt_speller(char *tempfile_name)
|
||||||
/* Restore the terminal to its previous state. */
|
/* Restore the terminal to its previous state. */
|
||||||
terminal_init();
|
terminal_init();
|
||||||
|
|
||||||
if (!WIFEXITED(alt_spell_status) || WEXITSTATUS(alt_spell_status) != 0) {
|
if (!WIFEXITED(alt_spell_status) || WEXITSTATUS(alt_spell_status) != 0)
|
||||||
#ifndef NANO_TINY
|
|
||||||
/* Turn the mark back on if it was on before. */
|
|
||||||
openfile->mark_set = old_mark_set;
|
|
||||||
#endif
|
|
||||||
return invocation_error(alt_speller);
|
return invocation_error(alt_speller);
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef NANO_TINY
|
#ifndef NANO_TINY
|
||||||
/* Replace the text (or just the marked text) of the current buffer
|
/* Replace the marked text (or the entire text) of the current buffer
|
||||||
* with the spell-checked text. */
|
* with the spell-checked text. */
|
||||||
if (old_mark_set) {
|
if (openfile->mark_set) {
|
||||||
|
ssize_t was_mark_lineno = openfile->mark_begin->lineno;
|
||||||
|
|
||||||
|
openfile->mark_set = FALSE;
|
||||||
|
|
||||||
mark_order((const filestruct **)&top, &top_x,
|
mark_order((const filestruct **)&top, &top_x,
|
||||||
(const filestruct **)&bot, &bot_x, &right_side_up);
|
(const filestruct **)&bot, &bot_x, &right_side_up);
|
||||||
|
|
||||||
|
@ -2962,7 +2952,7 @@ const char *do_alt_speller(char *tempfile_name)
|
||||||
openfile->mark_begin_x = openfile->current_x;
|
openfile->mark_begin_x = openfile->current_x;
|
||||||
|
|
||||||
/* Restore the mark's position and turn it on. */
|
/* Restore the mark's position and turn it on. */
|
||||||
openfile->mark_begin = fsfromline(mb_lineno_save);
|
openfile->mark_begin = fsfromline(was_mark_lineno);
|
||||||
openfile->mark_set = TRUE;
|
openfile->mark_set = TRUE;
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue