repeatedly, displaying its output and errors (the first screenfull). This
allows you to watch the program output change over time. By default, the
program is run every 2 seconds.
+By default,
.B watch
will run until interrupted.
.SH OPTIONS
\fB\-e\fR, \fB\-\-errexit\fR
Freeze updates on command error, and exit after a key press.
.TP
+\fB\-g\fR, \fB\-\-chgexit\fR
+Exit when the output of
+.I command
+changes.
+.TP
\fB\-c\fR, \fB\-\-color\fR
Interpret ANSI color sequences.
.TP
" -c, --color interpret ANSI color sequences\n"
" -d, --differences highlight changes between updates\n"
" -e, --errexit exit if command has a non-zero exit\n"
+ " -g, --chgexit exit when output from command changes\n"
" -n, --interval <secs> seconds to wait between updates\n"
" -p, --precise attempt run command in precise intervals\n"
" -t, --no-title turn off header\n"
option_exec = 0,
option_beep = 0,
option_color = 0,
- option_errexit = 0, option_help = 0, option_version = 0;
+ option_errexit = 0, option_chgexit = 0, option_help = 0, option_version = 0;
double interval = 2;
char *command;
char **command_argv;
int pipefd[2];
int status;
+ int exit_early = 0;
pid_t child;
static struct option longopts[] = {
{"interval", required_argument, 0, 'n'},
{"beep", no_argument, 0, 'b'},
{"errexit", no_argument, 0, 'e'},
+ {"chgexit", no_argument, 0, 'g'},
{"exec", no_argument, 0, 'x'},
{"precise", no_argument, 0, 'p'},
{"no-title", no_argument, 0, 't'},
textdomain(PACKAGE);
while ((optc =
- getopt_long(argc, argv, "+bced::hn:pvtx", longopts, (int *)0))
+ getopt_long(argc, argv, "+bced::ghn:pvtx", longopts, (int *)0))
!= EOF) {
switch (optc) {
case 'b':
case 'e':
option_errexit = 1;
break;
+ case 'g':
+ option_chgexit = 1;
+ break;
case 't':
show_title = 0;
break;
if (precise_timekeeping)
next_loop = get_time_usec();
- for (;;) {
+ do {
time_t t = time(NULL);
char *ts = ctime(&t);
int tsl = strlen(ts);
tabpending = 0;
}
move(y, x);
+ if (!exit_early && option_chgexit) {
+#ifdef WITH_WATCH8BIT
+ cchar_t oldc;
+ in_wch(&oldc);
+ exit_early = (wchar_t) c != oldc.chars[0];
+#else
+ chtype oldch = inch();
+ unsigned char oldc = oldch & A_CHARTEXT;
+ exit_early = (unsigned char) c != oldc;
+#endif /* WITH_WATCH8BIT */
+ }
if (option_differences) {
#ifdef WITH_WATCH8BIT
cchar_t oldc;
usleep(next_loop - cur_time);
} else
usleep(interval * 1000000);
- }
+ } while (!exit_early);
endwin();