on, the mark's pointer needs to be refreshed only when it is on the
same line as the cursor, and the mark's x coordinate only when the
mark is located after the cursor. This fixes Savannah bug #46347.
+ * src/nano.c (copy_from_filestruct): Improve comments and combine
+ two conditions.
2015-10-29 Benno Schulenberg <bensberg@justemail.net>
* src/text.c (add_undo): Only skip adding an undo when the current
while (openfile->filebot->next != NULL)
openfile->filebot = openfile->filebot->next;
- /* Restore the current line and cursor position. If the mark begins
- * inside the partition, adjust the mark coordinates to compensate
- * for the change in the current line. */
+ /* Put the cursor at the end of the pasted text. */
openfile->current = openfile->filebot;
openfile->current_x = strlen(openfile->filebot->data);
+
+ /* Refresh the mark's pointer, and compensate the mark's
+ * x coordinate for the change in the current line. */
if (openfile->fileage == openfile->filebot) {
#ifndef NANO_TINY
if (openfile->mark_set && single_line) {
openfile->mark_begin_x += openfile->current_x;
}
#endif
+ /* When the pasted stuff contains no newline, adjust the cursor's
+ * x coordinate for the text that is before the pasted stuff. */
openfile->current_x += current_x_save;
}
#ifndef NANO_TINY
- else if (openfile->mark_set) {
- if (right_side_up) {
- if (single_line)
- /* Get the new data, stuff was inserted on the mark line. */
- openfile->mark_begin = openfile->fileage;
- /* The x is okay, it did not move. */
- } else {
- if (single_line) {
- openfile->mark_begin = openfile->current;
- openfile->mark_begin_x += openfile->current_x - current_x_save;
- }
+ else if (openfile->mark_set && single_line) {
+ if (right_side_up)
+ openfile->mark_begin = openfile->fileage;
+ else {
+ openfile->mark_begin = openfile->current;
+ openfile->mark_begin_x += openfile->current_x - current_x_save;
}
}
#endif