diff options
| author | Daniel Friesel <derf@derf.homelinux.org> | 2008-09-17 18:09:39 +0200 | 
|---|---|---|
| committer | Daniel Friesel <derf@derf.homelinux.org> | 2008-09-17 18:09:39 +0200 | 
| commit | 50f0eed8ebe54a0af21b7669c0cb8b8ff479ed6f (patch) | |
| tree | 660cca2e9dbc343437056fcb53b6a5626127c107 /etc/functions | |
| parent | 31796c68ede16b31976da1a9def4837758cd60b3 (diff) | |
Finished rtab
Diffstat (limited to 'etc/functions')
| -rw-r--r-- | etc/functions/rtab | 53 | 
1 files changed, 45 insertions, 8 deletions
diff --git a/etc/functions/rtab b/etc/functions/rtab index bf08d00..9a1410b 100644 --- a/etc/functions/rtab +++ b/etc/functions/rtab @@ -4,11 +4,45 @@  ## CAVEAT: directory-names containing two or more consecutive spaces  ## are not yet supported +setopt localoptions +setopt rc_quotes null_glob + +typeset lastfull=0 +typeset short=0 +typeset tilde=0 + +while [[ $1 == -* ]]; do +	case $1 in +		-f|--fish) +			lastfull=1 +			short=1 +			tilde=1 +		;; +		-h|--help) +			print 'Usage: rtab [-f -l -s -t] [directory]' +			print ' -t, --tilde   Print ~ for the home directory' +			print ' -f, --fish    fish-simulation, like -l -s' +			print ' -l, --last    Print the last directory''s full name' +			print ' -s, --short   Truncate directory names to the first character' +			return 0 +		;; +		-l|--last) lastfull=1 ;; +		-s|--short) short=1 ;; +		-t|--tilde) tilde=1 ;; +	esac +	shift +done +  typeset -a tree expn -typeset result part dir +typeset result part dir=${1-$PWD}  typeset -i i -#typeset IFS='/' -tree=(${(s:/:)1}) + +(( pwd )) && dir=$PWD + +[[ -d $dir ]] || return 0 + +(( tilde )) && dir=${dir/$HOME/\~} +tree=(${(s:/:)dir})  (  	if [[ $tree[1] = '~' ]] {  		shift tree @@ -18,17 +52,20 @@ tree=(${(s:/:)1})  		cd /  	}  	for dir in $tree; { +		if (( lastfull )) { +			if [[ $dir == $tree[-1] ]] { +				result+="/$tree[-1]" +				break +			} +		}  		expn=(a b)  		part=''  		i=0 -		# $i -gt 999 <- See CAVEAT - Onterwise we'd have an endless loop here -		until [[ (( ${#expn} == 1 )) || $dir = $expn || $i -gt 999 ]]  do +		until [[ (( ${#expn} == 1 )) || $dir = $expn ]]  do  			(( i++ ))  			part+=$dir[$i]  			expn=($(echo ${part}*)) -#			echo "DEBUG: part=$part" -#			echo "DEBUG: expn=${(j:×:)expn}" -#			echo "DEBUG: dir=$dir" +			(( short )) && break  		done  		result+="/$part"  		cd $dir  | 
