all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Trent W. Buck" <trentbuck@gmail.com>
To: Juri Linkov <juri@linkov.net>
Cc: Lars Ingebrigtsen <larsi@gnus.org>, 24547@debbugs.gnu.org
Subject: bug#24547: 24.4; dired should colour in sockets and pipes
Date: Mon, 29 Jul 2019 00:53:56 +1000	[thread overview]
Message-ID: <20190728145350.GA29513@goll.lan> (raw)
In-Reply-To: <875znnxhas.fsf@mail.linkov.net>

TL;DR: explanation of dircolors(1) and terminfo(5).

Juri Linkov wrote:
> >> With GNU ls --color in a terminal, different colors are used for
> >>
> >>     regular files,
> >>     directories,
> >>     symlinks,
> >>     sockets,
> >>     pipes,
> >>     (other stuff - dircolors?)
> >>
> >> In dired, the first three get different faces,
> >> but sockets and pipes look like regular files.
> >>
> >> I think it's probably easy to fix sockets and pipes,
> >> because the first character is "s" or "p",
> >> at least in GNU ls output.
> >
> > Sounds reasonable.  I've now done this in Emacs 27, but I've used just a
> > single face for both sockets and pipes.

Thanks! :-)

> What are the remaining special file types possible in ls output?
> 
> For example, in /run I see only "s" and "p" files.  But in /dev there are
> also "b" and "c".  These "block" and "character" device files could be
> highlighted using the same face with sockets and pipes.

As I hinted earlier, GNU ls's --color output is governed by the dircolors program.
"dircolors --print-database" gives a bunch of stuff.  The part you asked about is:

    DIR 01;34 # directory
    LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
     # numerical value, the color is as for the file pointed to.)
    MULTIHARDLINK 00 # regular file with more than one link
    FIFO 40;33 # pipe
    SOCK 01;35 # socket
    DOOR 01;35 # door
    BLK 40;33;01 # block device driver
    CHR 40;33;01 # character device driver
    ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
    MISSING 00 # ... and the files they point to

Note that GNU ls/dircolors also uses different colors for different
kinds of regular files e.g. "video", "audio", "pictures", "compressed
files", "executables".  This is done by filename extension rather than
MIME type, because GNU/* filesystems generally don't store MIME type
metadata, and running libmagic on every ls would be slow :-(

Those codes are SGR escape sequences, also called "ANSI color".
See also "man 5 terminfo".

01 above is "tput bold" (I think).
4x above is "tput setab x" (set background color).
3x above is "tput setaf x" (set foreground color).
There are 8 colors (0 through 7), which you can see at the top of
"emacs -nw -f list-colors-display":

    black red green yellow blue magenta cyan white

The "bright" variants are selected automatically when bold is also set
(if the terminal supports that).

You might also want to consider what "man 2 stat" has to say, viz:

           switch (sb.st_mode & S_IFMT) {
           case S_IFBLK:  printf("block device\n");            break;
           case S_IFCHR:  printf("character device\n");        break;
           case S_IFDIR:  printf("directory\n");               break;
           case S_IFIFO:  printf("FIFO/pipe\n");               break;
           case S_IFLNK:  printf("symlink\n");                 break;
           case S_IFREG:  printf("regular file\n");            break;
           case S_IFSOCK: printf("socket\n");                  break;
           default:       printf("unknown?\n");                break;
           }

dired (as at 26.1) doesn't seem to have faces for file types (or MIME
types), except for dired-directory and dired-symlink.

I suppose you could just add more faces.
The only downside to that, AFAICT, is that it will annoy people who write emacs color themes.

For my personal needs, I don't *REALLY* care about the details, so
long as "special" inodes stand out from "regular" inodes.  Doing so
acts as a warning to me to e.g. add "--devices=skip" to "grep -r".





  parent reply	other threads:[~2019-07-28 14:53 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-26  8:05 bug#24547: 24.4; dired should colour in sockets and pipes Trent W. Buck
2019-07-27 14:26 ` Lars Ingebrigtsen
2019-07-27 22:07   ` Juri Linkov
2019-07-28 10:01     ` Lars Ingebrigtsen
2019-07-28 14:53     ` Trent W. Buck [this message]
2019-07-31 20:45       ` Juri Linkov
2019-08-01  2:17         ` Trent W. Buck
2019-08-01 11:08         ` Lars Ingebrigtsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190728145350.GA29513@goll.lan \
    --to=trentbuck@gmail.com \
    --cc=24547@debbugs.gnu.org \
    --cc=juri@linkov.net \
    --cc=larsi@gnus.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.