21

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.

Drew
  • 29,895
  • 7
  • 74
  • 104
Rangi Lin
  • 9,303
  • 6
  • 45
  • 71
  • 2
    Have you tried `npm config set color false`? – Aaron Miller Dec 20 '13 at 15:38
  • I didn't know that! Looks like it is more practical than make emacs change term color :) – Rangi Lin Dec 20 '13 at 15:42
  • Yeah, I figured the same -- there are lots of Emacs libraries whose Lisp code is accessible to the relative newcomer and straightforward to customize, but `term-mode` is not one of those libraries. – Aaron Miller Dec 20 '13 at 15:45
  • So that this question doesn't hang around unanswered, I've promoted my earlier comment to an answer, and also edited the title to better reflect the sense of the question itself. – Aaron Miller Dec 20 '13 at 19:26

2 Answers2

35

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.

mikemaccana
  • 110,530
  • 99
  • 389
  • 494
Aaron Miller
  • 3,692
  • 1
  • 19
  • 26
3

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

davidchambers
  • 23,918
  • 16
  • 76
  • 105