improve of cmpl.
[bush.git] / examples / functions / ksh-cd
blob26b00a990a070571d9e4ef67365578ccfcf2c932
2 #  Chet Ramey <chet.ramey@case.edu>
4 #  Copyright 2001 Chester Ramey
6 #   This program is free software; you can redistribute it and/or modify
7 #   it under the terms of the GNU General Public License as published by
8 #   the Free Software Foundation; either version 2, or (at your option)
9 #   any later version.
11 #   TThis program is distributed in the hope that it will be useful,
12 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 #   GNU General Public License for more details.
16 #   You should have received a copy of the GNU General Public License
17 #   along with this program; if not, write to the Free Software Foundation,
18 #   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 # ksh-like `cd': cd [-LP] [dir [change]]
23 cd()
25         OPTIND=1
26         while getopts "LP" opt
27         do
28                 case $opt in
29                 L|P)    CDOPTS="$CDOPTS -$opt" ;;
30                 *)      echo "$FUNCNAME: usage: $FUNCNAME [-LP] [dir] [change]" >&2
31                         return 2;;
32                 esac
33         done
35         shift $(( $OPTIND - 1 ))
37         case $# in
38         0)      builtin cd $CDOPTS "$HOME" ;;
39         1)      builtin cd $CDOPTS "$@" ;;
40         2)      old="$1" new="$2"
41                 case "$PWD" in
42                 *$old*) ;;
43                 *)       echo "${0##*/}: $FUNCNAME: bad substitution" >&2 ; return 1 ;;
44                 esac
46                 dir=${PWD//$old/$new}
48                 builtin cd $CDOPTS "$dir" && echo "$PWD"
50                 ;;
51         *)      echo "${0##*/}: $FUNCNAME: usage: $FUNCNAME [-LP] [dir] [change]" >&2
52                 return 2 ;;
53         esac