systat: Handle SIGWINCH to properly window resizing and adjust
-swap disk stat based on new size. Display corrupts after resizing a window. Process SIGWINCH to redraw all window. Submitted by: Yoshihiro Ota ota@j.email.ne.jp Differential Revision: https://reviews.freebsd.org/D29337
This commit is contained in:
parent
dcc2fb3707
commit
6648383803
@ -426,12 +426,6 @@ dsshow2(int diskcol, int diskrow, int dn, int lc, struct statinfo *now, struct s
|
||||
putlongdouble(device_busy, diskrow + 4, lc, 5, 0, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
dsshow3(int diskcol, int diskrow, int dn, int lc, struct statinfo *now, struct statinfo *then)
|
||||
{
|
||||
dsshow2(diskcol, diskrow, dn, lc, now, then);
|
||||
}
|
||||
|
||||
void
|
||||
dsshow(int maxdrives, int diskcol, int diskrow, struct statinfo *now, struct statinfo *then)
|
||||
{
|
||||
@ -439,5 +433,5 @@ dsshow(int maxdrives, int diskcol, int diskrow, struct statinfo *now, struct sta
|
||||
|
||||
for (i = 0, lc = 0; i < num_devices && lc < maxdrives; i++)
|
||||
if (dev_select[i].selected)
|
||||
dsshow3(diskcol, diskrow, i, ++lc, now, then);
|
||||
dsshow2(diskcol, diskrow, i, ++lc, now, then);
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
|
||||
*
|
||||
* Copyright (c) 1998 David E. O'Brien
|
||||
* 2015 Yoshihiro Ota
|
||||
* 2015, 2021 Yoshihiro Ota
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -34,6 +34,8 @@
|
||||
|
||||
#include <devstat.h>
|
||||
|
||||
#define DISKHIGHT 5
|
||||
|
||||
int dsinit(int);
|
||||
void dsgetinfo(struct statinfo *);
|
||||
int dscmd(const char *, const char *, int, struct statinfo *);
|
||||
|
@ -135,6 +135,21 @@ parse_cmd_args (int argc, char **argv)
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
resize(int signo __unused)
|
||||
{
|
||||
|
||||
endwin();
|
||||
refresh();
|
||||
clear();
|
||||
|
||||
CMDLINE = LINES - 1;
|
||||
labels();
|
||||
display();
|
||||
status();
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
@ -191,6 +206,7 @@ main(int argc, char **argv)
|
||||
signal(SIGINT, die);
|
||||
signal(SIGQUIT, die);
|
||||
signal(SIGTERM, die);
|
||||
signal(SIGWINCH, resize);
|
||||
|
||||
/*
|
||||
* Initialize display. Load average appears in a one line
|
||||
|
@ -136,7 +136,7 @@ labelswap(void)
|
||||
|
||||
werase(wnd);
|
||||
|
||||
dslabel(12, 0, 18);
|
||||
dslabel(12, 0, LINES - DISKHIGHT - 1);
|
||||
|
||||
if (kvnsw <= 0) {
|
||||
mvwprintw(wnd, 0, 0, "(swap not configured)");
|
||||
@ -162,7 +162,7 @@ showswap(void)
|
||||
if (kvnsw != okvnsw)
|
||||
labelswap();
|
||||
|
||||
dsshow(12, 0, 18, &cur_dev, &last_dev);
|
||||
dsshow(12, 0, LINES - DISKHIGHT - 1, &cur_dev, &last_dev);
|
||||
|
||||
if (kvnsw <= 0)
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user