projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for automatically tuning the SSH-2 window size for decent
[u/mdw/putty]
/
terminal.c
diff --git
a/terminal.c
b/terminal.c
index
f5603a8
..
65efb8e
100644
(file)
--- a/
terminal.c
+++ b/
terminal.c
@@
-65,6
+65,8
@@
#define has_compat(x) ( ((CL_##x)&term->compatibility_level) != 0 )
#define has_compat(x) ( ((CL_##x)&term->compatibility_level) != 0 )
+char *EMPTY_WINDOW_TITLE = "";
+
const char sco2ansicolour[] = { 0, 4, 2, 6, 1, 5, 3, 7 };
#define sel_nl_sz (sizeof(sel_nl)/sizeof(wchar_t))
const char sco2ansicolour[] = { 0, 4, 2, 6, 1, 5, 3, 7 };
#define sel_nl_sz (sizeof(sel_nl)/sizeof(wchar_t))
@@
-1720,7
+1722,7
@@
void term_provide_resize_fn(Terminal *term,
{
term->resize_fn = resize_fn;
term->resize_ctx = resize_ctx;
{
term->resize_fn = resize_fn;
term->resize_ctx = resize_ctx;
- if (term->cols > 0 && term->rows > 0)
+ if (
resize_fn &&
term->cols > 0 && term->rows > 0)
resize_fn(resize_ctx, term->cols, term->rows);
}
resize_fn(resize_ctx, term->cols, term->rows);
}
@@
-2848,6
+2850,13
@@
static void term_out(Terminal *term)
term->wrapnext = FALSE;
seen_disp_event(term);
term->paste_hold = 0;
term->wrapnext = FALSE;
seen_disp_event(term);
term->paste_hold = 0;
+
+ if (term->cfg.crhaslf) {
+ if (term->curs.y == term->marg_b)
+ scroll(term, term->marg_t, term->marg_b, 1, TRUE);
+ else if (term->curs.y < term->rows - 1)
+ term->curs.y++;
+ }
if (term->logctx)
logtraffic(term->logctx, (unsigned char) c, LGTYP_ASCII);
break;
if (term->logctx)
logtraffic(term->logctx, (unsigned char) c, LGTYP_ASCII);
break;
@@
-3791,8
+3800,11
@@
static void term_out(Terminal *term)
break;
case 20:
if (term->ldisc &&
break;
case 20:
if (term->ldisc &&
- !term->cfg.no_remote_qtitle) {
- p = get_window_title(term->frontend, TRUE);
+ term->cfg.remote_qtitle_action != TITLE_NONE) {
+ if(term->cfg.remote_qtitle_action == TITLE_REAL)
+ p = get_window_title(term->frontend, TRUE);
+ else
+ p = EMPTY_WINDOW_TITLE;
len = strlen(p);
ldisc_send(term->ldisc, "\033]L", 3, 0);
ldisc_send(term->ldisc, p, len, 0);
len = strlen(p);
ldisc_send(term->ldisc, "\033]L", 3, 0);
ldisc_send(term->ldisc, p, len, 0);
@@
-3801,8
+3813,11
@@
static void term_out(Terminal *term)
break;
case 21:
if (term->ldisc &&
break;
case 21:
if (term->ldisc &&
- !term->cfg.no_remote_qtitle) {
- p = get_window_title(term->frontend,FALSE);
+ term->cfg.remote_qtitle_action != TITLE_NONE) {
+ if(term->cfg.remote_qtitle_action == TITLE_REAL)
+ p = get_window_title(term->frontend, FALSE);
+ else
+ p = EMPTY_WINDOW_TITLE;
len = strlen(p);
ldisc_send(term->ldisc, "\033]l", 3, 0);
ldisc_send(term->ldisc, p, len, 0);
len = strlen(p);
ldisc_send(term->ldisc, "\033]l", 3, 0);
ldisc_send(term->ldisc, p, len, 0);
@@
-6390,6
+6405,7
@@
char *term_get_ttymode(Terminal *term, const char *mode)
val = term->cfg.bksp_is_delete ? "^?" : "^H";
}
/* FIXME: perhaps we should set ONLCR based on cfg.lfhascr as well? */
val = term->cfg.bksp_is_delete ? "^?" : "^H";
}
/* FIXME: perhaps we should set ONLCR based on cfg.lfhascr as well? */
+ /* FIXME: or ECHO and friends based on local echo state? */
return dupstr(val);
}
return dupstr(val);
}
@@
-6433,7
+6449,7
@@
int term_get_userpass_input(Terminal *term, prompts_t *p,
*/
{
int i;
*/
{
int i;
- for (i = 0; i < p->n_prompts; i++)
+ for (i = 0; i <
(int)
p->n_prompts; i++)
memset(p->prompts[i]->result, 0, p->prompts[i]->result_len);
}
}
memset(p->prompts[i]->result, 0, p->prompts[i]->result_len);
}
}