Re: [PATCH BlueZ] monitor: Add option to force output color

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Luiz/Marcel,

Friendly ping to review this patch. Thanks!


On Tue, Mar 16, 2021 at 3:17 PM Sonny Sasaka <sonnysasaka@xxxxxxxxxxxx> wrote:
>
> Sometimes we want to force output color even when stdout is not a
> terminal, for example when piping the output to a filter script and then
> piping it further to a pager which can display colors.
>
> This patch provides a general option to force whether color is on or off
> (always and never), or leave btmon to decide (auto).
>
> Reviewed-by: Daniel Winkler <danielwinkler@xxxxxxxxxx>
>
> ---
>  monitor/display.c | 12 +++++++++++-
>  monitor/display.h |  3 +++
>  monitor/main.c    | 17 ++++++++++++++++-
>  3 files changed, 30 insertions(+), 2 deletions(-)
>
> diff --git a/monitor/display.c b/monitor/display.c
> index 4e5693b04..d61a79a38 100644
> --- a/monitor/display.c
> +++ b/monitor/display.c
> @@ -29,12 +29,22 @@
>
>  static pid_t pager_pid = 0;
>  int default_pager_num_columns = FALLBACK_TERMINAL_WIDTH;
> +enum monitor_color setting_monitor_color = COLOR_AUTO;
> +
> +void set_monitor_color(enum monitor_color color)
> +{
> +       setting_monitor_color = color;
> +}
>
>  bool use_color(void)
>  {
>         static int cached_use_color = -1;
>
> -       if (__builtin_expect(!!(cached_use_color < 0), 0))
> +       if (setting_monitor_color == COLOR_ALWAYS)
> +               cached_use_color = 1;
> +       else if (setting_monitor_color == COLOR_NEVER)
> +               cached_use_color = 0;
> +       else if (__builtin_expect(!!(cached_use_color < 0), 0))
>                 cached_use_color = isatty(STDOUT_FILENO) > 0 || pager_pid > 0;
>
>         return cached_use_color;
> diff --git a/monitor/display.h b/monitor/display.h
> index cba39ec7f..be5739833 100644
> --- a/monitor/display.h
> +++ b/monitor/display.h
> @@ -14,6 +14,9 @@
>
>  bool use_color(void);
>
> +enum monitor_color { COLOR_AUTO, COLOR_ALWAYS, COLOR_NEVER };
> +void set_monitor_color(enum monitor_color);
> +
>  #define COLOR_OFF      "\x1B[0m"
>  #define COLOR_BLACK    "\x1B[0;30m"
>  #define COLOR_RED      "\x1B[0;31m"
> diff --git a/monitor/main.c b/monitor/main.c
> index 969c88103..3ec3a5f08 100644
> --- a/monitor/main.c
> +++ b/monitor/main.c
> @@ -69,6 +69,7 @@ static void usage(void)
>                 "\t-R  --rtt [<address>],[<area>],[<name>]\n"
>                 "\t                       RTT control block parameters\n"
>                 "\t-C, --columns [width]  Output width if not a terminal\n"
> +               "\t-c, --color [mode]     Output color: auto/always/never\n"
>                 "\t-h, --help             Show help options\n");
>  }
>
> @@ -93,6 +94,7 @@ static const struct option main_options[] = {
>         { "jlink",     required_argument, NULL, 'J' },
>         { "rtt",       required_argument, NULL, 'R' },
>         { "columns",   required_argument, NULL, 'C' },
> +       { "color",     required_argument, NULL, 'c' },
>         { "todo",      no_argument,       NULL, '#' },
>         { "version",   no_argument,       NULL, 'v' },
>         { "help",      no_argument,       NULL, 'h' },
> @@ -124,7 +126,7 @@ int main(int argc, char *argv[])
>                 struct sockaddr_un addr;
>
>                 opt = getopt_long(argc, argv,
> -                                       "r:w:a:s:p:i:d:B:V:MNtTSAE:PJ:R:C:vh",
> +                                       "r:w:a:s:p:i:d:B:V:MNtTSAE:PJ:R:C:c:vh",
>                                         main_options, NULL);
>                 if (opt < 0)
>                         break;
> @@ -211,6 +213,19 @@ int main(int argc, char *argv[])
>                 case 'C':
>                         set_default_pager_num_columns(atoi(optarg));
>                         break;
> +               case 'c':
> +                       if (strcmp("always", optarg) == 0)
> +                               set_monitor_color(COLOR_ALWAYS);
> +                       else if (strcmp("never", optarg) == 0)
> +                               set_monitor_color(COLOR_NEVER);
> +                       else if (strcmp("auto", optarg) == 0)
> +                               set_monitor_color(COLOR_AUTO);
> +                       else {
> +                               fprintf(stderr, "Color option must be one of "
> +                                               "auto/always/never\n");
> +                               return EXIT_FAILURE;
> +                       }
> +                       break;
>                 case '#':
>                         packet_todo();
>                         lmp_todo();
> --
> 2.29.2
>



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux