]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lib/colors: add function to return color from scheme
authorKarel Zak <kzak@redhat.com>
Wed, 13 Aug 2014 08:09:08 +0000 (10:09 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 13 Aug 2014 08:09:08 +0000 (10:09 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
include/colors.h
lib/colors.c

index e8ab3951a72701ce1e6803ff57c780db36e9fd71..97efc486acf8a1d4c0a7c9d6b4f210a9d881ec1c 100644 (file)
@@ -65,7 +65,9 @@ extern void colors_on(void);
 
 /* Set the color */
 extern void color_fenable(const char *seq, FILE *f);
+
 extern void color_scheme_fenable(const char *name, const char *dflt, FILE *f);
+extern const char *color_scheme_get_sequence(const char *name, const char *dflt);
 
 static inline void color_enable(const char *seq)
 {
index 8de1d2fbe27a77bbd9d03215e7f653cf792be0a8..7349063d017c2bfc3e25a363e47059cb1f9e280e 100644 (file)
@@ -65,6 +65,9 @@ struct ul_color_ctl {
        int             scores[__UL_COLORFILE_COUNT];   /* the best match */
 };
 
+/*
+ * Control struct, globally shared.
+ */
 static struct ul_color_ctl ul_colors;
 
 static void colors_free_schemes(struct ul_color_ctl *cc);
@@ -597,12 +600,15 @@ done:
        return rc;
 }
 
-/*
+/**
+ * colors_init:
+ * @mode: UL_COLORMODE_*
+ * @name: util argv[0]
+ *
  * Initialize private color control struct and initialize the colors
  * status. The color schemes are parsed on demand by colors_get_scheme().
  *
- * @mode: UL_COLORMODE_*
- * @name: util argv[0]
+ * Returns: >0 on success.
  */
 int colors_init(int mode, const char *name)
 {
@@ -676,19 +682,32 @@ void color_fenable(const char *seq, FILE *f)
 }
 
 /*
- * Enable color by logical @name
+ * Returns escape sequence by logical @name, if undefined then returns @dflt.
  */
-void color_scheme_fenable(const char *name, const char *dflt, FILE *f)
+const char *color_scheme_get_sequence(const char *name, const char *dflt)
 {
        struct ul_color_scheme *cs;
 
        if (ul_colors.disabled || !ul_colors.has_colors)
-               return;
+               return NULL;
 
        cs = colors_get_scheme(&ul_colors, name);
-       color_fenable(cs && cs->seq ? cs->seq : dflt, f);
+       return cs && cs->seq ? cs->seq : dflt;
+}
+
+/*
+ * Enable color by logical @name, if undefined enable @dflt.
+ */
+void color_scheme_fenable(const char *name, const char *dflt, FILE *f)
+{
+       const char *seq = color_scheme_get_sequence(name, dflt);
+
+       if (!seq)
+               return;
+       color_fenable(seq, f);
 }
 
+
 /*
  * Disable previously enabled color
  */