summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-07-20 21:04:32 +0200
committerLennart Poettering <lennart@poettering.net>2010-07-20 21:04:32 +0200
commit2cc59dbfe08e92496b242aed3f2b3cf130beb203 (patch)
treec3c1bf8ad2677d05cf67122c8647764f7b4d03f9
parentd8d5ab981a328dd60a39cb495cbf99ca73d76f61 (diff)
downloadsystemd-2cc59dbfe08e92496b242aed3f2b3cf130beb203.tar.gz
systemctl: always disable color when output goes into a file
-rw-r--r--fixme1
-rw-r--r--src/main.c2
-rw-r--r--src/systemctl.c40
3 files changed, 31 insertions, 12 deletions
diff --git a/fixme b/fixme
index 3fd02eda74..3a17c629ca 100644
--- a/fixme
+++ b/fixme
@@ -39,7 +39,6 @@
* In command lines, support both "$FOO" and $FOO
* /etc must always take precedence even if we follow symlinks!
-* color aus bei stdout auf !tty
* vielleicht implizit immer auf syslog dependen?
diff --git a/src/main.c b/src/main.c
index aaddce86e0..964bb9cc32 100644
--- a/src/main.c
+++ b/src/main.c
@@ -836,7 +836,7 @@ int main(int argc, char *argv[]) {
return 1;
}
- log_show_color(true);
+ log_show_color(isatty(STDERR_FILENO) > 0);
log_show_location(false);
log_set_max_level(LOG_INFO);
diff --git a/src/systemctl.c b/src/systemctl.c
index bdfd0cdf87..d78294b6d8 100644
--- a/src/systemctl.c
+++ b/src/systemctl.c
@@ -86,6 +86,18 @@ static enum dot {
static bool private_bus = false;
+static const char *ansi_highlight(bool b) {
+ static int t = -1;
+
+ if (_unlikely_(t < 0))
+ t = isatty(STDOUT_FILENO) > 0;
+
+ if (!t)
+ return "";
+
+ return b ? ANSI_HIGHLIGHT_ON : ANSI_HIGHLIGHT_OFF;
+}
+
static bool error_is_no_service(DBusError *error) {
assert(error);
@@ -226,7 +238,7 @@ static int list_units(DBusConnection *bus, char **args, unsigned n) {
int a = 0, b = 0;
if (streq(active_state, "maintenance"))
- fputs(ANSI_HIGHLIGHT_ON, stdout);
+ fputs(ansi_highlight(true), stdout);
e = arg_full ? NULL : ellipsize(id, 45, 33);
printf("%-45s %-6s %-12s %-12s%n", e ? e : id, load_state, active_state, sub_state, &a);
@@ -245,7 +257,7 @@ static int list_units(DBusConnection *bus, char **args, unsigned n) {
}
if (streq(active_state, "maintenance"))
- fputs(ANSI_HIGHLIGHT_OFF, stdout);
+ fputs(ansi_highlight(false), stdout);
fputs("\n", stdout);
k++;
@@ -1422,18 +1434,25 @@ static void print_status_info(UnitStatusInfo *i) {
if (i->fragment_path)
printf("\t Loaded: %s (%s)\n", strna(i->load_state), i->fragment_path);
else if (streq_ptr(i->load_state, "failed"))
- printf("\t Loaded: " ANSI_HIGHLIGHT_ON "%s" ANSI_HIGHLIGHT_OFF "\n", strna(i->load_state));
+ printf("\t Loaded: %s%s%s\n",
+ ansi_highlight(true),
+ strna(i->load_state),
+ ansi_highlight(false));
else
printf("\t Loaded: %s\n", strna(i->load_state));
if (streq_ptr(i->active_state, "maintenance")) {
if (streq_ptr(i->active_state, i->sub_state))
- printf("\t Active: " ANSI_HIGHLIGHT_ON "%s" ANSI_HIGHLIGHT_OFF "\n",
- strna(i->active_state));
+ printf("\t Active: %s%s%s\n",
+ ansi_highlight(true),
+ strna(i->active_state),
+ ansi_highlight(false));
else
- printf("\t Active: " ANSI_HIGHLIGHT_ON "%s (%s)" ANSI_HIGHLIGHT_OFF "\n",
+ printf("\t Active: %s%s (%s)%s\n",
+ ansi_highlight(true),
strna(i->active_state),
- strna(i->sub_state));
+ strna(i->sub_state),
+ ansi_highlight(false));
} else {
if (streq_ptr(i->active_state, i->sub_state))
printf("\t Active: %s\n",
@@ -1501,8 +1520,7 @@ static void print_status_info(UnitStatusInfo *i) {
printf("status=%i", i->exit_status);
else
printf("signal=%s", signal_to_string(i->exit_status));
- printf(")");
- }
+ printf(")"); }
}
if (i->main_pid > 0 && i->control_pid > 0)
@@ -1540,7 +1558,9 @@ static void print_status_info(UnitStatusInfo *i) {
}
if (i->need_daemon_reload)
- printf("\n" ANSI_HIGHLIGHT_ON "Warning:" ANSI_HIGHLIGHT_OFF " Unit file changed on disk, 'systemctl %s daemon-reload' recommended.\n",
+ printf("\n%sWarning:%s Unit file changed on disk, 'systemctl %s daemon-reload' recommended.\n",
+ ansi_highlight(true),
+ ansi_highlight(false),
arg_session ? "--session" : "--system");
}