Fixed watch 8 bit so its optional
You can make watch 8bit clean by using the configure option --enable-watch8bit
This commit is contained in:
parent
8967f0fca3
commit
367b8bb616
@ -54,7 +54,7 @@ dist_man_MANS += \
|
|||||||
watch.1
|
watch.1
|
||||||
slabtop_LDADD = @NCURSES_LIBS@
|
slabtop_LDADD = @NCURSES_LIBS@
|
||||||
top_LDADD = @NCURSES_LIBS@
|
top_LDADD = @NCURSES_LIBS@
|
||||||
watch_LDADD = @NCURSES_LIBS@
|
watch_LDADD = @WATCH_NCURSES_LIBS@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
kill_SOURCES = skill.c
|
kill_SOURCES = skill.c
|
||||||
|
30
NEWS
30
NEWS
@ -2,6 +2,36 @@ procps-ng-3.3.1 --> procps-ng-3.3.2
|
|||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
* Redefined library to use version-info
|
* Redefined library to use version-info
|
||||||
|
* Imported a bunch of distribution patches:
|
||||||
|
watch: support unicode
|
||||||
|
watch: add precision wait time option -p
|
||||||
|
watch: interpret ANSI color code sequences
|
||||||
|
watch: add -exec and -beep flags and has better quoting
|
||||||
|
w: use environment to set user and from/host column widths
|
||||||
|
w: use COLUMNS environment if TIOCGWINSZ fails
|
||||||
|
w: bassman emulation with -o option
|
||||||
|
vmstat: do not scale si/so just like bi/bo
|
||||||
|
libprocps-ng: sysinfo.c: truncate the vmstat figure to 32 bits
|
||||||
|
tload: remote unneeded optarg and optind variables
|
||||||
|
sysctl: fix up some option processing
|
||||||
|
skill: kill prints perror
|
||||||
|
skill: do not treat skill null parameter as 0
|
||||||
|
skill: fix too greedy option parser
|
||||||
|
libprocps-ng: readproc.c: some type conversion help
|
||||||
|
ps: rename SZ to SIZE
|
||||||
|
ps: add sorting to %mem for ps
|
||||||
|
pmap: provide information for -x option
|
||||||
|
pgrep: distinguish between invalid commandline parameters and '-?'
|
||||||
|
pgrep: fix compiler warning saved_start_time might be used uninitialized
|
||||||
|
pgrep: add -c option for counting number of matched proceesses
|
||||||
|
pwdx & libprocps-ng: Hurd does not have MAX_PATH defined
|
||||||
|
ps: --sort does not work with time argument
|
||||||
|
skill: add CR to warning line
|
||||||
|
contrib: minimal ps: define mips PAGE_SIZE
|
||||||
|
libproc-ng: prettyfy proc mount messages
|
||||||
|
ps: add build option to disable ps option warning
|
||||||
|
libproc-ng: support building without WCHAR support
|
||||||
|
sysctl: remove index() for buildroot
|
||||||
|
|
||||||
procps-ng-3.3.0 --> procps-ng-3.3.1
|
procps-ng-3.3.0 --> procps-ng-3.3.1
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
16
configure.ac
16
configure.ac
@ -17,6 +17,15 @@ AM_PROG_CC_C_O
|
|||||||
AC_PROG_INSTALL
|
AC_PROG_INSTALL
|
||||||
AC_PROG_LN_S
|
AC_PROG_LN_S
|
||||||
|
|
||||||
|
AC_SUBST([WITH_WATCH8BIT])
|
||||||
|
AC_ARG_ENABLE([watch8bit],
|
||||||
|
AS_HELP_STRING([--enable-watch8bit], [enable watch to be 8bit clean (requires ncursesw)]),
|
||||||
|
[enable_watch8bit=$enableval],
|
||||||
|
[enable_watch8bit="no"])
|
||||||
|
if test "$enable_watch8bit" = "yes"; then
|
||||||
|
AC_DEFINE([WITH_WATCH8BIT], [1], [Enable 8 bit clean watch])
|
||||||
|
fi
|
||||||
|
|
||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
AC_HEADER_MAJOR
|
AC_HEADER_MAJOR
|
||||||
AC_CHECK_HEADERS([\
|
AC_CHECK_HEADERS([\
|
||||||
@ -106,9 +115,16 @@ else
|
|||||||
AC_MSG_ERROR([ncurses support missing/incomplete (for partial build use --without-ncurses)])
|
AC_MSG_ERROR([ncurses support missing/incomplete (for partial build use --without-ncurses)])
|
||||||
fi
|
fi
|
||||||
AM_CONDITIONAL(WITH_NCURSES, true)
|
AM_CONDITIONAL(WITH_NCURSES, true)
|
||||||
|
if test "$enable_watch8bit" = yes; then
|
||||||
|
AC_CHECK_LIB([ncursesw], [addwstr], [WATCH_NCURSES_LIBS=-lncursesw],
|
||||||
|
[AC_MSG_ERROR([Cannot find ncurses wide library ncursesw with --enable-watch8bit])])
|
||||||
|
else
|
||||||
|
WATCH_NCURSES_LIBS="-lncurses"
|
||||||
|
fi
|
||||||
NCURSES_LIBS="-lncurses"
|
NCURSES_LIBS="-lncurses"
|
||||||
fi
|
fi
|
||||||
AC_SUBST([NCURSES_LIBS])
|
AC_SUBST([NCURSES_LIBS])
|
||||||
|
AC_SUBST([WATCH_NCURSES_LIBS])
|
||||||
|
|
||||||
usrbin_execdir='${exec_prefix}/usr/bin'
|
usrbin_execdir='${exec_prefix}/usr/bin'
|
||||||
AC_SUBST([usrbin_execdir])
|
AC_SUBST([usrbin_execdir])
|
||||||
|
63
watch.c
63
watch.c
@ -12,10 +12,10 @@
|
|||||||
* Unicode Support added by Jarrod Lowe <procps@rrod.net> in 2009.
|
* Unicode Support added by Jarrod Lowe <procps@rrod.net> in 2009.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <ncurses.h>
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -26,8 +26,13 @@
|
|||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include "proc/procps.h"
|
#include "proc/procps.h"
|
||||||
#include "config.h"
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#ifdef WITH_WATCH8BIT
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <ncursesw/ncurses.h>
|
||||||
|
#else
|
||||||
|
#include <ncurses.h>
|
||||||
|
#endif /* WITH_WATCH8BIT */
|
||||||
|
|
||||||
#ifdef FORCE_8BIT
|
#ifdef FORCE_8BIT
|
||||||
#undef isprint
|
#undef isprint
|
||||||
@ -220,6 +225,7 @@ watch_usec_t get_time_usec() {
|
|||||||
return USECS_PER_SEC*now.tv_sec + now.tv_usec;
|
return USECS_PER_SEC*now.tv_sec + now.tv_usec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_WATCH8BIT
|
||||||
// read a wide character from a popen'd stream
|
// read a wide character from a popen'd stream
|
||||||
#define MAX_ENC_BYTES 16
|
#define MAX_ENC_BYTES 16
|
||||||
wint_t my_getwc(FILE *s);
|
wint_t my_getwc(FILE *s);
|
||||||
@ -245,6 +251,7 @@ wint_t my_getwc(FILE *s) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* WITH_WATCH8BIT */
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
@ -259,13 +266,16 @@ main(int argc, char *argv[])
|
|||||||
option_help = 0, option_version = 0;
|
option_help = 0, option_version = 0;
|
||||||
double interval = 2;
|
double interval = 2;
|
||||||
char *command;
|
char *command;
|
||||||
wchar_t *wcommand = NULL;
|
|
||||||
char **command_argv;
|
char **command_argv;
|
||||||
int command_length = 0; /* not including final \0 */
|
int command_length = 0; /* not including final \0 */
|
||||||
int wcommand_columns = 0; /* not including final \0 */
|
|
||||||
int wcommand_characters = 0; /* not including final \0 */
|
|
||||||
watch_usec_t next_loop; /* next loop time in us, used for precise time
|
watch_usec_t next_loop; /* next loop time in us, used for precise time
|
||||||
keeping only */
|
keeping only */
|
||||||
|
#ifdef WITH_WATCH8BIT
|
||||||
|
wchar_t *wcommand = NULL;
|
||||||
|
int wcommand_columns = 0; /* not including final \0 */
|
||||||
|
int wcommand_characters = 0; /* not including final \0 */
|
||||||
|
#endif /* WITH_WATCH8BIT */
|
||||||
|
|
||||||
int pipefd[2];
|
int pipefd[2];
|
||||||
int status;
|
int status;
|
||||||
pid_t child;
|
pid_t child;
|
||||||
@ -362,6 +372,7 @@ main(int argc, char *argv[])
|
|||||||
command[command_length] = '\0';
|
command[command_length] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_WATCH8BIT
|
||||||
// convert to wide for printing purposes
|
// convert to wide for printing purposes
|
||||||
//mbstowcs(NULL, NULL, 0);
|
//mbstowcs(NULL, NULL, 0);
|
||||||
wcommand_characters = mbstowcs(NULL, command, 0);
|
wcommand_characters = mbstowcs(NULL, command, 0);
|
||||||
@ -376,7 +387,7 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
mbstowcs(wcommand, command, wcommand_characters+1);
|
mbstowcs(wcommand, command, wcommand_characters+1);
|
||||||
wcommand_columns = wcswidth(wcommand, -1);
|
wcommand_columns = wcswidth(wcommand, -1);
|
||||||
|
#endif /* WITH_WATCH8BIT */
|
||||||
|
|
||||||
|
|
||||||
get_terminal_size();
|
get_terminal_size();
|
||||||
@ -444,6 +455,7 @@ main(int argc, char *argv[])
|
|||||||
if(width < tsl + hlen + 4) {
|
if(width < tsl + hlen + 4) {
|
||||||
mvaddstr(0, width - tsl - 4, "... ");
|
mvaddstr(0, width - tsl - 4, "... ");
|
||||||
}else{
|
}else{
|
||||||
|
#ifdef WITH_WATCH8BIT
|
||||||
if(width < tsl + hlen + wcommand_columns) {
|
if(width < tsl + hlen + wcommand_columns) {
|
||||||
// print truncated
|
// print truncated
|
||||||
int avail_columns = width - tsl - hlen;
|
int avail_columns = width - tsl - hlen;
|
||||||
@ -458,6 +470,9 @@ main(int argc, char *argv[])
|
|||||||
}else{
|
}else{
|
||||||
mvaddwstr(0, hlen, wcommand);
|
mvaddwstr(0, hlen, wcommand);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
mvaddnstr(0, hlen, command, width - tsl - hlen);
|
||||||
|
#endif /* WITH_WATCH8BIT */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -520,15 +535,22 @@ main(int argc, char *argv[])
|
|||||||
|
|
||||||
for (y = show_title; y < height; y++) {
|
for (y = show_title; y < height; y++) {
|
||||||
int eolseen = 0, tabpending = 0;
|
int eolseen = 0, tabpending = 0;
|
||||||
|
#ifdef WITH_WATCH8BIT
|
||||||
wint_t carry = WEOF;
|
wint_t carry = WEOF;
|
||||||
|
#endif /* WITH_WATCH8BIT */
|
||||||
for (x = 0; x < width; x++) {
|
for (x = 0; x < width; x++) {
|
||||||
|
#ifdef WITH_WATCH8BIT
|
||||||
wint_t c = ' ';
|
wint_t c = ' ';
|
||||||
|
#else
|
||||||
|
int c = ' ';
|
||||||
|
#endif /* WITH_WATCH8BIT */
|
||||||
int attr = 0;
|
int attr = 0;
|
||||||
|
|
||||||
if (!eolseen) {
|
if (!eolseen) {
|
||||||
/* if there is a tab pending, just spit spaces until the
|
/* if there is a tab pending, just spit spaces until the
|
||||||
next stop instead of reading characters */
|
next stop instead of reading characters */
|
||||||
if (!tabpending)
|
if (!tabpending)
|
||||||
|
#ifdef WITH_WATCH8BIT
|
||||||
do {
|
do {
|
||||||
if(carry == WEOF) {
|
if(carry == WEOF) {
|
||||||
c = my_getwc(p);
|
c = my_getwc(p);
|
||||||
@ -541,6 +563,14 @@ main(int argc, char *argv[])
|
|||||||
&& c != L'\n'
|
&& c != L'\n'
|
||||||
&& c != L'\t'
|
&& c != L'\t'
|
||||||
&& (c != L'\033' || option_color != 1));
|
&& (c != L'\033' || option_color != 1));
|
||||||
|
#else
|
||||||
|
do
|
||||||
|
c = getc(p);
|
||||||
|
while (c != EOF && !isprint(c)
|
||||||
|
&& c != '\n'
|
||||||
|
&& c != '\t'
|
||||||
|
&& (c != L'\033' || option_color != 1));
|
||||||
|
#endif /* WITH_WATCH8BIT */
|
||||||
if (c == L'\033' && option_color == 1) {
|
if (c == L'\033' && option_color == 1) {
|
||||||
x--;
|
x--;
|
||||||
process_ansi(p);
|
process_ansi(p);
|
||||||
@ -555,6 +585,7 @@ main(int argc, char *argv[])
|
|||||||
eolseen = 1;
|
eolseen = 1;
|
||||||
else if (c == L'\t')
|
else if (c == L'\t')
|
||||||
tabpending = 1;
|
tabpending = 1;
|
||||||
|
#ifdef WITH_WATCH8BIT
|
||||||
if (x==width-1 && wcwidth(c)==2) {
|
if (x==width-1 && wcwidth(c)==2) {
|
||||||
y++;
|
y++;
|
||||||
x = -1; //process this double-width
|
x = -1; //process this double-width
|
||||||
@ -563,11 +594,16 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
if (c == WEOF || c == L'\n' || c == L'\t')
|
if (c == WEOF || c == L'\n' || c == L'\t')
|
||||||
c = L' ';
|
c = L' ';
|
||||||
|
#else
|
||||||
|
if (c == EOF || c == '\n' || c == '\t')
|
||||||
|
c = ' ';
|
||||||
|
#endif /* WITH_WATCH8BIT */
|
||||||
if (tabpending && (((x + 1) % 8) == 0))
|
if (tabpending && (((x + 1) % 8) == 0))
|
||||||
tabpending = 0;
|
tabpending = 0;
|
||||||
}
|
}
|
||||||
move(y, x);
|
move(y, x);
|
||||||
if (option_differences) {
|
if (option_differences) {
|
||||||
|
#ifdef WITH_WATCH8BIT
|
||||||
cchar_t oldc;
|
cchar_t oldc;
|
||||||
in_wch(&oldc);
|
in_wch(&oldc);
|
||||||
attr = !first_screen
|
attr = !first_screen
|
||||||
@ -575,14 +611,29 @@ main(int argc, char *argv[])
|
|||||||
||
|
||
|
||||||
(option_differences_cumulative
|
(option_differences_cumulative
|
||||||
&& (oldc.attr & A_ATTRIBUTES)));
|
&& (oldc.attr & A_ATTRIBUTES)));
|
||||||
|
#else
|
||||||
|
chtype oldch = inch();
|
||||||
|
unsigned char oldc = oldch & A_CHARTEXT;
|
||||||
|
attr = !first_screen
|
||||||
|
&& ((unsigned char)c != oldc
|
||||||
|
||
|
||||||
|
(option_differences_cumulative
|
||||||
|
&& (oldch & A_ATTRIBUTES)));
|
||||||
|
#endif /* WITH_WATCH8BIT */
|
||||||
}
|
}
|
||||||
if (attr)
|
if (attr)
|
||||||
standout();
|
standout();
|
||||||
|
#ifdef WITH_WATCH8BIT
|
||||||
addnwstr((wchar_t*)&c,1);
|
addnwstr((wchar_t*)&c,1);
|
||||||
|
#else
|
||||||
|
addch(c);
|
||||||
|
#endif /* WITH_WATCH8BIT */
|
||||||
if (attr)
|
if (attr)
|
||||||
standend();
|
standend();
|
||||||
|
#ifdef WITH_WATCH8BIT
|
||||||
if(wcwidth(c) == 0) { x--; }
|
if(wcwidth(c) == 0) { x--; }
|
||||||
if(wcwidth(c) == 2) { x++; }
|
if(wcwidth(c) == 2) { x++; }
|
||||||
|
#endif /* WITH_WATCH8BIT */
|
||||||
}
|
}
|
||||||
oldeolseen = eolseen;
|
oldeolseen = eolseen;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user