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);
}
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);
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);
.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
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);
int main(int argc, char **argv)
{
int i, c, act = ACT_FDISK;
+ int colormode = UL_COLORMODE_AUTO;
struct fdisk_context *cxt;
setlocale(LC_ALL, "");
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':
{
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;
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)) {
*/
#include "fdiskP.h"
#include "blkdev.h"
-
+#include "colors.h"
extern void toggle_units(struct fdisk_context *cxt);
/* Initialize the global variable OUT_IS_TERM */
extern int colors_init(int mode);
+/* Returns 1 or 0 */
+extern int colors_wanted(void);
+
/* Set the color to CLR_SCHEME */
-extern void color_enable(const char *clr_scheme);
+extern void color_fenable(const char *clr_scheme, FILE *f);
+
+static inline void color_enable(const char *clr_scheme)
+{
+ color_fenable(clr_scheme, stdout);
+}
/* Reset colors to default */
-extern void color_disable(void);
+extern void color_fdisable(FILE *f);
+
+static inline void color_disable(void)
+{
+ color_fdisable(stdout);
+}
+
+
#endif /* UTIL_LINUX_COLORS_H */
return ul_color_term_ok;
}
-void color_enable(const char *color_scheme)
+int colors_wanted(void)
+{
+ return ul_color_term_ok;
+}
+
+void color_fenable(const char *color_scheme, FILE *f)
{
if (ul_color_term_ok && color_scheme)
- fputs(color_scheme, stdout);
+ fputs(color_scheme, f);
}
-void color_disable(void)
+void color_fdisable(FILE *f)
{
if (ul_color_term_ok)
- fputs(UL_COLOR_RESET, stdout);
+ fputs(UL_COLOR_RESET, f);
}
int colormode_from_string(const char *str)