Add resizewin -z. It makes resizewin not do anything if the terminal
size is already set to something other than zero. It's supposed to be called from eg /etc/profile - it's not neccessary to query terminal size when logging in over the network, because the protocol used already takes care of this, but it's neccessary when logging over a serial line. Reviewed by: cem, Daniel O'Connor <darius@dons.net.au> MFC after: 2 weeks Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D10637
This commit is contained in:
parent
048fd859ce
commit
f1504c0c26
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=317934
@ -27,17 +27,27 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd July 9, 2016
|
||||
.Dd May 8, 2017
|
||||
.Dt RESIZEWIN 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm resizewin
|
||||
.Nd update the kernel window size for the current TTY
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl z
|
||||
.Sh DESCRIPTION
|
||||
Query the terminal emulator window size with the
|
||||
.Dv TIOCSWINSZ
|
||||
ioctl and set the window size known by the kernel to the new values.
|
||||
The terminal is assumed to be VT100/ANSI compatible.
|
||||
.Pp
|
||||
The following options are available:
|
||||
.Bl -tag -width ".Fl z"
|
||||
.It Fl z
|
||||
Do nothing unless the current kernel terminal size is zero.
|
||||
.El
|
||||
.Pp
|
||||
.Nm
|
||||
is functionally similar to
|
||||
.Xr resize 1 ,
|
||||
|
@ -47,20 +47,50 @@ static const char query[] =
|
||||
"\033[999;999H" /* Move cursor */
|
||||
"\033[6n" /* Get cursor position */
|
||||
"\0338"; /* Restore cursor position */
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
|
||||
fprintf(stderr, "usage: resizewin [-z]\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int
|
||||
main(__unused int argc, __unused char **argv)
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
struct termios old, new;
|
||||
struct winsize w;
|
||||
int ret, fd, cnt, error;
|
||||
int ret, fd, ch, cnt, error, zflag;
|
||||
char data[20];
|
||||
struct timeval then, now;
|
||||
|
||||
error = 0;
|
||||
zflag = 0;
|
||||
while ((ch = getopt(argc, argv, "z")) != -1) {
|
||||
switch (ch) {
|
||||
case 'z':
|
||||
zflag = 1;
|
||||
break;
|
||||
case '?':
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
}
|
||||
argc -= optind;
|
||||
if (argc != 0)
|
||||
usage();
|
||||
|
||||
if ((fd = open("/dev/tty", O_RDWR | O_NONBLOCK)) == -1)
|
||||
exit(1);
|
||||
|
||||
if (zflag) {
|
||||
if (ioctl(fd, TIOCGWINSZ, &w) == -1)
|
||||
exit(1);
|
||||
if (w.ws_row != 0 && w.ws_col != 0)
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/* Disable echo */
|
||||
if (tcgetattr(fd, &old) == -1)
|
||||
exit(1);
|
||||
|
Loading…
Reference in New Issue
Block a user