From 240eed442d1f97f7d7dd9430673499ef25dd1f36 Mon Sep 17 00:00:00 2001 From: hubertf Date: Sat, 11 Oct 1997 21:53:59 +0000 Subject: Import as of 09/25/97 --- misc/colorls/Makefile | 22 +++ misc/colorls/files/md5 | 1 + misc/colorls/patches/patch-aa | 381 ++++++++++++++++++++++++++++++++++++++++++ misc/colorls/pkg/COMMENT | 1 + misc/colorls/pkg/DESCR | 14 ++ misc/colorls/pkg/PLIST | 2 + 6 files changed, 421 insertions(+) create mode 100644 misc/colorls/Makefile create mode 100644 misc/colorls/files/md5 create mode 100644 misc/colorls/patches/patch-aa create mode 100644 misc/colorls/pkg/COMMENT create mode 100644 misc/colorls/pkg/DESCR create mode 100644 misc/colorls/pkg/PLIST (limited to 'misc/colorls') diff --git a/misc/colorls/Makefile b/misc/colorls/Makefile new file mode 100644 index 00000000000..f40ab440551 --- /dev/null +++ b/misc/colorls/Makefile @@ -0,0 +1,22 @@ +# New ports collection makefile for: colorls +# Version required: FreeBSD-current (around January '97) +# Date created: 8 March 1995 +# Whom: Satoshi Asami +# +# $Id: Makefile,v 1.1.1.1 1997/10/11 21:54:06 hubertf Exp $ +# + +DISTNAME= colorls +PKGNAME= colorls-2.2 +CATEGORIES= misc +MASTER_SITES= ${MASTER_SITE_LOCAL} +DISTFILES= ls.tar.gz + +MAINTAINER= asami@FreeBSD.ORG + +WRKSRC= ${WRKDIR}/ls + +pre-patch: + ${CP} ${WRKSRC}/ls.1 ${WRKSRC}/colorls.1 + +.include diff --git a/misc/colorls/files/md5 b/misc/colorls/files/md5 new file mode 100644 index 00000000000..1a8753ed0cf --- /dev/null +++ b/misc/colorls/files/md5 @@ -0,0 +1 @@ +MD5 (ls.tar.gz) = 9912034525558b016c7700d939807e76 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 */ ++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 +--- ./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 diff --git a/misc/colorls/pkg/COMMENT b/misc/colorls/pkg/COMMENT new file mode 100644 index 00000000000..f3f09f0e4f6 --- /dev/null +++ b/misc/colorls/pkg/COMMENT @@ -0,0 +1 @@ +An ls that can use color to display file attributes diff --git a/misc/colorls/pkg/DESCR b/misc/colorls/pkg/DESCR new file mode 100644 index 00000000000..7de79189ef0 --- /dev/null +++ b/misc/colorls/pkg/DESCR @@ -0,0 +1,14 @@ +This is a simple hack to the FreeBSD /bin/ls to use ANSI sequences to +display file attributes in color. There is a -G flag (somewhat +similar to the -F flag). Take a look at the man page for details. + +The program is called "colorls" and installs itself in /usr/local/bin. +The file patches/patch-aa is the diffs from the 3.0-current (as of +1997/01/01) /usr/src/bin/ls directory. + +Standard xterm prior to XFree86 3.1.2B doesn't know about colors, so +you should use update your XFree86 or use kterm (available from the ports +collection). + +Satoshi Asami +asami@cs.berkeley.edu diff --git a/misc/colorls/pkg/PLIST b/misc/colorls/pkg/PLIST new file mode 100644 index 00000000000..19d26842bde --- /dev/null +++ b/misc/colorls/pkg/PLIST @@ -0,0 +1,2 @@ +bin/colorls +man/man1/colorls.1.gz -- cgit v1.2.3