Rationalise our colour usage a little.
This commit is contained in:
parent
0f92b5e7df
commit
f657d87b99
@ -3,7 +3,7 @@
|
||||
|
||||
17 Apr 2007; Roy Marples <uberlord@gentoo.org>:
|
||||
|
||||
env vars EINFO_GOOD and friends now override our hardcoded builtins.
|
||||
env vars ECOLOR_GOOD and friends now override our hardcoded builtins.
|
||||
|
||||
16 Apr 2007; Mike Frysinger <vapier@gentoo.org>:
|
||||
|
||||
|
@ -79,6 +79,12 @@ start() {
|
||||
|| rm -f "${RC_LIBDIR}"/console/map
|
||||
/bin/setfont -ou "${RC_LIBDIR}"/console/unimap 2>/dev/null \
|
||||
|| rm -f "${RC_LIBDIR}"/console/unimap
|
||||
|
||||
if [ "${UNICODE}" = "yes" ] ; then
|
||||
touch "${RC_LIBDIR}"/console/unicode
|
||||
else
|
||||
rm -f "${RC_LIBDIR}"/console/unicode
|
||||
fi
|
||||
fi
|
||||
|
||||
return ${retval}
|
||||
|
@ -88,17 +88,20 @@ get_KV() {
|
||||
|
||||
# Try and set a font as early as we can
|
||||
ttydev=${CONSOLE:-/dev/tty1}
|
||||
if [ -c "${ttydev}" ] ; then
|
||||
ttydev="-C ${ttydev}"
|
||||
else
|
||||
[ -c /dev/vc/1 ] && ttydev="-C /dev/vc/1" || ttydev=
|
||||
if [ ! -c "${ttydev}" ] ; then
|
||||
[ -c /dev/vc/1 ] && ttydev="/dev/vc/1" || ttydev=
|
||||
fi
|
||||
[ -r "${RC_LIBDIR}"/console/font ] \
|
||||
&& /bin/setfont ${ttydev} "${RC_LIBDIR}"/console/font
|
||||
&& /bin/setfont ${ttydev:+-C} ${ttydev} "${RC_LIBDIR}"/console/font
|
||||
[ -r "${RC_LIBDIR}"/console/map ] \
|
||||
&& /bin/setfont ${ttydev} -m "${RC_LIBDIR}"/console/map
|
||||
&& /bin/setfont ${ttydev:+-C} ${ttydev} -m "${RC_LIBDIR}"/console/map
|
||||
[ -r "${RC_LIBDIR}"/console/unimap ] \
|
||||
&& /bin/setfont ${ttydev} -u "${RC_LIBDIR}"/console/unimap
|
||||
&& /bin/setfont ${ttydev:+-C} ${ttydev} -u "${RC_LIBDIR}"/console/unimap
|
||||
if [ -e "${RC_LIBDIR}"/console/unicode ] ; then
|
||||
eval printf "\033%%G" ${ttydev:+>} ${ttydev}
|
||||
else
|
||||
eval printf "\033(K" ${ttydev:+>} ${ttydev}
|
||||
fi
|
||||
unset ttydev
|
||||
|
||||
. /etc/init.d/functions.sh
|
||||
|
@ -144,14 +144,7 @@ for arg in "$@" ; do
|
||||
done
|
||||
|
||||
if [ "${RC_NOCOLOR}" != "yes" -a -z "${GOOD}" ] ; then
|
||||
if color_terminal ; then
|
||||
GOOD=${EINFO_GOOD:-$'\e[32;01m'}
|
||||
WARN=${EINFO_WARN:-$'\e[33;01m'}
|
||||
BAD=${EINFO_BAD:-$'\e[31;01m'}
|
||||
HILITE=${EINFO_HILITE:-$'\e[36;01m'}
|
||||
BRACKET=${EINFO_BRACKET:-$'\e[34;01m'}
|
||||
NORMAL=$'\e[0m'
|
||||
fi
|
||||
eval $(eval_ecolors)
|
||||
fi
|
||||
|
||||
# vim: set ts=4 :
|
||||
|
@ -38,7 +38,7 @@ SYS_WHITELIST = env_whitelist
|
||||
TARGET = $(LIB_TARGETS) $(BIN_TARGETS) $(SBIN_TARGETS) $(PRIV_BIN_TARGETS)
|
||||
|
||||
RCLINKS = einfon einfo ewarnn ewarn eerrorn eerror ebegin eend ewend \
|
||||
eindent eoutdent eflush color_terminal \
|
||||
eindent eoutdent eflush eval_ecolors \
|
||||
veinfo vewarn vebegin veend vewend veindent veoutdent \
|
||||
service_starting service_inactive service_started \
|
||||
service_stopping service_stopped \
|
||||
|
30
src/einfo.h
30
src/einfo.h
@ -18,30 +18,14 @@
|
||||
|
||||
typedef enum
|
||||
{
|
||||
einfo_good,
|
||||
einfo_warn,
|
||||
einfo_bad,
|
||||
einfo_hilite,
|
||||
einfo_bracket,
|
||||
einfo_normal
|
||||
ecolor_good,
|
||||
ecolor_warn,
|
||||
ecolor_bad,
|
||||
ecolor_hilite,
|
||||
ecolor_bracket,
|
||||
ecolor_normal
|
||||
} einfo_color_t;
|
||||
|
||||
/* Colour codes used by the below functions. */
|
||||
#define EINFO_GOOD "\033[32;01m"
|
||||
#define EINFO_WARN "\033[33;01m"
|
||||
#define EINFO_BAD "\033[31;01m"
|
||||
#define EINFO_HILITE "\033[36;01m"
|
||||
#define EINFO_BRACKET "\033[34;01m"
|
||||
#define EINFO_NORMAL "\033[0m"
|
||||
|
||||
/* Handy macros to easily use the above in a custom manner */
|
||||
#define PEINFO_GOOD if (colour_terminal ()) printf (EINFO_GOOD)
|
||||
#define PEINFO_WARN if (colour_terminal ()) printf (EINFO_WARN)
|
||||
#define PEINFO_BAD if (colour_terminal ()) printf (EINFO_BAD)
|
||||
#define PEINFO_HILITE if (colour_terminal ()) printf (EINFO_HILITE)
|
||||
#define PEINFO_BRACKET if (colour_terminal ()) printf (EINFO_BRACKET)
|
||||
#define PEINFO_NORMAL if (colour_terminal ()) printf (EINFO_NORMAL)
|
||||
|
||||
/* We work out if the terminal supports colour or not through the use
|
||||
of the TERM env var. We cache the reslt in a static bool, so
|
||||
subsequent calls are very fast.
|
||||
@ -51,7 +35,7 @@ typedef enum
|
||||
in the future, but veinfo is used by shell scripts as they don't
|
||||
have the va_list concept
|
||||
*/
|
||||
bool colour_terminal (void);
|
||||
const char *ecolor (einfo_color_t);
|
||||
int einfon (const char *fmt, ...) EINFO_PRINTF (1, 2);
|
||||
int ewarnn (const char *fmt, ...) EINFO_PRINTF (1, 2);
|
||||
int eerrorn (const char *fmt, ...) EINFO_PRINTF (1, 2);
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include "rc-misc.h"
|
||||
|
||||
#include "hidden-visibility.h"
|
||||
hidden_proto(colour_terminal)
|
||||
hidden_proto(ecolor)
|
||||
hidden_proto(ebegin)
|
||||
hidden_proto(ebeginv)
|
||||
hidden_proto(ebracket)
|
||||
@ -64,10 +64,19 @@ hidden_proto(ewendv)
|
||||
|
||||
#define EBUFFER_LOCK RC_SVCDIR "ebuffer/.lock"
|
||||
|
||||
/* Default colours */
|
||||
#define ECOLOR_GOOD "\033[32;01m"
|
||||
#define ECOLOR_WARN "\033[33;01m"
|
||||
#define ECOLOR_BAD "\033[31;01m"
|
||||
#define ECOLOR_HILITE "\033[36;01m"
|
||||
#define ECOLOR_BRACKET "\033[34;01m"
|
||||
#define ECOLOR_NORMAL "\033[0m"
|
||||
#define ECOLOR_FLUSH "\033[K"
|
||||
|
||||
/* A cheat sheet of colour capable terminals
|
||||
This is taken from DIR_COLORS from GNU coreutils
|
||||
We embed it here as we shouldn't depend on coreutils */
|
||||
static const char *colour_terms[] = {
|
||||
static const char *color_terms[] = {
|
||||
"Eterm",
|
||||
"ansi",
|
||||
"color-xterm",
|
||||
@ -123,7 +132,7 @@ static bool is_env (const char *var, const char *val)
|
||||
return (strcasecmp (v, val) ? false : true);
|
||||
}
|
||||
|
||||
bool colour_terminal (void)
|
||||
static bool colour_terminal (void)
|
||||
{
|
||||
static int in_colour = -1;
|
||||
int i = 0;
|
||||
@ -139,8 +148,8 @@ bool colour_terminal (void)
|
||||
if (! term)
|
||||
return (true);
|
||||
|
||||
while (colour_terms[i]) {
|
||||
if (strcmp (colour_terms[i], term) == 0) {
|
||||
while (color_terms[i]) {
|
||||
if (strcmp (color_terms[i], term) == 0) {
|
||||
in_colour = 1;
|
||||
return (true);
|
||||
}
|
||||
@ -150,7 +159,6 @@ bool colour_terminal (void)
|
||||
in_colour = 0;
|
||||
return (false);
|
||||
}
|
||||
hidden_def(colour_terminal)
|
||||
|
||||
static int get_term_columns (void)
|
||||
{
|
||||
@ -397,43 +405,44 @@ static int _eindent (FILE *stream)
|
||||
return (fprintf (stream, "%s", indent));
|
||||
}
|
||||
|
||||
static const char *ecolor (einfo_color_t color) {
|
||||
const char *ecolor (einfo_color_t color) {
|
||||
const char *col = NULL;
|
||||
|
||||
if (! colour_terminal ())
|
||||
return ("");
|
||||
|
||||
switch (color) {
|
||||
case einfo_good:
|
||||
if (! (col = getenv ("EINFO_GOOD")))
|
||||
col = EINFO_GOOD;
|
||||
case ecolor_good:
|
||||
if (! (col = getenv ("ECOLOR_GOOD")))
|
||||
col = ECOLOR_GOOD;
|
||||
break;
|
||||
case einfo_warn:
|
||||
if (! (col = getenv ("EINFO_WARN")))
|
||||
col = EINFO_WARN;
|
||||
case ecolor_warn:
|
||||
if (! (col = getenv ("ECOLOR_WARN")))
|
||||
col = ECOLOR_WARN;
|
||||
break;
|
||||
case einfo_bad:
|
||||
if (! (col = getenv ("EINFO_BAD")))
|
||||
col = EINFO_BAD;
|
||||
case ecolor_bad:
|
||||
if (! (col = getenv ("ECOLOR_BAD")))
|
||||
col = ECOLOR_BAD;
|
||||
break;
|
||||
case einfo_hilite:
|
||||
if (! (col = getenv ("EINFO_HILITE")))
|
||||
col = EINFO_HILITE;
|
||||
case ecolor_hilite:
|
||||
if (! (col = getenv ("ECOLOR_HILITE")))
|
||||
col = ECOLOR_HILITE;
|
||||
break;
|
||||
case einfo_bracket:
|
||||
if (! (col = getenv ("EINFO_BRACKET")))
|
||||
col = EINFO_BRACKET;
|
||||
case ecolor_bracket:
|
||||
if (! (col = getenv ("ECOLOR_BRACKET")))
|
||||
col = ECOLOR_BRACKET;
|
||||
break;
|
||||
case einfo_normal:
|
||||
col = EINFO_NORMAL;
|
||||
case ecolor_normal:
|
||||
col = ECOLOR_NORMAL;
|
||||
break;
|
||||
}
|
||||
|
||||
return (col);
|
||||
}
|
||||
hidden_def(ecolor)
|
||||
|
||||
#define EINFOVN(_file, _color) \
|
||||
if (colour_terminal ()) \
|
||||
fprintf (_file, " %s*%s ", ecolor (_color), ecolor (einfo_normal)); \
|
||||
else \
|
||||
fprintf (_file, " * "); \
|
||||
fprintf (_file, " %s*%s ", ecolor (_color), ecolor (ecolor_normal)); \
|
||||
retval += _eindent (_file); \
|
||||
{ \
|
||||
va_list _ap; \
|
||||
@ -442,13 +451,13 @@ retval += _eindent (_file); \
|
||||
va_end (_ap); \
|
||||
} \
|
||||
if (colour_terminal ()) \
|
||||
fprintf (_file, "\033[K");
|
||||
fprintf (_file, ECOLOR_FLUSH);
|
||||
|
||||
static int _einfovn (const char *fmt, va_list ap)
|
||||
{
|
||||
int retval = 0;
|
||||
|
||||
EINFOVN (stdout, einfo_good);
|
||||
EINFOVN (stdout, ecolor_good);
|
||||
return (retval);
|
||||
}
|
||||
|
||||
@ -456,7 +465,7 @@ static int _ewarnvn (const char *fmt, va_list ap)
|
||||
{
|
||||
int retval = 0;
|
||||
|
||||
EINFOVN (stdout, einfo_warn);
|
||||
EINFOVN (stdout, ecolor_warn);
|
||||
return (retval);
|
||||
}
|
||||
|
||||
@ -464,7 +473,7 @@ static int _eerrorvn (const char *fmt, va_list ap)
|
||||
{
|
||||
int retval = 0;
|
||||
|
||||
EINFOVN (stderr, einfo_bad);
|
||||
EINFOVN (stderr, ecolor_bad);
|
||||
return (retval);
|
||||
}
|
||||
|
||||
@ -637,15 +646,15 @@ static void _eend (int col, einfo_color_t color, const char *msg)
|
||||
if (! msg)
|
||||
return;
|
||||
|
||||
if (color == einfo_bad)
|
||||
if (color == ecolor_bad)
|
||||
fp = stderr;
|
||||
|
||||
cols = get_term_columns () - (strlen (msg) + 6);
|
||||
|
||||
if (cols > 0 && colour_terminal ()) {
|
||||
fprintf (fp, "\033[A\033[%dC %s[ %s%s %s]%s\n", cols,
|
||||
ecolor (einfo_bracket), ecolor (color), msg,
|
||||
ecolor (einfo_bracket), ecolor (einfo_normal));
|
||||
ecolor (ecolor_bracket), ecolor (color), msg,
|
||||
ecolor (ecolor_bracket), ecolor (ecolor_normal));
|
||||
} else {
|
||||
for (i = -1; i < cols - col; i++)
|
||||
fprintf (fp, " ");
|
||||
@ -682,7 +691,9 @@ static int _do_eend (const char *cmd, int retval, const char *fmt, va_list ap)
|
||||
fprintf (fp, "\n");
|
||||
}
|
||||
|
||||
_eend (col, retval == 0 ? einfo_good : einfo_bad, retval == 0 ? OK : NOT_OK);
|
||||
_eend (col,
|
||||
retval == 0 ? ecolor_good : ecolor_bad,
|
||||
retval == 0 ? OK : NOT_OK);
|
||||
return (retval);
|
||||
}
|
||||
|
||||
|
@ -18,34 +18,34 @@
|
||||
|
||||
static void print_level (char *level)
|
||||
{
|
||||
printf ("Runlevel: ");
|
||||
PEINFO_HILITE;
|
||||
printf ("%s\n", level);
|
||||
PEINFO_NORMAL;
|
||||
printf ("Runlevel: %s%s%s\n",
|
||||
ecolor (ecolor_hilite),
|
||||
level,
|
||||
ecolor (ecolor_normal));
|
||||
}
|
||||
|
||||
static void print_service (char *service)
|
||||
{
|
||||
char status[10];
|
||||
int cols = printf (" %s\n", service);
|
||||
einfo_color_t color = einfo_bad;
|
||||
einfo_color_t color = ecolor_bad;
|
||||
|
||||
if (rc_service_state (service, rc_service_stopping))
|
||||
snprintf (status, sizeof (status), "stopping ");
|
||||
else if (rc_service_state (service, rc_service_starting)) {
|
||||
snprintf (status, sizeof (status), "starting ");
|
||||
color = einfo_warn;
|
||||
color = ecolor_warn;
|
||||
} else if (rc_service_state (service, rc_service_inactive)) {
|
||||
snprintf (status, sizeof (status), "inactive ");
|
||||
color = einfo_warn;
|
||||
color = ecolor_warn;
|
||||
} else if (geteuid () == 0 && rc_service_state (service, rc_service_crashed))
|
||||
snprintf (status, sizeof (status), " crashed ");
|
||||
else if (rc_service_state (service, rc_service_started)) {
|
||||
snprintf (status, sizeof (status), " started ");
|
||||
color = einfo_good;
|
||||
color = ecolor_good;
|
||||
} else if (rc_service_state (service, rc_service_scheduled)) {
|
||||
snprintf (status, sizeof (status), "scheduled");
|
||||
color = einfo_warn;
|
||||
color = ecolor_warn;
|
||||
} else
|
||||
snprintf (status, sizeof (status), " stopped ");
|
||||
ebracket (cols, color, status);
|
||||
|
32
src/rc.c
32
src/rc.c
@ -114,6 +114,17 @@ static int do_e (int argc, char **argv)
|
||||
char *p;
|
||||
char *fmt = NULL;
|
||||
|
||||
if (strcmp (applet, "eval_ecolors") == 0) {
|
||||
printf ("GOOD='%s'\nWARN='%s'\nBAD='%s'\nHILITE='%s'\nBRACKET='%s'\nNORMAL='%s'\n",
|
||||
ecolor (ecolor_good),
|
||||
ecolor (ecolor_warn),
|
||||
ecolor (ecolor_bad),
|
||||
ecolor (ecolor_hilite),
|
||||
ecolor (ecolor_bracket),
|
||||
ecolor (ecolor_normal));
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
if (strcmp (applet, "eend") == 0 ||
|
||||
strcmp (applet, "ewend") == 0 ||
|
||||
strcmp (applet, "veend") == 0 ||
|
||||
@ -497,8 +508,6 @@ int main (int argc, char **argv)
|
||||
exit (rc_runlevel_starting () ? 0 : 1);
|
||||
else if (strcmp (applet, "is_runlevel_stop") == 0)
|
||||
exit (rc_runlevel_stopping () ? 0 : 1);
|
||||
else if (strcmp (applet, "color_terminal") == 0)
|
||||
exit (colour_terminal () ? 0 : 1);
|
||||
|
||||
if (strcmp (applet, "rc" ) != 0)
|
||||
eerrorx ("%s: unknown applet", applet);
|
||||
@ -578,19 +587,14 @@ int main (int argc, char **argv)
|
||||
uname (&uts);
|
||||
|
||||
printf ("\n");
|
||||
PEINFO_GOOD;
|
||||
printf (" Gentoo/%s; ", uts.sysname);
|
||||
PEINFO_BRACKET;
|
||||
printf ("http://www.gentoo.org/");
|
||||
PEINFO_NORMAL;
|
||||
printf ("\n Copyright 1999-2007 Gentoo Foundation; "
|
||||
"Distributed under the GPLv2\n\n");
|
||||
printf (" %sGentoo/%s; %shttp://www.gentoo.org/%s"
|
||||
"\n Copyright 1999-2007 Gentoo Foundation; "
|
||||
"Distributed under the GPLv2\n\n",
|
||||
ecolor (ecolor_good), uts.sysname, ecolor (ecolor_bracket),
|
||||
ecolor (ecolor_normal));
|
||||
|
||||
printf ("Press ");
|
||||
PEINFO_GOOD;
|
||||
printf ("I");
|
||||
PEINFO_NORMAL;
|
||||
printf (" to enter interactive boot mode\n\n");
|
||||
printf ("Press %sI%s to enter interactive boot mode\n\n",
|
||||
ecolor (ecolor_good), ecolor (ecolor_normal));
|
||||
|
||||
setenv ("RC_SOFTLEVEL", newlevel, 1);
|
||||
rc_plugin_run (rc_hook_runlevel_start_in, newlevel);
|
||||
|
Loading…
Reference in New Issue
Block a user