From owner-freebsd-questions@FreeBSD.ORG Fri May 19 09:13:59 2006 Return-Path: X-Original-To: questions@freebsd.org Delivered-To: freebsd-questions@FreeBSD.ORG Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2D20216A420 for ; Fri, 19 May 2006 09:13:59 +0000 (UTC) (envelope-from kyrreny@broadpark.no) Received: from osl1smout1.broadpark.no (osl1smout1.broadpark.no [80.202.4.58]) by mx1.FreeBSD.org (Postfix) with ESMTP id 98ED843D46 for ; Fri, 19 May 2006 09:13:58 +0000 (GMT) (envelope-from kyrreny@broadpark.no) Received: from osl1sminn1.broadpark.no ([80.202.4.59]) by osl1smout1.broadpark.no (Sun Java System Messaging Server 6.1 HotFix 0.05 (built Oct 21 2004)) with ESMTP id <0IZI000DG9N77S60@osl1smout1.broadpark.no> for questions@freebsd.org; Fri, 19 May 2006 11:13:55 +0200 (CEST) Received: from urban.broadpark.no ([80.203.212.30]) by osl1sminn1.broadpark.no (Sun Java System Messaging Server 6.1 HotFix 0.05 (built Oct 21 2004)) with ESMTP id <0IZI00C8C9N7X280@osl1sminn1.broadpark.no> for questions@freebsd.org; Fri, 19 May 2006 11:13:55 +0200 (CEST) Date: Fri, 19 May 2006 11:13:58 +0200 From: Kyrre Nygard In-reply-to: <20060518204826.GB61792@dan.emsphone.com> To: Dan Nelson Message-id: <7.0.1.0.2.20060519102139.022127d8@broadpark.no> MIME-version: 1.0 X-Mailer: QUALCOMM Windows Eudora Version 7.0.1.0 Content-type: text/plain; charset=us-ascii; format=flowed Content-transfer-encoding: 7BIT References: <7.0.1.0.2.20060516102254.021e2b50@broadpark.no> <20060516163920.GB9679@holestein.holy.cow> <7.0.1.0.2.20060517112311.021f9220@broadpark.no> <20060517150438.GA96480@dan.emsphone.com> <7.0.1.0.2.20060518105022.022051b8@broadpark.no> <20060518150254.GA61792@dan.emsphone.com> <7.0.1.0.2.20060518192702.022713f0@broadpark.no> <20060518204826.GB61792@dan.emsphone.com> Cc: questions@freebsd.org, Parv Subject: Re: Converting a zsh prompt to bash X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 May 2006 09:13:59 -0000 At 22:48 18.05.2006, Dan Nelson wrote: >In the last episode (May 18), Kyrre Nygard said: > > At 17:02 18.05.2006, Dan Nelson wrote: > > >In the last episode (May 18), Kyrre Nygard said: > > >> At 17:04 17.05.2006, Dan Nelson wrote: > > >> >In the last episode (May 17), Kyrre Nygard said: > > >> >> Do you think this would work? > > >> >> > > >> >> I tried applying your principles, as well as some information design: > > >> >> > > >> >> local a1="01;36m" > > >> >> local a2="22;36m" > > >> >> local a3="01;30m" > > >> >> > > >> >> local b1="01;31m" > > >> >> local b2="22;31m" > > >> >> local b3="01;30m" > > >> >> > > >> >> PROMPT=$'%{$a1}(%{$a2}%n%{$a3}@%{$a2}%m%{$a1})' > > >> >> > PROMPT+=$'%{$a1}('{$a2}%D{%H:%M}%{$a3}+%{$a2}%D{%d/%m}%{$a1})%{$a3}\n' > > >> >> PROMPT+=$'%{$a1}(%{$a2}%#%{$a3}:%{$a2}%~%{$a1})' > > >> >> > > >> >> if [[ `whoami` = root ]] then > > >> >> PROMPT=$'%{$b1}(%{$b2}%n%{$b3}@%{$b2}%m%{$b1})' > > >> >> > PROMPT+=$'%{$b1}(%{$b2}%D{%H:%M}%{$b3}+%{$b2}%D{%d/%m}%{$b1})%{$b3}\n' > > >> >> PROMPT+=$'%{$b1}(%{$b2}%#%{$b3}:%{$b2}%~%{$b1})' > > >> >> fi > > >> > > > >> > Note that zsh provides symbolic variables for color setting: > > >> > > > >> > autoload -U colors > > >> > colors > > >> > echo "$fg[blue]$bg[red]blue on red!" > > >> > > > >> > so you don't have to memorize the numbers. See the zshcontrib > > >> > manpage, "OTHER FUNCTIONS" section. > > >> > > > >> > If the only difference between your root prompt is color, you can > > >> > also just set a1,a2,a3 to different values within your if block, > > >> > then set PROMPT outside of it. > > >> > > > >> > if [[ $USER == root ]] ; then > > >> > a1="%{$fg[cyan]$bg[black]}" > > >> > else > > >> > a1="%{$fg[red]}$bg[black]}" > > >> > fi > > >> > PROMPT="$a1>" > > >> > > >> Hey Dan! > > >> > > >> I can't find a list of what colors are available. Besides I doubt > > >> that mine are accounted for. > > > > > >There are only so many ways to combine 8 colors :) From the manpage: > > > > > > colors This function initializes several associative arrays to map > > > color names to (and from) the ANSI standard eight-color terminal > > > codes. These are used by the prompt theme system (see above). > > > You seldom should need to run colors more than once. > > > > > > The eight base colors are: black, red, green, yellow, blue, > > > magenta, cyan, and white. Each of these has codes for fore- > > > ground and background. In addition there are eight intensity > > > attributes: bold, faint, standout, underline, blink, reverse, > > > and conceal. Finally, there are six codes used to negate > > > attributes: none (reset all attributes to the defaults), normal > > > (neither bold nor faint), no-standout, no-underline, no-blink, > > > and no-reverse. > > > > > >> I'd be very grateful if you could at least try this prompt out so you > > >> know my request: > > >> > > >> PROMPT=$'%{\e[01;36m%}(%{\e[22;36m%}%n%{\e[01;30m%}@' > > >> PROMPT+=$'%{\e[22;36m%}%m%{\e[01;36m%})%{\e[01;36m%}%{\e[01;36m%}(' > > >> PROMPT+=$'%{\e[22;36m%}%D{%H:%M}%{\e[01;30m%}+%{\e[22;36m%}%D{%d/%m}' > > >> PROMPT+=$'%{\e[01;36m%})%{\e[01;30m\e[00m%}\n%{\e[01;36m%}(' > > >> PROMPT+=$'%{\e[22;36m%}%#%{\e[01;30m%}:%{\e[22;36m%}%~%{\e[01;36m%})' > > >> PROMPT+=$'%{\e[01;30m\e[00m%} ' > > > > > >How about something like: > > > > > >autoload -U colors > > >colors > > > > > >if [[ $USER == root ]] ; then > > > c1="%{$fg_no_bold[cyan]%}" # base color1 > > > c2="%{$fg_bold[cyan]%}" # base color2 > > > c3="%{$fg_bold[black]%}" # punctuation > > >else > > > c1="%{$fg_no_bold[red]%}" # base color1 > > > c2="%{$fg_bold[red]%}" # base color2 > > > c3="%{$fg_bold[black]%}" # punctuation > > >fi > > > > > >PROMPT="$c2($c1%n$c3@$c1%m$c2)($c1%D{%H:%M}$c3+$c1%D{%d/%m}$c2)"$'\n' > > >PROMPT+="$c2($c1%#$c3:$c1%~$c2) %{$reset_color%}" > > > > > >-- > > > Dan Nelson > > > dnelson@allantgroup.com > > > > Oh man! That is absolutely gorgeous!!! > > Thank you so much :))) > > > > My /etc/zshrc is now worth $10.000 (up from $7.000) > > > > Don't sell it on eBay you all: http://paste.husk.org/5717 > > > > Just out of curiosity Dan, how does your prompt look like? > >Mine's strictly functional. User, host, path in left prompt; error >status in right prompt. Within screen, I add the window number to the >left prompt and the date&time to the right prompt so I know how long >I've left a window idle. > >if [[ $+WINDOW = 1 && $TERM = screen* ]] ; then > PROMPT="(%n@%m.$WINDOW) %B%/>%(#/#/)%b " > RPROMPT="%(?.. %B%?%b)%t %D{%m/%d}" >else > PROMPT="(%n@%m) %B%/>%(#/#/)%b " > RPROMPT="%(?..%?)" >fi > >-- > Dan Nelson > dnelson@allantgroup.com Hey Dan! Your prompt is truly wonderful. It inspired me to grow up, as far as my shell is concerned. Based on your design, I came up with this: if [[ `whoami` = root ]] then a1="%{$fg_bold[red]%}" a2="%{$fg_no_bold[red]%}" else a1="%{$fg_bold[cyan]%}" a2="%{$fg_no_bold[cyan]%}" fi if [[ $+WINDOW = 1 && $TERM = screen* ]] then PROMPT="$a1(%n@%m) [$WINDOW] $a2%~ >%{$reset_color%} " RPROMPT="%D{%H:%M} %D{%d/%m}" fi PROMPT="$a1(%n@%m) $a2%~ >%{$reset_color%} " RPROMPT="%D{%H:%M} %D{%d/%m}" And I think I'm keeping it like that. Unless you have any suggestions on how to simply its setup? It takes up a lot of lines, maybe it could shrink a little. I hope you don't consider me stealing your design. If that's the case I'll revert back to my old one. It's kinda nice though, isn't it? :) All the best, Kyrre