mirror of https://github.com/mirror/busybox.git
commiting patch from bug 71:
0000071: patch: implement "--color" option for ls coloring control1_1_stable
parent
fc2256a6ca
commit
156dc41cbc
|
@ -304,11 +304,23 @@ config CONFIG_FEATURE_LS_USERNAME
|
||||||
Allow ls to display username/groupname for files.
|
Allow ls to display username/groupname for files.
|
||||||
|
|
||||||
config CONFIG_FEATURE_LS_COLOR
|
config CONFIG_FEATURE_LS_COLOR
|
||||||
bool " Use color to identify file types"
|
bool " Allow use of color to identify file types"
|
||||||
default y
|
default y
|
||||||
depends on CONFIG_LS
|
depends on CONFIG_LS
|
||||||
help
|
help
|
||||||
Allow ls to use color when displaying files.
|
This enables the --color option to ls.
|
||||||
|
|
||||||
|
if CONFIG_FEATURE_LS_COLOR
|
||||||
|
config CONFIG_FEATURE_LS_COLOR_IS_DEFAULT
|
||||||
|
bool " Produce colored ls output by default"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Saying yes here will turn coloring on by default,
|
||||||
|
even if no "--color" option is given to the ls command.
|
||||||
|
This is not recommended, since the colors are not
|
||||||
|
configurable, and the output may not be legible on
|
||||||
|
many output screens.
|
||||||
|
endif
|
||||||
|
|
||||||
config CONFIG_MD5SUM
|
config CONFIG_MD5SUM
|
||||||
bool "md5sum"
|
bool "md5sum"
|
||||||
|
|
|
@ -60,6 +60,7 @@ enum {
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
|
#include <getopt.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/sysmacros.h> /* major() and minor() */
|
#include <sys/sysmacros.h> /* major() and minor() */
|
||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
|
@ -164,8 +165,18 @@ enum {
|
||||||
|
|
||||||
/* colored LS support by JaWi, janwillem.janssen@lxtreme.nl */
|
/* colored LS support by JaWi, janwillem.janssen@lxtreme.nl */
|
||||||
#ifdef CONFIG_FEATURE_LS_COLOR
|
#ifdef CONFIG_FEATURE_LS_COLOR
|
||||||
|
|
||||||
static int show_color = 0;
|
static int show_color = 0;
|
||||||
|
|
||||||
|
/* long option entry used only for --color, which has no short option
|
||||||
|
* equivalent. */
|
||||||
|
static int got_color_opt;
|
||||||
|
static struct option ls_color_opt[] =
|
||||||
|
{
|
||||||
|
{"color", optional_argument, &got_color_opt, 1},
|
||||||
|
{NULL, 0, NULL, 0}
|
||||||
|
};
|
||||||
|
|
||||||
#define COLOR(mode) ("\000\043\043\043\042\000\043\043"\
|
#define COLOR(mode) ("\000\043\043\043\042\000\043\043"\
|
||||||
"\000\000\044\000\043\000\000\040" [TYPEINDEX(mode)])
|
"\000\000\044\000\043\000\000\040" [TYPEINDEX(mode)])
|
||||||
#define ATTR(mode) ("\00\00\01\00\01\00\01\00"\
|
#define ATTR(mode) ("\00\00\01\00\01\00\01\00"\
|
||||||
|
@ -984,8 +995,7 @@ extern int ls_main(int argc, char **argv)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_FEATURE_LS_COLOR
|
#ifdef CONFIG_FEATURE_LS_COLOR
|
||||||
if (isatty(STDOUT_FILENO))
|
bb_applet_long_options = ls_color_opt;
|
||||||
show_color = 1;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* process options */
|
/* process options */
|
||||||
|
@ -1034,6 +1044,55 @@ extern int ls_main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_FEATURE_LS_COLOR
|
||||||
|
if (got_color_opt) {
|
||||||
|
/* there is no way for bb_getopt_ulflags() to
|
||||||
|
* return us the argument string for long options
|
||||||
|
* which don't have a short option equivalent.
|
||||||
|
* all we can find out is that the option was
|
||||||
|
* present, and we have to rescan to find the
|
||||||
|
* argument string.
|
||||||
|
*/
|
||||||
|
got_color_opt=0;
|
||||||
|
optind = 1;
|
||||||
|
while ((i = getopt_long (argc, argv, ls_options,
|
||||||
|
ls_color_opt, NULL)) >= 0) {
|
||||||
|
if (i != 0) continue;
|
||||||
|
if (got_color_opt) {
|
||||||
|
if (!optarg || strcmp("always", optarg) == 0)
|
||||||
|
show_color = 1;
|
||||||
|
else if (strcmp("never", optarg) == 0)
|
||||||
|
show_color = 0;
|
||||||
|
else if (strcmp("auto", optarg) == 0 &&
|
||||||
|
isatty(STDOUT_FILENO))
|
||||||
|
show_color = 1;
|
||||||
|
|
||||||
|
/* don't break; want to a) pick up repeated
|
||||||
|
* --color options, and b) leave optind
|
||||||
|
* set correctly when we're done.
|
||||||
|
*/
|
||||||
|
got_color_opt = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#if CONFIG_FEATURE_LS_COLOR_IS_DEFAULT
|
||||||
|
} else {
|
||||||
|
/* if no option set by user, then this config option
|
||||||
|
* forces "auto", which is what busybox 1.00 and previous
|
||||||
|
* did. however, provide one more "out" for users that
|
||||||
|
* don't want color: if LS_COLOR is set, and is null or
|
||||||
|
* "none" -- then default coloring to "off".
|
||||||
|
*/
|
||||||
|
char *p;
|
||||||
|
if ((p = getenv ("LS_COLORS")) != NULL &&
|
||||||
|
(*p == '\0' || (strcmp(p, "none") == 0))) {
|
||||||
|
show_color = 0;
|
||||||
|
} else if (isatty(STDOUT_FILENO)) {
|
||||||
|
show_color = 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* sort out which command line options take precedence */
|
/* sort out which command line options take precedence */
|
||||||
#ifdef CONFIG_FEATURE_LS_RECURSIVE
|
#ifdef CONFIG_FEATURE_LS_RECURSIVE
|
||||||
if (all_fmt & DISP_NOLIST)
|
if (all_fmt & DISP_NOLIST)
|
||||||
|
|
|
@ -1602,6 +1602,11 @@
|
||||||
#else
|
#else
|
||||||
# define USAGE_AUTOWIDTH(a)
|
# define USAGE_AUTOWIDTH(a)
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_FEATURE_LS_COLOR
|
||||||
|
#define USAGE_LS_COLOR(a) a
|
||||||
|
#else
|
||||||
|
#define USAGE_LS_COLOR(a)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define ls_trivial_usage \
|
#define ls_trivial_usage \
|
||||||
"[-1Aa" USAGE_LS_TIMESTAMPS("c") "Cd" USAGE_LS_TIMESTAMPS("e") USAGE_LS_FILETYPES("F") "iln" USAGE_LS_FILETYPES("p") USAGE_LS_FOLLOWLINKS("L") USAGE_LS_RECURSIVE("R") USAGE_LS_SORTFILES("rS") "s" USAGE_AUTOWIDTH("T") USAGE_LS_TIMESTAMPS("tu") USAGE_LS_SORTFILES("v") USAGE_AUTOWIDTH("w") "x" USAGE_LS_SORTFILES("X") USAGE_HUMAN_READABLE("h") USAGE_NOT_HUMAN_READABLE("") "k" USAGE_SELINUX("K") "] [filenames...]"
|
"[-1Aa" USAGE_LS_TIMESTAMPS("c") "Cd" USAGE_LS_TIMESTAMPS("e") USAGE_LS_FILETYPES("F") "iln" USAGE_LS_FILETYPES("p") USAGE_LS_FOLLOWLINKS("L") USAGE_LS_RECURSIVE("R") USAGE_LS_SORTFILES("rS") "s" USAGE_AUTOWIDTH("T") USAGE_LS_TIMESTAMPS("tu") USAGE_LS_SORTFILES("v") USAGE_AUTOWIDTH("w") "x" USAGE_LS_SORTFILES("X") USAGE_HUMAN_READABLE("h") USAGE_NOT_HUMAN_READABLE("") "k" USAGE_SELINUX("K") "] [filenames...]"
|
||||||
|
@ -1613,6 +1618,7 @@
|
||||||
"\t-a\tdo not hide entries starting with .\n" \
|
"\t-a\tdo not hide entries starting with .\n" \
|
||||||
"\t-C\tlist entries by columns\n" \
|
"\t-C\tlist entries by columns\n" \
|
||||||
USAGE_LS_TIMESTAMPS("\t-c\twith -l: show ctime\n") \
|
USAGE_LS_TIMESTAMPS("\t-c\twith -l: show ctime\n") \
|
||||||
|
USAGE_LS_COLOR("\t--color[={always,never,auto}]\tto control coloring\n") \
|
||||||
"\t-d\tlist directory entries instead of contents\n" \
|
"\t-d\tlist directory entries instead of contents\n" \
|
||||||
USAGE_LS_TIMESTAMPS("\t-e\tlist both full date and full time\n") \
|
USAGE_LS_TIMESTAMPS("\t-e\tlist both full date and full time\n") \
|
||||||
USAGE_LS_FILETYPES("\t-F\tappend indicator (one of */=@|) to entries\n") \
|
USAGE_LS_FILETYPES("\t-F\tappend indicator (one of */=@|) to entries\n") \
|
||||||
|
|
Loading…
Reference in New Issue