git: f6a7ce86fc2d - stable/13 - vt: fix double-click word selection for first/last word on line

From: Ed Maste <emaste_at_FreeBSD.org>
Date: Fri, 25 Feb 2022 16:22:53 UTC
The branch stable/13 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=f6a7ce86fc2d2d13f169ff7b5f147858c445ec67

commit f6a7ce86fc2d2d13f169ff7b5f147858c445ec67
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2022-02-21 04:09:36 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2022-02-25 16:22:27 +0000

    vt: fix double-click word selection for first/last word on line
    
    Previously when double-clicking on the first word on a line we would
    select from the cursor position to the end of the word, not from the
    beginning of the line.  Similarly, when double-clicking on the last word
    on a line we would select from the beginning of the word to the cursor
    position rather than the end of the line.
    
    This is because we searched backward or forward for a space character to
    mark the beginning or end of a word.  Now, use the beginning or end of
    the line if we do not find a space.
    
    PR:             261553
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit 692bb3f0291b21337eb9a778f71a5b97a47e4c11)
    (cherry picked from commit 521dbfd6b1085511769c419d44f11842e92067f5)
---
 sys/dev/vt/vt_buf.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/sys/dev/vt/vt_buf.c b/sys/dev/vt/vt_buf.c
index 9c9417d6eca4..996dbe95902f 100644
--- a/sys/dev/vt/vt_buf.c
+++ b/sys/dev/vt/vt_buf.c
@@ -816,12 +816,19 @@ vtbuf_set_mark(struct vt_buf *vb, int type, int col, int row)
 				break;
 			}
 		}
+		/* No space - word extends to beginning of line. */
+		if (i == -1)
+			vb->vb_mark_start.tp_col = 0;
 		for (i = col; i < vb->vb_scr_size.tp_col; i ++) {
 			if (TCHAR_CHARACTER(r[i]) == ' ') {
 				vb->vb_mark_end.tp_col = i;
 				break;
 			}
 		}
+		/* No space - word extends to end of line. */
+		if (i == vb->vb_scr_size.tp_col)
+			vb->vb_mark_end.tp_col = i;
+
 		if (vb->vb_mark_start.tp_col > vb->vb_mark_end.tp_col)
 			vb->vb_mark_start.tp_col = vb->vb_mark_end.tp_col;
 		break;