Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 425
Rangi Lin Avatar asked Dec 20 '13 15:12

Rangi Lin


2 Answers

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.

like image 150
Aaron Miller Avatar answered Oct 28 '22 02:10

Aaron Miller


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. :)

like image 26
davidchambers Avatar answered Oct 28 '22 04:10

davidchambers