From: Simon Tatham Date: Tue, 30 Oct 2001 22:02:15 +0000 (+0000) Subject: Word-by-word (double-click) selection now spans line breaks if the X-Git-Tag: r8855-g4f798d~2442 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=4c886282d6b8ffa291d9bd6112d4455444fb1de6;p=PuTTY_svn.git Word-by-word (double-click) selection now spans line breaks if the line break was created by wrapping. (Equivalently, if the selection would _paste_ as a single word without a newline in the middle, then it will _select_ in the same way.) git-svn-id: http://svn.tartarus.org/sgt/putty@1347 cda61777-01e9-0310-a592-d414129be87e --- diff --git a/terminal.c b/terminal.c index 412f6b4e..1e2d50c6 100644 --- a/terminal.c +++ b/terminal.c @@ -3067,6 +3067,7 @@ static pos sel_spread_half(pos p, int dir) { unsigned long *ldata; short wvalue; + int topy = -count234(scrollback); ldata = lineptr(p.y); @@ -3093,11 +3094,47 @@ static pos sel_spread_half(pos p, int dir) */ wvalue = wordtype(ldata[p.x]); if (dir == +1) { - while (p.x < cols && wordtype(ldata[p.x + 1]) == wvalue) - p.x++; + while (1) { + if (p.x < cols-1) { + if (wordtype(ldata[p.x + 1]) == wvalue) + p.x++; + else + break; + } else { + if (ldata[cols] & LATTR_WRAPPED) { + unsigned long *ldata2; + ldata2 = lineptr(p.y+1); + if (wordtype(ldata2[0]) == wvalue) { + p.x = 0; + p.y++; + ldata = ldata2; + } else + break; + } else + break; + } + } } else { - while (p.x > 0 && wordtype(ldata[p.x - 1]) == wvalue) - p.x--; + while (1) { + if (p.x > 0) { + if (wordtype(ldata[p.x - 1]) == wvalue) + p.x--; + else + break; + } else { + unsigned long *ldata2; + if (p.y <= topy) + break; + ldata2 = lineptr(p.y-1); + if ((ldata2[cols] & LATTR_WRAPPED) && + wordtype(ldata2[cols-1]) == wvalue) { + p.x = cols-1; + p.y--; + ldata = ldata2; + } else + break; + } + } } break; case SM_LINE: