Moved the environment variables config block out of the Telnet panel
[sgt/putty] / terminal.c
index 54a17df..40ad482 100644 (file)
@@ -177,6 +177,8 @@ static void cc_check(termline *line)
        j += (flags[i] != 0);
 
     assert(j == line->size);
+
+    sfree(flags);
 }
 
 /*
@@ -1667,7 +1669,7 @@ static void scroll(Terminal *term, int topline, int botline, int lines, int sb)
 
                addpos234(term->scrollback, compressline(line), sblen);
 
-               line = newline(term, term->cols, TRUE);
+               /* now `line' itself can be reused as the bottom line */
 
                /*
                 * If the user is currently looking at part of the
@@ -2464,6 +2466,8 @@ void term_out(Terminal *term)
            term->wrapnext = FALSE;
            /* destructive backspace might be disabled */
            if (!term->cfg.no_dbackspace) {
+               check_boundary(term, term->curs.x, term->curs.y);
+               check_boundary(term, term->curs.x+1, term->curs.y);
                copy_termchar(scrlineptr(term->curs.y),
                              term->curs.x, &term->erase_char);
            }
@@ -4804,6 +4808,7 @@ static void clipme(Terminal *term, pos top, pos bottom, int rect, int desel)
         */
        if (!(ldata->lattr & LATTR_WRAPPED)) {
            while (IS_SPACE_CHR(ldata->chars[nlpos.x - 1].chr) &&
+                  !ldata->chars[nlpos.x - 1].cc_next &&
                   poslt(top, nlpos))
                decpos(nlpos);
            if (poslt(nlpos, bottom))
@@ -5076,7 +5081,8 @@ static pos sel_spread_half(Terminal *term, pos p, int dir)
         */
        if (!(ldata->lattr & LATTR_WRAPPED)) {
            termchar *q = ldata->chars + term->cols;
-           while (q > ldata->chars && IS_SPACE_CHR(q[-1].chr))
+           while (q > ldata->chars &&
+                  IS_SPACE_CHR(q[-1].chr) && !q[-1].cc_next)
                q--;
            if (q == ldata->chars + term->cols)
                q--;