diff options
author | hubertf <hubertf@pkgsrc.org> | 1997-10-11 21:53:59 +0000 |
---|---|---|
committer | hubertf <hubertf@pkgsrc.org> | 1997-10-11 21:53:59 +0000 |
commit | 240eed442d1f97f7d7dd9430673499ef25dd1f36 (patch) | |
tree | cd1e0be6347cb17aeb9201b0ecc45b0286c98b53 /misc/colorls/patches | |
parent | 652e2956ee0721786181dcf43d7559a17c9b93f9 (diff) | |
download | pkgsrc-240eed442d1f97f7d7dd9430673499ef25dd1f36.tar.gz |
Import as of 09/25/97
Diffstat (limited to 'misc/colorls/patches')
-rw-r--r-- | misc/colorls/patches/patch-aa | 381 |
1 files changed, 381 insertions, 0 deletions
diff --git a/misc/colorls/patches/patch-aa b/misc/colorls/patches/patch-aa new file mode 100644 index 00000000000..75053363cfd --- /dev/null +++ b/misc/colorls/patches/patch-aa @@ -0,0 +1,381 @@ +--- ./ls.c.org Wed Mar 8 02:14:11 1995 ++++ ./ls.c Wed Mar 8 02:17:10 1995 +@@ -93,6 +93,7 @@ + int f_dirname; /* if precede with directory name */ + int f_timesort; /* sort by time vice name */ + int f_type; /* add type character for non-regular files */ ++int f_color; /* add type in color for non-regular files */ + #ifndef BSD4_4_LITE + int f_whiteout; /* show whiteout entries */ + #endif +@@ -135,9 +136,9 @@ + + fts_options = FTS_PHYSICAL; + #ifdef BSD4_4_LITE +- while ((ch = getopt(argc, argv, "1ACFLRTacdfgikloqrstu")) != EOF) { ++ while ((ch = getopt(argc, argv, "1ACFGLRTacdfgikloqrstu")) != EOF) { + #else +- while ((ch = getopt(argc, argv, "1ACFLRTWacdfgikloqrstu")) != EOF) { ++ while ((ch = getopt(argc, argv, "1ACFGLRTWacdfgikloqrstu")) != EOF) { + #endif + switch (ch) { + /* +@@ -152,6 +153,9 @@ + case 'F': + f_type = 1; + break; ++ case 'G': ++ f_color = 1; ++ break; + case 'L': + fts_options &= ~FTS_PHYSICAL; + fts_options |= FTS_LOGICAL; +@@ -207,18 +211,21 @@ + argc -= optind; + argv += optind; + ++ parsecolors(getenv("LSCOLORS")); ++ + /* + * If not -F, -i, -l, -s or -t options, don't require stat + * information. + */ +- if (!f_inode && !f_longform && !f_size && !f_timesort && !f_type) ++ if (!f_inode && !f_longform && !f_size && !f_timesort && !f_type ++ && !f_color) + fts_options |= FTS_NOSTAT; + + /* + * If not -F, -d or -l options, follow any symbolic links listed on + * the command line. + */ +- if (!f_longform && !f_listdir && !f_type) ++ if (!f_longform && !f_listdir && !f_type && !f_color) + fts_options |= FTS_COMFOLLOW; + + #ifndef BSD4_4_LITE +--- ./ls.h.org Wed Mar 8 02:14:11 1995 ++++ ./ls.h Wed Mar 8 02:17:11 1995 +@@ -49,6 +49,7 @@ + extern int f_size; /* list size in short listing */ + extern int f_statustime; /* use time of last mode change */ + extern int f_type; /* add type character for non-regular files */ ++extern int f_color; /* add type in color for non-regular files */ + + typedef struct { + FTSENT *list; +--- ./print.c.org Wed Mar 8 02:14:11 1995 ++++ ./print.c Wed Mar 8 02:17:11 1995 +@@ -66,6 +66,26 @@ + + #define IS_NOPRINT(p) ((p)->fts_number == NO_PRINT) + ++/* Most of these are taken from <sys/stat.h> */ ++typedef enum Colors { ++ C_DIR, /* directory */ ++ C_LNK, /* symbolic link */ ++ C_SOCK, /* socket */ ++ C_FIFO, /* pipe */ ++ C_EXEC, /* executable */ ++ C_BLK, /* block special */ ++ C_CHR, /* character special */ ++ C_SUID, /* setuid executable */ ++ C_SGID, /* setgid executable */ ++ C_WSDIR, /* directory writeble to others, with sticky bit */ ++ C_WDIR, /* directory writeble to others, without sticky bit */ ++ C_NUMCOLORS /* just a place-holder */ ++} Colors ; ++ ++char *defcolors = "4x5x2x3x1x464301060203"; ++ ++static int colors[C_NUMCOLORS][2]; ++ + void + printscol(dp) + DISPLAY *dp; +@@ -122,10 +142,14 @@ + printtime(sp->st_ctime); + else + printtime(sp->st_mtime); ++ if (f_color) ++ (void)colortype(sp->st_mode); + (void)printf("%s", p->fts_name); + if (f_type) + (void)printtype(sp->st_mode); +- if (S_ISLNK(sp->st_mode)) ++ if (f_color) ++ (void)printf("\033[m"); ++ if (S_ISLNK(sp->st_mode)) + printlink(p); + (void)putchar('\n'); + } +@@ -190,10 +214,22 @@ + dp->s_block); + if ((base += numrows) >= num) + break; +- while ((cnt = ((chcnt + TAB) & ~(TAB - 1))) <= endcol){ +- (void)putchar('\t'); +- chcnt = cnt; +- } ++ ++ /* ++ * some terminals get confused if we mix tabs ++ * with color sequences ++ */ ++ if (f_color) ++ while ((cnt = (chcnt + 1)) <= endcol) { ++ (void)putchar(' '); ++ chcnt = cnt; ++ } ++ else ++ while ((cnt = ((chcnt + TAB) & ~(TAB - 1))) ++ <= endcol) { ++ (void)putchar('\t'); ++ chcnt = cnt; ++ } + endcol += colwidth; + } + (void)putchar('\n'); +@@ -217,9 +241,13 @@ + if (f_size) + chcnt += printf("%*qd ", + (int)sizefield, howmany(sp->st_blocks, blocksize)); ++ if (f_color) ++ (void)colortype(sp->st_mode); + chcnt += printf("%s", p->fts_name); + if (f_type) + chcnt += printtype(sp->st_mode); ++ if (f_color) ++ printf("\033[m"); + return (chcnt); + } + +@@ -274,6 +302,95 @@ + return (0); + } + ++void ++printcolor(c) ++ Colors c; ++{ ++ printf("\033["); ++ if (colors[c][0] != -1) { ++ printf("3%d", colors[c][0]); ++ if (colors[c][1] != -1) ++ printf(";"); ++ } ++ if (colors[c][1] != -1) ++ printf("4%d", colors[c][1]); ++ printf("m"); ++} ++ ++colortype(mode) ++ mode_t mode; ++{ ++ switch(mode & S_IFMT) { ++ case S_IFDIR: ++ if (mode & S_IWOTH) ++ if (mode & S_ISTXT) ++ printcolor(C_WSDIR); ++ else ++ printcolor(C_WDIR); ++ else ++ printcolor(C_DIR); ++ return(1); ++ case S_IFLNK: ++ printcolor(C_LNK); ++ return(1); ++ case S_IFSOCK: ++ printcolor(C_SOCK); ++ return(1); ++ case S_IFIFO: ++ printcolor(C_FIFO); ++ return(1); ++ case S_IFBLK: ++ printcolor(C_BLK); ++ return(1); ++ case S_IFCHR: ++ printcolor(C_CHR); ++ return(1); ++ } ++ if (mode & (S_IXUSR | S_IXGRP | S_IXOTH)) { ++ if (mode & S_ISUID) ++ printcolor(C_SUID); ++ else if (mode & S_ISGID) ++ printcolor(C_SGID); ++ else ++ printcolor(C_EXEC); ++ return(1); ++ } ++ return(0); ++} ++ ++void ++parsecolors(cs) ++char *cs; ++{ ++ int i, j, len; ++ char c[2]; ++ if (cs == NULL) cs = ""; /* LSCOLORS not set */ ++ len = strlen(cs); ++ for (i = 0 ; i < C_NUMCOLORS ; i++) { ++ if (len <= 2*i) { ++ c[0] = defcolors[2*i]; ++ c[1] = defcolors[2*i+1]; ++ } ++ else { ++ c[0] = cs[2*i]; ++ c[1] = cs[2*i+1]; ++ } ++ for (j = 0 ; j < 2 ; j++) { ++ if ((c[j] < '0' || c[j] > '7') && ++ tolower(c[j]) != 'x') { ++ fprintf(stderr, ++ "error: invalid character '%c' in LSCOLORS env var\n", ++ c[j]); ++ c[j] = defcolors[2*i+j]; ++ } ++ if (c[j] == 'x') ++ colors[i][j] = -1; ++ else ++ colors[i][j] = c[j]-'0'; ++ } ++ } ++} ++ + static void + printlink(p) + FTSENT *p; +--- ./Makefile.org Wed Mar 8 02:14:10 1995 ++++ ./Makefile Wed Mar 8 02:20:01 1995 +@@ -1,7 +1,9 @@ + # @(#)Makefile 8.1 (Berkeley) 6/2/93 + # Makefile,v 1.2 1994/09/24 02:55:51 davidg Exp + +-PROG= ls ++PROG= colorls + SRCS= cmp.c stat_flags.c ls.c print.c util.c ++BINDIR= ${PREFIX}/bin ++MANDIR= ${PREFIX}/man/man + + .include <bsd.prog.mk> +--- ./colorls.1.org Wed Mar 8 02:14:10 1995 ++++ ./colorls.1 Wed Mar 8 02:17:10 1995 +@@ -36,16 +36,24 @@ + .\" ls.1,v 1.3 1994/09/24 02:55:53 davidg Exp + .\" + .Dd July 29, 1994 +-.Dt LS 1 ++.Dt COLORLS 1 + .Os + .Sh NAME +-.Nm ls +-.Nd list directory contents ++.Nm colorls ++.Nd list directory contents in color + .Sh SYNOPSIS +-.Nm ls +-.Op Fl ACFLRTWacdfiloqrstu1 ++.Nm colorls ++.Op Fl ACFGLRTWacdfiloqrstu1 + .Op Ar file ... + .Sh DESCRIPTION ++(Note: This man page describes the color version of the program. To ++minimize the differences from the original, the program is referred to ++as ++.Nm ls ++in this manual. The new option ++.Fl G ++is for color display.) ++.Pp + For each operand that names a + .Ar file + of a type other than +@@ -87,6 +95,12 @@ + a percent sign (%) after each whiteout, + and a vertical bar (|) after each that is a + .Tn FIFO . ++.It Fl G ++Use ANSI color sequences to distinguish file types. (See ++.Ev LSCOLORS ++below.) In addition to those mentioned above in ++.Fl F , ++some extra attributes (setuid bit set, etc.) are also displayed. + .It Fl L + If argument is a symbolic link, list the file or directory the link references + rather than the link itself. +@@ -314,6 +328,74 @@ + See + .Xr environ 7 + for more information. ++.It LSCOLORS ++The value of this variable describes what color to use for which ++attribute when the color output ++.Pq Fl G ++is specified. This string is a concatenation of pairs of the format ++.Sy fb , ++where ++.Sy f ++is the foreground color and ++.Sy b ++is the background color. ++.Pp ++The color designators are as follows: ++.Pp ++.Bl -tag -width 4n -offset indent -compact ++.It Sy 0 ++black ++.It Sy 1 ++red ++.It Sy 2 ++green ++.It Sy 3 ++yellow ++.It Sy 4 ++blue ++.It Sy 5 ++magenta ++.It Sy 6 ++cyan ++.It Sy 7 ++white ++.It Sy x ++default foreground or background ++.El ++.Pp ++(Note: the above are standard ANSI colors. The actual display may ++differ depending on the color capabilities of your terminal.) ++.Pp ++The order of the attributes are as follows: ++.Pp ++.Bl -enum -offset indent -compact ++.It ++directory ++.It ++symbolic link ++.It ++socket ++.It ++pipe ++.It ++executable ++.It ++block special ++.It ++character special ++.It ++executable with setuid bit set ++.It ++executable with setgid bit set ++.It ++directory writable to others, with sticky bit ++.It ++directory writable to others, without sticky bit ++.El ++.Pp ++The default is "4x5x2x3x1x464301060203", i.e., blue foreground and ++default background for regular directories, black foreground and red ++background for setuid executables, etc. + .El + .Sh COMPATIBILITY + The group field is now automatically included in the long listing for |