user3934727
user3934727

Reputation:

256 colors in zsh-syntax-highlighting?

OK, so I'm using this little fancy cutting edge technology called zsh-syntax-highlighting and although I'm overall happy with the result I don't know how to set styles to anything but 8 basic colors (black, red, green, yellow, blue, magenta, cyan, white), e.g.

#works
ZSH_HIGHLIGHT_STYLES[path]='fg=red'
ZSH_HIGHLIGHT_STYLES[path]='fg=1'

#doesn't work
ZSH_HIGHLIGHT_STYLES[path]='fg=31m'
ZSH_HIGHLIGHT_STYLES[path]='fg=\e[31m'
ZSH_HIGHLIGHT_STYLES[path]='fg=%{\e[31m%}'
ZSH_HIGHLIGHT_STYLES[path]='31m'
ZSH_HIGHLIGHT_STYLES[path]='\e[31m'
ZSH_HIGHLIGHT_STYLES[path]='%{\e[31m%}'
ZSH_HIGHLIGHT_STYLES[path]='%{\e[1;38;5;118m%}'

So, how do I set more fancy colors for this zshzle plugin?

Upvotes: 5

Views: 12026

Answers (3)

Jim Knecht
Jim Knecht

Reputation: 475

  1. I Notice you are using [path], it could be that a custom path with it's own color setting is interfering with your highlight setting. Try testing with a different item such as [command]:

    ZSH_HIGHLIGHT_STYLES[command]='fg=222'
    

    I tried the above line and it works for me. I tried using the same value for path already knowing my custom prompt has its own colors and my prompts custom colors won out over the highlight.

  2. I use a ZSH helper called Oh-My-ZSH so the following may be a bit different or not apply to you:

    Make sure you are changing the color definition after the highlight plugin is loaded. On my setup it will actually generate an error but since I only tested on my syetem (OSX10,9, ZSH 5.0.7, Oh-My-ZSH, iTerm v2) your experience may be different.

    Doesn't work:

    ZSH_HIGHLIGHT_STYLES[command]='fg=222'
    ...
    plugins=(git osx jim colorize zsh-syntax-highlighting)
    

    Does work:

    plugins=(git osx jim colorize zsh-syntax-highlighting)
    ...
    ZSH_HIGHLIGHT_STYLES[command]='fg=222'
    

Upvotes: 1

user3620917
user3620917

Reputation:

As you pointed out in the comment to chepner answer terminator is a fork of gnome-terminal and it still uses a lot of functions from gnome. In fact it seems that the whole terminator VTE widget comes from gnome and gnome-terminal by defaults "supports" only 8 basic colors. You can check that with echotc Co command. It will return 8 for both of them and for xterm too (although in xterm case this is true and only 8 colors), so basically all 3 terminal emulators you tried so far.

Now, you noted that teminator (and gnome-terminal) can in fact display more colors, but this is only because it more or less processes all those special color codes without paying attention to TERM settings what does not obey standards but well, this is gnome. Anyway to make long story short you need to set TERM environment variable to something like xterm-256color and check again with echotc Co - you should now see 256, and your ZSH_HIGHLIGHT_STYLES[path]='fg=217' should work as well.

To always start with 256 colors you can put into you .zshrc

[[ "$TERM" == "xterm" ]] && export TERM=xterm-256color

and if you have any gnome shortcuts with terminator then change them as follows

terminator -e "TERM=xterm-256color pine"

Upvotes: 5

chepner
chepner

Reputation: 532093

http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting suggests that the value for fg be a single integer from 0 to 255:

ZSH_HIGHLIGHT_STYLES[path]='fg=167'  # Whatever color 167 is in the 256-color palette.

Upvotes: 1

Related Questions