How do I stop npm's colored output from looking ugly in Emacs term-mode?

11.1k views Asked by At

When using npm in M-x term, it generate color message like this (even with -q) :

inverse color

Information from what-cursor-position

There are text properties here:
font-lock-face       (:foreground "red3" :background "black" :inverse-video nil)
fontified            t

It is ugly, and also hard to read in other themes, is it possible to change the color on the fly ? For example, change color of text that match npm http, npm ERR!

Thanks.

3

There are 3 answers

4
Aaron Miller On BEST ANSWER

You can disable colors in npm with the command:

npm config set color false

This doesn't exactly answer your question, in that it's not a way to override ANSI colors in term-mode, but it will solve your problem, in that the npm output will no longer be ugly and hard to read.

0
gavenkoa On

Since 2018:

https://github.com/npm/cli/commit/ecfbb16dc705f28aa61b3223bdbf9e47230a0fa4 config: disable color by default when $NO_COLOR is set (#19929).

0
davidchambers On

I created a wrapper for npm in davidchambers/dotfiles#1. Here's the code in full:

__strip_background_colors() {
  local output="$(sed $'s:\x1B\[4[0-9]m::g')"
  [[ -n $output ]] && printf %s%s "$output" "$1"
}

npm() {
  # Strip the visually offensive background colours from npm's output,
  # leaving the foreground colours intact.
  NPM_CONFIG_COLOR=always "$(which npm)" "$@" \
    1> >(__strip_background_colors $'\n' >&1) \
    2> >(__strip_background_colors '' >&2)
}

It removes the offensive background colours while preserving the rather nice foreground colours. :)