~petersanchez/st

52d6fb1ab1f7d41839edebb63c3408578cd44e3c — Devin J. Pohly 6 years ago cfc7acd
Move terminal echo logic into st.c

The only thing differentiating ttywrite and ttysend was the potential
for echo; make this a parameter and remove ttysend.

Signed-off-by: Devin J. Pohly <djpohly@gmail.com>
3 files changed, 19 insertions(+), 25 deletions(-)

M st.c
M st.h
M x.c
M st.c => st.c +9 -14
@@ 784,12 784,15 @@ ttyread(void)
}

void
ttywrite(const char *s, size_t n)
ttywrite(const char *s, size_t n, int may_echo)
{
	fd_set wfd, rfd;
	ssize_t r;
	size_t lim = 256;

	if (may_echo && IS_SET(MODE_ECHO))
		twrite(s, n, 1);

	/*
	 * Remember that we are using a pty, which might be a modem line.
	 * Writing too much will clog the line. That's why we are doing this


@@ 841,14 844,6 @@ write_error:
}

void
ttysend(char *s, size_t n)
{
	ttywrite(s, n);
	if (IS_SET(MODE_ECHO))
		twrite(s, n, 1);
}

void
ttyresize(int tw, int th)
{
	struct winsize w;


@@ 1570,7 1565,7 @@ csihandle(void)
		break;
	case 'c': /* DA -- Device Attributes */
		if (csiescseq.arg[0] == 0)
			ttywrite(vtiden, strlen(vtiden));
			ttywrite(vtiden, strlen(vtiden), 0);
		break;
	case 'C': /* CUF -- Cursor <n> Forward */
	case 'a': /* HPR -- Cursor <n> Forward */


@@ 1698,7 1693,7 @@ csihandle(void)
		if (csiescseq.arg[0] == 6) {
			len = snprintf(buf, sizeof(buf),"\033[%i;%iR",
					term.c.y+1, term.c.x+1);
			ttywrite(buf, len);
			ttywrite(buf, len, 0);
		}
		break;
	case 'r': /* DECSTBM -- Set Scrolling Region */


@@ 1916,7 1911,7 @@ iso14755(const Arg *arg)
	    (*e != '\n' && *e != '\0'))
		return;

	ttysend(uc, utf8encode(utf32, uc));
	ttywrite(uc, utf8encode(utf32, uc), 1);
}

void


@@ 2129,7 2124,7 @@ tcontrolcode(uchar ascii)
	case 0x99:   /* TODO: SGCI */
		break;
	case 0x9a:   /* DECID -- Identify Terminal */
		ttywrite(vtiden, strlen(vtiden));
		ttywrite(vtiden, strlen(vtiden), 0);
		break;
	case 0x9b:   /* TODO: CSI */
	case 0x9c:   /* TODO: ST */


@@ 2201,7 2196,7 @@ eschandle(uchar ascii)
		}
		break;
	case 'Z': /* DECID -- Identify Terminal */
		ttywrite(vtiden, strlen(vtiden));
		ttywrite(vtiden, strlen(vtiden), 0);
		break;
	case 'c': /* RIS -- Reset to inital state */
		treset();

M st.h => st.h +1 -2
@@ 176,8 176,7 @@ void tsetdirtattr(int);
void ttynew(char *, char *, char **);
size_t ttyread(void);
void ttyresize(int, int);
void ttysend(char *, size_t);
void ttywrite(const char *, size_t);
void ttywrite(const char *, size_t, int);

void resettitle(void);


M x.c => x.c +9 -9
@@ 390,7 390,7 @@ mousereport(XEvent *e)
		return;
	}

	ttywrite(buf, len);
	ttywrite(buf, len, 0);
}

void


@@ 408,7 408,7 @@ bpress(XEvent *e)
	for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) {
		if (e->xbutton.button == ms->b
				&& match(ms->mask, e->xbutton.state)) {
			ttysend(ms->s, strlen(ms->s));
			ttywrite(ms->s, strlen(ms->s), 1);
			return;
		}
	}


@@ 520,10 520,10 @@ selnotify(XEvent *e)
		}

		if (IS_SET(MODE_BRCKTPASTE) && ofs == 0)
			ttywrite("\033[200~", 6);
		ttysend((char *)data, nitems * format / 8);
			ttywrite("\033[200~", 6, 0);
		ttywrite((char *)data, nitems * format / 8, 1);
		if (IS_SET(MODE_BRCKTPASTE) && rem == 0)
			ttywrite("\033[201~", 6);
			ttywrite("\033[201~", 6, 0);
		XFree(data);
		/* number of 32-bit chunks returned */
		ofs += nitems * format / 32;


@@ 1634,12 1634,12 @@ focus(XEvent *ev)
		win.state |= WIN_FOCUSED;
		xseturgency(0);
		if (IS_SET(MODE_FOCUS))
			ttywrite("\033[I", 3);
			ttywrite("\033[I", 3, 0);
	} else {
		XUnsetICFocus(xw.xic);
		win.state &= ~WIN_FOCUSED;
		if (IS_SET(MODE_FOCUS))
			ttywrite("\033[O", 3);
			ttywrite("\033[O", 3, 0);
	}
}



@@ 1714,7 1714,7 @@ kpress(XEvent *ev)

	/* 2. custom keys from config.h */
	if ((customkey = kmap(ksym, e->state))) {
		ttysend(customkey, strlen(customkey));
		ttywrite(customkey, strlen(customkey), 1);
		return;
	}



@@ 1733,7 1733,7 @@ kpress(XEvent *ev)
			len = 2;
		}
	}
	ttysend(buf, len);
	ttywrite(buf, len, 1);
}