Posts mit dem Label ksh93 werden angezeigt. Alle Posts anzeigen
Posts mit dem Label ksh93 werden angezeigt. Alle Posts anzeigen

Samstag, 17. April 2010

Git-Mode für die KSH

Ich habe gerade mal meine Git Erweiterung für die Kornshell in meinen Bitbucket gestellt. Das ganze liegt zwar noch unter "Mercurial-Integration" aber sollte zu finden sein ;). Wie schon beim Mercurial mode wechselt man mit mode git in den entsprechenden Modus. Die Farbe der Commit ID wechselt von Rot (uncommited changes) zu Gelb (nicht die aktuellste Revision) zu Grün (aktuellste Revision und nichts zu commiten). Außerdem wird der aktuelle Branch angezeigt und im Falle eines "detached HEAD" Zustands visuell gewarnt. Viel Spass damit!

Montag, 1. Februar 2010

KSH93: Mercurial Promptmode

Nach dem großartigen Blogeintrag von Steve Losh und seinem ZSH-Mercurial Prompt habe ich mir gedacht: "Ok, das geht auch mit der KSH". Ich verfolge allerdings einen etwas anderen Ansatz. Anstatt das meine Shell bei jedem Kommando selbst überprüft ob sie in einem Repository ist (zuviel Overhead meines Erachtens nach) habe ich unterschiedliche Modes definiert (ksh für "shell" und hg für "mercurial") zwischen denen ich mit mode wechseln kann.
Der Prompt färbt sich rot wenn sich der Status verändert hat und zeigt mir neben der Revisionsnummer auch noch den Namen das Branches an auf dem ich gerade bin :)



_checkrevision() {
set -A HGOUTPUT $(hg id -n -b -t 2> /dev/null)
if [[ ${HGOUTPUT[0]} != "" ]]
then
if grep '+' <(echo ${HGOUTPUT[0]}) > \
/dev/null 2> /dev/null
then
print ":${BOLD}${RED}${HGOUTPUT[0]}${NORM}\
@${CYAN}${HGOUTPUT[1]}${NORM}" && return
elif grep -v 'tip' <(echo ${HGOUTPUT[*]}) > \
/dev/null 2> /dev/null
then
print ":${BOLD}${YELLOW}${HGOUTPUT[0]}${NORM}\
@${CYAN}${HGOUTPUT[1]}${NORM}"\
&& return
else
print ":${BOLD}${GREEN}${HGOUTPUT[0]}${NORM}\
@${CYAN}${HGOUTPUT[1]}${NORM}"\
&& return
fi
fi
}

mode() {
if [[ $1 == 'ksh' ]]
then
export PS1='${NORM}\[${USERCOL}${USER}${NORM}\@\
${HOSTCOL}${HOSTNAME}${NORM}\:${BLUE}$(_checkdir)\
${NORM}]\:${RED}${HISTCMD}${NORM}\> '
elif [[ $1 == 'hg' ]]
then
export PS1='${PURPLE}☿${NORM}$(_checkrevision)> '
fi
}


Das ist jetzt die erste Version. Mal sehen wie sich das gute Stück noch weiterentwickelt :)

UPDATE: Hab den Code noch mal um einiges verbessert.

Freitag, 6. November 2009

By popular demand: Meine .kshrc

Ich werde des öfteren mal nach meinen Einstellungen für die ksh93 die ich als meine Defaultshell auf allen Systemen die ich derzeit aktiv verwende einsetze. Der Commandeditor fc hat es mir in dieser Shell besonders angetan ganz zu schweigen davon das sie im Vergleich zu anderen Shells ziemlich bugfrei ist.

Für alle nicht vi-User VORSICHT: Diese Config kommt mit aktiviertem vi-Modus daher ;) Außerdem habe ich PS ein wenig blogtauglicher formatiert.

Noch ein Tipp für die Mac-User: die ksh in der Standardinstallation ist ziemlich veraltet. Schnappt euch Macports und installiert sie euch daraus. Danach die neue Shell in die /etc/shells eintragen und sudo chsh -s /opt/local/bin/ksh username und ksh93 ist eure Defaultshell.


set -o noclobber
set -o ignoreeof
set -o globstar
set -o vi

HISTFILE=$HOME/.histfile.$(tty | cut -d/ -f 3)
RED=$(print -n "\033[0;31m")
GREEN=$(print -n "\033[0;32m")
YELLOW=$(print -n "\033[0;33m")
BLUE=$(print -n "\033[0;34m")
PURPLE=$(print -n "\033[0;35m")
CYAN=$(print -n "\033[0;36m")
WHITE=$(print -n "\033[0;38m")

export HOSTNAME=$(hostname)
export EDITOR="vim"
export HISTEDIT="vim"

_checkdir() {
if [[ $PWD == $HOME ]]
then
print -n "~"
elif [[ $PWD == "/" ]]
then
print $PWD
else
print -n ${PWD##*/}
fi
}

if [[ $(uname) == "Darwin" ]]
then
export PS1='${WHITE}[${GREEN}${USER}${WHITE}@${YELLOW}\
${HOSTNAME}${WHITE}:${BLUE}$(_checkdir)${WHITE}]:\
${RED}$HISTCMD${WHITE}> '
alias ls='ls -FG'
alias pkill='killall'
alias pgrep='ps -A | grep -i'
alias grep='grep --color=always'
elif [[ $(uname) == "SunOS" ]]
then
export PS1='[${WHITE}[${GREEN}${USER}${WHITE}@${CYAN}\
${HOSTNAME}${WHITE}:${BLUE}$(_checkdir)${WHITE}]:\
${RED}${HISTCMD}${WHITE}> '
export PATH="/bin:/sbin:/usr/bin:/usr/sbin:\
/opt/SunStudioExpress/bin:$PATH"
alias ls='ls -F'
elif [[ $(uname) == "FreeBSD" ]]
then
export PS1='[${WHITE}[${GREEN}${USER}${WHITE}@${PURPLE}\
${HOSTNAME}${WHITE}:${BLUE}$(_checkdir)${WHITE}]:\
${RED}${HISTCMD}${WHITE}> '
alias ls='ls -FG'
alias pkill='killall'
alias grep='grep --color=always'
alias pgrep='ps -A | grep -i'
fi

alias !!='fc -s -1'
alias vi='vim'