20

I have set up my bash shell so that any commands I type appear in bold and the commands' output is shown in normal weight:

enter image description here

I did this by adding \e[01m at the end of my PS1 variable to turn on bold, and using trap DEBUG to turn it off:

trap 'printf "\e[0m" "$_"' DEBUG

That way, the \e[0m is printed before each command is executed and I get normal font weight in the output.

How would I go about getting the same effect in zsh?

2 Answers 2

18

The old-fashioned way was to use POSTEDIT

 POSTEDIT=$'\e[0m'

(and by the way this isn't bash, don't use a DEBUG trap to simulate preexec: zsh is where it's from) but since zsh 4.3.11 you can use the command line syntax highlighting facility. Let your prompt care only about your prompt and set

zle_highlight=(default:bold)
7

What you want is preexec hook function:

preexec() { printf "\e[0m"; }

Then before each command was executed, preexec will be run to reset your font to normal.

So, to get the same prompt you show in your question, add these lines to your ~/.zshrc:

autoload -U colors && colors
PS1="%{$fg_bold[yellow]%}%n@%m %{$fg[blue]%}%~ \$ %{$reset_color%}%{$fg_bold[white]%}"
preexec() { printf "\e[0m"; }
1
  • That's the right thing to use instead of a DEBUG trap, but neither is the right way to make the command line bold. Nov 1, 2015 at 0:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .