zsh, prompt, variable expansion, ANSI color sequences


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting zsh, prompt, variable expansion, ANSI color sequences
# 1  
Old 05-01-2012
zsh, prompt, variable expansion, ANSI color sequences

Hi!

I am using latest ZSH and I have setopt prompt_subst

I have a global hash array variable which contains some color definitions with color names as keys and 256-color ANSI codes (with %{ and %}) as values, eg %{\e[38;5;51m%}

If at function precmd() I set prompt as

Code:
PS1="$FG[red5] Hello World (%M) > "

or
Code:
PS1=$'$FG[red5] Hello World (%M) > '

then it becomes
Code:
\e[38;5;196m Hello World (localhost) >

As you see %{ and %} were removed, but ANSI code remained.

If I set
Code:
PS1=$(print -P "$FG[red5] Hello World (%M) > ")

then prompt appears as expected, but zsh does not calculate it's length correctly (it thinks that it's length is as if control sequences were printable), and tab completion transfers the command way further.

I think that a possible solution would be that the array did not include the %{ and %} and using something like %{$FG[red5]%} to set the color, but it's ugly.

I know there is built-in support for colors but it's only 16 color.

Any help please?
# 2  
Old 05-01-2012
Using %{ and %} works fine for me using version zsh 4.3.12 eg:

Code:
# PS1=$'%{\e[38;5;196m%}Testing$ %{\e[0m%}'
Testing $ 

Even works when I resize my xterm window

Last edited by Chubler_XL; 05-02-2012 at 12:27 AM.. Reason: Update after installing and playing with zsh
# 3  
Old 05-02-2012
Quote:
Originally Posted by Chubler_XL
Using %{ and %} works fine for me using version zsh 4.3.12 eg:

Code:
# PS1=$'%{\e[38;5;196m%}Testing$ %{\e[0m%}'
Testing $ 

Even works when I resize my xterm window
Yes, but you did not use variables.
My issue seems to be with variable expansion.
# 4  
Old 05-02-2012
Do the print -P when assigning the variables then:

Code:
# RED=$(print -P '\e[38;5;196m')
# NORM=$(print -P '\e[0m')        
# PS1="%{$RED%}Testing$ %{$NORM%}"
Testing $ 

or
Code:
# RED='%{'$(print -P '\e[38;5;196m')'%}'
# NORM='%{'$(print -P '\e[0m')'%}'
# PS1="${RED}Testing$ ${NORM}"
Testing $ 


Last edited by Chubler_XL; 05-02-2012 at 01:23 AM..
This User Gave Thanks to Chubler_XL For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

7 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Color prompt with file numbers does not work anymore

I have used this color prompt on my servers for long time, in file ~\.bashrc Black="\" Dark="\" Blue="\" LBlue="\" Green="\" LGreen="\" Cyan="\" LCyan="\" Red="\" LRed="\" Purple="\" LPurple="\" Brown="\" Yellow="\" LGray="\" White="\" Reset="\" PS1="$Yellow\u@\h $LBlue\w... (4 Replies)
Discussion started by: Jotne
4 Replies

2. Programming

Using ANSI color codes in gcc compiled program

I have put some yellow color codes and works well. I call the funstion using print_usage(stderr, 0); I would like to know if there is any way, to store the ansi color codes in variables and then call them inside fprintf. Or have a format followed by the strings I want to output. ... (5 Replies)
Discussion started by: kristinu
5 Replies

3. Programming

Does ansi c support variable-length array?

I successfully compiled code like below. #include<stdio.h> #include<string.h> int main() { int co = 9; char a; strcpy(a, "hahahah"); printf("co=%d\n", co); printf("a=%s\n", a); return 0; } (7 Replies)
Discussion started by: vistastar
7 Replies

4. Shell Programming and Scripting

how to find the value of a variable in zsh?

I have a zsh script written by someone else, I am trying to modify it to work on slightly different data -problem is I know nothing about shell scripting. I am trying to muddle through this myself since I need to learn but can someone tell me how to debug a script? ie. I want to display the value... (6 Replies)
Discussion started by: cmp260
6 Replies

5. Programming

why the implementatoin of Bakery algorithm in ANSI C does not work in ANSI C

I follow the description of wiki (Lamport's bakery algorithm - Wikipedia, the free encyclopedia), then implement that algorithm in C, but it doesn't work, Starving is still here, is the implementation worry? Only print out: Thread ID: 0 START! Thread ID: 0 END! Thread ID: 0 START!... (2 Replies)
Discussion started by: sehang
2 Replies

6. Shell Programming and Scripting

tcsh/csh: set prompt in production to color red

Hi folks This is our prompt at the moment oracle@pinkipinki:/opt/oracle> grep 'set prompt' .cshrc set prompt = "$user@`uname -n`:$cwd> " We wish to have in production the same prompt, but red. Howto do that? I tried a lot a internet manuals, but it doesn't work. (1 Reply)
Discussion started by: slashdotweenie
1 Replies

7. Shell Programming and Scripting

How to change prompt color when changing path

Hi all, Can you tell me how to change the prompt color (only the path part) when I chnange directory with "cd"? I use the sequence below in ".bashrc" (Solaris 8) to change my prompt colors and I'd like to modify it to change the path color when I cange directory. PSC() { echo -ne "\"; }... (0 Replies)
Discussion started by: majormark
0 Replies
Login or Register to Ask a Question