diff options
author | Karel Zak | 2013-09-02 10:54:30 +0200 |
---|---|---|
committer | Karel Zak | 2013-09-16 16:47:09 +0200 |
commit | 80a1712f546eb0669c9e4130a32c78cdeeb5fdab (patch) | |
tree | f62db3867f5e3aa18b2c36e2f7880e50569c513b /fdisks | |
parent | fdisk: improve info output (diff) | |
download | kernel-qcow2-util-linux-80a1712f546eb0669c9e4130a32c78cdeeb5fdab.tar.gz kernel-qcow2-util-linux-80a1712f546eb0669c9e4130a32c78cdeeb5fdab.tar.xz kernel-qcow2-util-linux-80a1712f546eb0669c9e4130a32c78cdeeb5fdab.zip |
fdisk: add -L to colorize output
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'fdisks')
-rw-r--r-- | fdisks/fdisk-ask.c | 28 | ||||
-rw-r--r-- | fdisks/fdisk-menu.c | 6 | ||||
-rw-r--r-- | fdisks/fdisk.8 | 4 | ||||
-rw-r--r-- | fdisks/fdisk.c | 20 | ||||
-rw-r--r-- | fdisks/fdisk.h | 2 |
5 files changed, 51 insertions, 9 deletions
diff --git a/fdisks/fdisk-ask.c b/fdisks/fdisk-ask.c index 6c10a48c3..2d689e558 100644 --- a/fdisks/fdisk-ask.c +++ b/fdisks/fdisk-ask.c @@ -192,11 +192,31 @@ static int ask_offset(struct fdisk_context *cxt, return -1; } -static void fputs_info(const char *msg, FILE *out) +static void fputs_info(const char *msg, FILE *out, char *buf, size_t bufsz) { if (info_count == 1) fputc('\n', out); + + if (msg && colors_wanted()) { + char *sep = _(": "); + char *p = strstr(msg, sep); + + if (p) { + size_t sz = strlen(sep); + + strncpy(buf, msg, bufsz); + buf[p - msg + sz] = '\0'; + + color_enable(UL_COLOR_BROWN); + fputs(buf, out); + color_disable(); + fputs(p + sz, out); + goto done; + } + } + fputs(msg, out); +done: fputc('\n', out); } @@ -219,16 +239,20 @@ int ask_callback(struct fdisk_context *cxt, struct fdisk_ask *ask, return ask_offset(cxt, ask, buf, sizeof(buf)); case FDISK_ASKTYPE_INFO: info_count++; - fputs_info(fdisk_ask_print_get_mesg(ask), stdout); + fputs_info(fdisk_ask_print_get_mesg(ask), stdout, buf, sizeof(buf)); break; case FDISK_ASKTYPE_WARNX: + color_fenable(UL_COLOR_RED, stderr); fputs(fdisk_ask_print_get_mesg(ask), stderr); + color_fdisable(stderr); fputc('\n', stderr); break; case FDISK_ASKTYPE_WARN: + color_fenable(UL_COLOR_RED, stderr); fputs(fdisk_ask_print_get_mesg(ask), stderr); errno = fdisk_ask_print_get_errno(ask); fprintf(stderr, ": %m\n"); + color_fdisable(stderr); break; case FDISK_ASKTYPE_YESNO: fputc('\n', stdout); diff --git a/fdisks/fdisk-menu.c b/fdisks/fdisk-menu.c index 3a5a57434..0ead2e477 100644 --- a/fdisks/fdisk-menu.c +++ b/fdisks/fdisk-menu.c @@ -326,9 +326,11 @@ int print_fdisk_menu(struct fdisk_context *cxt) while ((e = next_menu_entry(cxt, &mc))) { if (IS_MENU_HID(e)) continue; /* hidden entry */ - if (IS_MENU_SEP(e)) + if (IS_MENU_SEP(e)) { + color_enable(UL_COLOR_BOLD); printf("\n %s\n", _(e->title)); - else + color_disable(); + } else printf(" %c %s\n", e->key, _(e->title)); } fputc('\n', stdout); diff --git a/fdisks/fdisk.8 b/fdisks/fdisk.8 index 439f0f62f..a75558476 100644 --- a/fdisks/fdisk.8 +++ b/fdisks/fdisk.8 @@ -218,6 +218,10 @@ A reasonable value is 63. This option is DEPRECATED. .BI \-h Display a help text and exit. .TP +.BI \-L[=\fIwhen\fR] +Colorize output in interactive mode. The optional argument \fIwhen\fP can +be \fBauto\fR, \fBnever\fR or \fBalways\fR. The default is \fBauto\fR. +.TP .B \-l List the partition tables for the specified devices and then exit. If no devices are given, those mentioned in diff --git a/fdisks/fdisk.c b/fdisks/fdisk.c index 05f4ccb58..ec0c5447f 100644 --- a/fdisks/fdisk.c +++ b/fdisks/fdisk.c @@ -60,6 +60,8 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out) fputs(_(" -b <size> sector size (512, 1024, 2048 or 4096)\n"), out); fputs(_(" -c[=<mode>] compatible mode: 'dos' or 'nondos' (default)\n"), out); fputs(_(" -h print this help text\n"), out); + fputs(_(" -c[=<mode>] compatible mode: 'dos' or 'nondos' (default)\n"), out); + fputs(_(" -L[=<when>] colorize output (auto, always or never)\n"), out); fputs(_(" -u[=<unit>] display units: 'cylinders' or 'sectors' (default)\n"), out); fputs(_(" -v print program version\n"), out); fputs(_(" -C <number> specify the number of cylinders\n"), out); @@ -341,6 +343,7 @@ enum { int main(int argc, char **argv) { int i, c, act = ACT_FDISK; + int colormode = UL_COLORMODE_AUTO; struct fdisk_context *cxt; setlocale(LC_ALL, ""); @@ -355,7 +358,7 @@ int main(int argc, char **argv) fdisk_context_set_ask(cxt, ask_callback, NULL); - while ((c = getopt(argc, argv, "b:c::C:hH:lsS:u::vV")) != -1) { + while ((c = getopt(argc, argv, "b:c::C:hH:lL::sS:u::vV")) != -1) { switch (c) { case 'b': { @@ -402,6 +405,11 @@ int main(int argc, char **argv) case 'l': act = ACT_LIST; break; + case 'L': + if (optarg) + colormode = colormode_or_err(optarg, + _("unsupported color mode")); + break; case 's': act = ACT_SHOWSIZE; break; @@ -454,13 +462,17 @@ int main(int argc, char **argv) if (argc-optind != 1) usage(stderr); + colors_init(colormode); + if (fdisk_context_assign_device(cxt, argv[optind], 0) != 0) err(EXIT_FAILURE, _("cannot open %s"), argv[optind]); /* Here starts interactive mode, use fdisk_{warn,info,..} functions */ - fdisk_info(cxt, _("Welcome to fdisk (%s).\n\n" - "Changes will remain in memory only, until you decide to write them.\n" - "Be careful before using the write command.\n"), PACKAGE_STRING); + color_enable(UL_COLOR_GREEN); + fdisk_info(cxt, _("Welcome to fdisk (%s).\n"), PACKAGE_STRING); + color_disable(); + fdisk_info(cxt, _("Changes will remain in memory only, until you decide to write them.\n" + "Be careful before using the write command.\n")); fflush(stdout); if (!fdisk_dev_has_disklabel(cxt)) { diff --git a/fdisks/fdisk.h b/fdisks/fdisk.h index a416f2c25..0f427e29e 100644 --- a/fdisks/fdisk.h +++ b/fdisks/fdisk.h @@ -11,7 +11,7 @@ */ #include "fdiskP.h" #include "blkdev.h" - +#include "colors.h" extern void toggle_units(struct fdisk_context *cxt); |