On Tue, Jul 13 at 09:16AM -0500, Reid Priedhorsky wrote: > On Tue, 13 Jul 2004 09:30:18 +0200, Silvan wrote: > >> Also look into the tput program. You tell it what you want (bold, > >> green, etc.) and it outputs appropriate magic for your current > >> terminal.
great idea -- i'll have to snoop around in there for a while. good modular solution! i've been using perl's Term::ANSIColor module, which is really hard-wired cheat-code, but it works for the most part. > > Sounds interesting, but any syntax examples? I couldn't make heads or > > tails of it. > > Here's a bash prompt I used for a while. It makes the hostname part bold. > > # my prompt > BOLD=`tput bold` > NORM=`tput sgr0` > export PS1="\# [EMAIL PROTECTED] \w]\$ " > > (Yes, srg0 means normal.) here's my setup -- comments welcome. # System-wide /etc/bash.bashrc file for interactive bash(1) shells. umask 022 # If running interactively, then: if [ "$PS1" ]; then function makePrompt { local ESC='\e'; # control-O restores charset after 'cat <binaryfile>' local CHARSET='\017' # define USERCOLOR, ROOTCOLOR, SYSCOLOR, HOSTCOLOR . /etc/bash.bashrc.local local CHR='\$' if [ "`id -u`" -eq 0 ]; then USERCOLOR=$ROOTCOLOR #PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11" elif [ "`id -u`" -lt 1000 ]; then USERCOLOR=$SYSCOLOR fi if [ "$BASH" ]; then #PS1='[EMAIL PROTECTED]:\w\$ ' # get ANSI esc seq for colorization, and bracket # with \[...\] function bracket { local seq=`perl -MTerm::ANSIColor -e "print color(qw/$*/)"` echo "\[$seq\]" } USERCOLOR=`bracket $USERCOLOR` HOSTCOLOR=`bracket $HOSTCOLOR` local DECOLOR=`bracket RESET` unset bracket local LOGIN="[EMAIL PROTECTED]" local WHERE="\w${DECOLOR}" local WHEN="\[$ESC[\$LINES;\$((\$COLUMNS - 19))H\]${HOSTCOLOR}\d \t${DECOLOR}" PS1="$CHARSET$LOGIN:$WHERE$WHEN\n$USERCOLOR$CHR $DECOLOR " PS1=`echo $PS1 | sed -e 's/\\\\\\]\\\\\\[//g'` else PS1="[EMAIL PROTECTED] $CHR " fi set - unset USERCOLOR ROOTCOLOR SYSCOLOR HOSTCOLOR } makePrompt unset makePrompt export PATH PS1 # set a fancy prompt (overwrite the one in /etc/profile) #PS1='${debian_chroot:+($debian_chroot)[EMAIL PROTECTED]:\w\$ ' # check the window size after each command and, if necessary, # update the values of LINES and COLUMNS. shopt -s checkwinsize # don't put duplicate lines in the history. See bash(1) for more options export HISTCONTROL=ignoredups # enable bash completion in interactive shells if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi and here's the /etc/bash.bashrc.local for modularity -- all i change on different hosts is the HOSTCOLOR. so at a glance i can see if i'm root (red) a sysuser (green) or a normal user (blue). and after a few moments of use, i can get quite familiar with which host i'm on as well. # local settings for use in /etc/bash.bashrc USERCOLOR="BOLD WHITE ON_BLUE" ROOTCOLOR="BOLD YELLOW ON_RED" SYSCOLOR="BOLD YELLOW ON_GREEN" HOSTCOLOR="BOLD RED ON_BLUE" -- I use Debian/GNU Linux version 3.0; Linux boss 2.4.18-bf2.4 #1 Son Apr 14 09:53:28 CEST 2002 i586 unknown DEBIAN NEWBIE TIP #41 from Colin Watson <[EMAIL PROTECTED]> : Do you need to MASSAGE A BUNCH OF FILE NAMES? There's more than one way to skin a cat -- here are some examples of canonicalizing file names to lower-case: mmv \* \#l1 rename 'tr/A-Z/a-z/' * zsh -c 'for x in *; do mv "$x" "${x:l}"; done' (The "rename" command is a standard perl script, by the way.) Also see http://newbieDoc.sourceForge.net/ ... -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]