rayd09
rayd09

Reputation: 1897

How to change colors programmatically in Konsole based on current directory?

I currently use a color scheme based on which directory that I'm working in. I manually open up a Konsole shell and then cd into a directory and got to Settings and change the color scheme.

What I would like to do is have Konsole automatically set its foreground and background colors based on which directory I'm in. Basically if I'm in any subdirectory below /home/me/src/java then I would like to use text white, background blue, for example. If I'm below /home/me/src/documentation I want text black, background white, for example. I would like the color change to occur automatically, programmatically, when I call the "cd" command.

Is this possible? If so, can you provide me some direction as to how?

The way I see it I will need to be able to do a couple of things:

Upvotes: 4

Views: 4579

Answers (2)

Dennis Williamson
Dennis Williamson

Reputation: 359985

To get you started, here's a little information about using D-Bus to script Konsole.

You don't say which shell you're using, but if it's Bash you may want to use the $PROMPT_COMMAND variable which holds a command to be executed each time the $PS1 prompt is issued. The Z shell has a similar facility that's probably a bit more powerful (see man zshmisc for chpwd and precmd).

Otherwise, you might be able to use xterm escape sequences.

Upvotes: 3

Grzegorz Oledzki
Grzegorz Oledzki

Reputation: 24251

Context

Actually, Konsole has support for what they call profiles. A profile is a group of settings (not only background), which you can manually define under Settings | Manage Profiles and around.

Also, there exists a command line utility called konsoleprofile which allows for programmatic changing of the profiles.

Actual answer

  1. Go to Settings | Edit Current Profile... | Appearance
  2. Define new Color Scheme for each of the directories you want to have special background for, e.g. myprofile1, myprofile2, mystandard
  3. Make sure you can manually call konsoleprofile ColorScheme=myprofile1, konsoleprofile ColorScheme=standard, etc.
  4. Plug in the calls to konsoleprofile into your $PROMPT_COMMAND, e.g. add this to your .bashrc:
PROMPT_COMMAND='[[ "$PWD" = /home/me/src/java* ]] && konsoleprofile ColorScheme=myprofile1 || konsoleprofile ColorScheme=mystandard'";$PROMPT_COMMAND"

Upvotes: 4

Related Questions