text: retain a bookmark when two lines are joined or something is cut
Also, do not copy the bookmark into the cutbuffer, so it will not get pasted elsewhere.
This commit is contained in:
@@ -87,6 +87,8 @@ void do_deletion(undo_type action)
|
||||
openfile->mark = openfile->current;
|
||||
openfile->mark_x += openfile->current_x;
|
||||
}
|
||||
|
||||
openfile->current->bookmarked |= joining->bookmarked;
|
||||
#endif
|
||||
unlink_node(joining);
|
||||
renumber_from(openfile->current);
|
||||
@@ -246,9 +248,14 @@ void extract_segment(linestruct *top, size_t top_x, linestruct *bot, size_t bot_
|
||||
bool same_line = (openfile->mark == top);
|
||||
bool post_marked = (openfile->mark && (openfile->mark->lineno > top->lineno ||
|
||||
(same_line && openfile->mark_x > top_x)));
|
||||
bool was_bookmarked = top->bookmarked;
|
||||
|
||||
if (top == bot && top_x == bot_x)
|
||||
return;
|
||||
|
||||
if (top != bot)
|
||||
for (linestruct *line = top->next; line != bot->next; line = line->next)
|
||||
was_bookmarked |= line->bookmarked;
|
||||
#endif
|
||||
|
||||
if (top == bot) {
|
||||
@@ -318,6 +325,8 @@ void extract_segment(linestruct *top, size_t top_x, linestruct *bot, size_t bot_
|
||||
openfile->current_x = top_x;
|
||||
|
||||
#ifndef NANO_TINY
|
||||
openfile->current->bookmarked = was_bookmarked;
|
||||
|
||||
if (post_marked || same_line)
|
||||
openfile->mark = openfile->current;
|
||||
if (post_marked)
|
||||
|
||||
@@ -151,7 +151,7 @@ linestruct *copy_node(const linestruct *src)
|
||||
#endif
|
||||
dst->lineno = src->lineno;
|
||||
#ifndef NANO_TINY
|
||||
dst->bookmarked = src->bookmarked;
|
||||
dst->bookmarked = FALSE;
|
||||
#endif
|
||||
|
||||
return dst;
|
||||
|
||||
@@ -535,6 +535,7 @@ void do_undo(void)
|
||||
line->data = charealloc(line->data, strlen(line->data) +
|
||||
strlen(&u->strdata[regain_from_x]) + 1);
|
||||
strcat(line->data, &u->strdata[regain_from_x]);
|
||||
line->bookmarked |= line->next->bookmarked;
|
||||
unlink_node(line->next);
|
||||
renumber_from(line);
|
||||
goto_line_posx(u->head_lineno, original_x);
|
||||
|
||||
Reference in New Issue
Block a user