mirror of https://github.com/tLDP/LDP
768 lines
26 KiB
Plaintext
768 lines
26 KiB
Plaintext
###########################################################################
|
|
#
|
|
# cdll
|
|
# by Phil Braham
|
|
#
|
|
# ############################################
|
|
# Latest version of this script available from
|
|
# http://freshmeat.net/projects/cd/
|
|
# ############################################
|
|
#
|
|
# .cd_new
|
|
#
|
|
# An enhancement of the Unix cd command
|
|
#
|
|
# There are unlimited stack entries and special entries. The stack
|
|
# entries keep the last cd_maxhistory
|
|
# directories that have been used. The special entries can be
|
|
# assigned to commonly used directories.
|
|
#
|
|
# The special entries may be pre-assigned by setting the environment
|
|
# variables CDSn or by using the -u or -U command.
|
|
#
|
|
# The following is a suggestion for the .profile file:
|
|
#
|
|
# . cdll # Set up the cd command
|
|
# alias cd='cd_new' # Replace the cd command
|
|
# cd -U # Upload pre-assigned entries for
|
|
# #+ the stack and special entries
|
|
# cd -D # Set non-default mode
|
|
# alias @="cd_new @" # Allow @ to be used to get history
|
|
#
|
|
# For help type:
|
|
#
|
|
# cd -h or
|
|
# cd -H
|
|
#
|
|
#
|
|
###########################################################################
|
|
#
|
|
# Version 1.2.1
|
|
#
|
|
# Written by Phil Braham - Realtime Software Pty Ltd
|
|
# (realtime@mpx.com.au)
|
|
# Please send any suggestions or enhancements to the author (also at
|
|
# phil@braham.net)
|
|
#
|
|
############################################################################
|
|
|
|
cd_hm ()
|
|
{
|
|
${PRINTF} "%s" "cd [dir] [0-9] [@[s|h] [-g [<dir>]] [-d] \
|
|
[-D] [-r<n>] [dir|0-9] [-R<n>] [<dir>|0-9]
|
|
[-s<n>] [-S<n>] [-u] [-U] [-f] [-F] [-h] [-H] [-v]
|
|
<dir> Go to directory
|
|
0-n Go to previous directory (0 is previous, 1 is last but 1 etc)
|
|
n is up to max history (default is 50)
|
|
@ List history and special entries
|
|
@h List history entries
|
|
@s List special entries
|
|
-g [<dir>] Go to literal name (bypass special names)
|
|
This is to allow access to dirs called '0','1','-h' etc
|
|
-d Change default action - verbose. (See note)
|
|
-D Change default action - silent. (See note)
|
|
-s<n> Go to the special entry <n>*
|
|
-S<n> Go to the special entry <n>
|
|
and replace it with the current dir*
|
|
-r<n> [<dir>] Go to directory <dir>
|
|
and then put it on special entry <n>*
|
|
-R<n> [<dir>] Go to directory <dir>
|
|
and put current dir on special entry <n>*
|
|
-a<n> Alternative suggested directory. See note below.
|
|
-f [<file>] File entries to <file>.
|
|
-u [<file>] Update entries from <file>.
|
|
If no filename supplied then default file
|
|
(${CDPath}${2:-"$CDFile"}) is used
|
|
-F and -U are silent versions
|
|
-v Print version number
|
|
-h Help
|
|
-H Detailed help
|
|
|
|
*The special entries (0 - 9) are held until log off, replaced by another
|
|
entry or updated with the -u command
|
|
|
|
Alternative suggested directories:
|
|
If a directory is not found then CD will suggest any
|
|
possibilities. These are directories starting with the same letters
|
|
and if any are found they are listed prefixed with -a<n>
|
|
where <n> is a number.
|
|
It's possible to go to the directory by entering cd -a<n>
|
|
on the command line.
|
|
|
|
The directory for -r<n> or -R<n> may be a number.
|
|
For example:
|
|
$ cd -r3 4 Go to history entry 4 and put it on special entry 3
|
|
$ cd -R3 4 Put current dir on the special entry 3
|
|
and go to history entry 4
|
|
$ cd -s3 Go to special entry 3
|
|
|
|
Note that commands R,r,S and s may be used without a number
|
|
and refer to 0:
|
|
$ cd -s Go to special entry 0
|
|
$ cd -S Go to special entry 0 and make special
|
|
entry 0 current dir
|
|
$ cd -r 1 Go to history entry 1 and put it on special entry 0
|
|
$ cd -r Go to history entry 0 and put it on special entry 0
|
|
"
|
|
if ${TEST} "$CD_MODE" = "PREV"
|
|
then
|
|
${PRINTF} "$cd_mnset"
|
|
else
|
|
${PRINTF} "$cd_mset"
|
|
fi
|
|
}
|
|
|
|
cd_Hm ()
|
|
{
|
|
cd_hm
|
|
${PRINTF} "%s" "
|
|
The previous directories (0-$cd_maxhistory) are stored in the
|
|
environment variables CD[0] - CD[$cd_maxhistory]
|
|
Similarly the special directories S0 - $cd_maxspecial are in
|
|
the environment variable CDS[0] - CDS[$cd_maxspecial]
|
|
and may be accessed from the command line
|
|
|
|
The default pathname for the -f and -u commands is $CDPath
|
|
The default filename for the -f and -u commands is $CDFile
|
|
|
|
Set the following environment variables:
|
|
CDL_PROMPTLEN - Set to the length of prompt you require.
|
|
Prompt string is set to the right characters of the
|
|
current directory.
|
|
If not set then prompt is left unchanged
|
|
CDL_PROMPT_PRE - Set to the string to prefix the prompt.
|
|
Default is:
|
|
non-root: \"\\[\\e[01;34m\\]\" (sets colour to blue).
|
|
root: \"\\[\\e[01;31m\\]\" (sets colour to red).
|
|
CDL_PROMPT_POST - Set to the string to suffix the prompt.
|
|
Default is:
|
|
non-root: \"\\[\\e[00m\\]$\"
|
|
(resets colour and displays $).
|
|
root: \"\\[\\e[00m\\]#\"
|
|
(resets colour and displays #).
|
|
CDPath - Set the default path for the -f & -u options.
|
|
Default is home directory
|
|
CDFile - Set the default filename for the -f & -u options.
|
|
Default is cdfile
|
|
|
|
"
|
|
cd_version
|
|
|
|
}
|
|
|
|
cd_version ()
|
|
{
|
|
printf "Version: ${VERSION_MAJOR}.${VERSION_MINOR} Date: ${VERSION_DATE}\n"
|
|
}
|
|
|
|
#
|
|
# Truncate right.
|
|
#
|
|
# params:
|
|
# p1 - string
|
|
# p2 - length to truncate to
|
|
#
|
|
# returns string in tcd
|
|
#
|
|
cd_right_trunc ()
|
|
{
|
|
local tlen=${2}
|
|
local plen=${#1}
|
|
local str="${1}"
|
|
local diff
|
|
local filler="<--"
|
|
if ${TEST} ${plen} -le ${tlen}
|
|
then
|
|
tcd="${str}"
|
|
else
|
|
let diff=${plen}-${tlen}
|
|
elen=3
|
|
if ${TEST} ${diff} -le 2
|
|
then
|
|
let elen=${diff}
|
|
fi
|
|
tlen=-${tlen}
|
|
let tlen=${tlen}+${elen}
|
|
tcd=${filler:0:elen}${str:tlen}
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Three versions of do history:
|
|
# cd_dohistory - packs history and specials side by side
|
|
# cd_dohistoryH - Shows only hstory
|
|
# cd_dohistoryS - Shows only specials
|
|
#
|
|
cd_dohistory ()
|
|
{
|
|
cd_getrc
|
|
${PRINTF} "History:\n"
|
|
local -i count=${cd_histcount}
|
|
while ${TEST} ${count} -ge 0
|
|
do
|
|
cd_right_trunc "${CD[count]}" ${cd_lchar}
|
|
${PRINTF} "%2d %-${cd_lchar}.${cd_lchar}s " ${count} "${tcd}"
|
|
|
|
cd_right_trunc "${CDS[count]}" ${cd_rchar}
|
|
${PRINTF} "S%d %-${cd_rchar}.${cd_rchar}s\n" ${count} "${tcd}"
|
|
count=${count}-1
|
|
done
|
|
}
|
|
|
|
cd_dohistoryH ()
|
|
{
|
|
cd_getrc
|
|
${PRINTF} "History:\n"
|
|
local -i count=${cd_maxhistory}
|
|
while ${TEST} ${count} -ge 0
|
|
do
|
|
${PRINTF} "${count} %-${cd_flchar}.${cd_flchar}s\n" ${CD[$count]}
|
|
count=${count}-1
|
|
done
|
|
}
|
|
|
|
cd_dohistoryS ()
|
|
{
|
|
cd_getrc
|
|
${PRINTF} "Specials:\n"
|
|
local -i count=${cd_maxspecial}
|
|
while ${TEST} ${count} -ge 0
|
|
do
|
|
${PRINTF} "S${count} %-${cd_flchar}.${cd_flchar}s\n" ${CDS[$count]}
|
|
count=${count}-1
|
|
done
|
|
}
|
|
|
|
cd_getrc ()
|
|
{
|
|
cd_flchar=$(stty -a | awk -F \;
|
|
'/rows/ { print $2 $3 }' | awk -F \ '{ print $4 }')
|
|
if ${TEST} ${cd_flchar} -ne 0
|
|
then
|
|
cd_lchar=${cd_flchar}/2-5
|
|
cd_rchar=${cd_flchar}/2-5
|
|
cd_flchar=${cd_flchar}-5
|
|
else
|
|
cd_flchar=${FLCHAR:=75}
|
|
# cd_flchar is used for the @s & @h history
|
|
cd_lchar=${LCHAR:=35}
|
|
cd_rchar=${RCHAR:=35}
|
|
fi
|
|
}
|
|
|
|
cd_doselection ()
|
|
{
|
|
local -i nm=0
|
|
cd_doflag="TRUE"
|
|
if ${TEST} "${CD_MODE}" = "PREV"
|
|
then
|
|
if ${TEST} -z "$cd_npwd"
|
|
then
|
|
cd_npwd=0
|
|
fi
|
|
fi
|
|
tm=$(echo "${cd_npwd}" | cut -b 1)
|
|
if ${TEST} "${tm}" = "-"
|
|
then
|
|
pm=$(echo "${cd_npwd}" | cut -b 2)
|
|
nm=$(echo "${cd_npwd}" | cut -d $pm -f2)
|
|
case "${pm}" in
|
|
a) cd_npwd=${cd_sugg[$nm]} ;;
|
|
s) cd_npwd="${CDS[$nm]}" ;;
|
|
S) cd_npwd="${CDS[$nm]}" ; CDS[$nm]=`pwd` ;;
|
|
r) cd_npwd="$2" ; cd_specDir=$nm ; cd_doselection "$1" "$2";;
|
|
R) cd_npwd="$2" ; CDS[$nm]=`pwd` ; cd_doselection "$1" "$2";;
|
|
esac
|
|
fi
|
|
|
|
if ${TEST} "${cd_npwd}" != "." -a "${cd_npwd}" \
|
|
!= ".." -a "${cd_npwd}" -le ${cd_maxhistory} >>/dev/null 2>&1
|
|
then
|
|
cd_npwd=${CD[$cd_npwd]}
|
|
else
|
|
case "$cd_npwd" in
|
|
@) cd_dohistory ; cd_doflag="FALSE" ;;
|
|
@h) cd_dohistoryH ; cd_doflag="FALSE" ;;
|
|
@s) cd_dohistoryS ; cd_doflag="FALSE" ;;
|
|
-h) cd_hm ; cd_doflag="FALSE" ;;
|
|
-H) cd_Hm ; cd_doflag="FALSE" ;;
|
|
-f) cd_fsave "SHOW" $2 ; cd_doflag="FALSE" ;;
|
|
-u) cd_upload "SHOW" $2 ; cd_doflag="FALSE" ;;
|
|
-F) cd_fsave "NOSHOW" $2 ; cd_doflag="FALSE" ;;
|
|
-U) cd_upload "NOSHOW" $2 ; cd_doflag="FALSE" ;;
|
|
-g) cd_npwd="$2" ;;
|
|
-d) cd_chdefm 1; cd_doflag="FALSE" ;;
|
|
-D) cd_chdefm 0; cd_doflag="FALSE" ;;
|
|
-r) cd_npwd="$2" ; cd_specDir=0 ; cd_doselection "$1" "$2";;
|
|
-R) cd_npwd="$2" ; CDS[0]=`pwd` ; cd_doselection "$1" "$2";;
|
|
-s) cd_npwd="${CDS[0]}" ;;
|
|
-S) cd_npwd="${CDS[0]}" ; CDS[0]=`pwd` ;;
|
|
-v) cd_version ; cd_doflag="FALSE";;
|
|
esac
|
|
fi
|
|
}
|
|
|
|
cd_chdefm ()
|
|
{
|
|
if ${TEST} "${CD_MODE}" = "PREV"
|
|
then
|
|
CD_MODE=""
|
|
if ${TEST} $1 -eq 1
|
|
then
|
|
${PRINTF} "${cd_mset}"
|
|
fi
|
|
else
|
|
CD_MODE="PREV"
|
|
if ${TEST} $1 -eq 1
|
|
then
|
|
${PRINTF} "${cd_mnset}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
cd_fsave ()
|
|
{
|
|
local sfile=${CDPath}${2:-"$CDFile"}
|
|
if ${TEST} "$1" = "SHOW"
|
|
then
|
|
${PRINTF} "Saved to %s\n" $sfile
|
|
fi
|
|
${RM} -f ${sfile}
|
|
local -i count=0
|
|
while ${TEST} ${count} -le ${cd_maxhistory}
|
|
do
|
|
echo "CD[$count]=\"${CD[$count]}\"" >> ${sfile}
|
|
count=${count}+1
|
|
done
|
|
count=0
|
|
while ${TEST} ${count} -le ${cd_maxspecial}
|
|
do
|
|
echo "CDS[$count]=\"${CDS[$count]}\"" >> ${sfile}
|
|
count=${count}+1
|
|
done
|
|
}
|
|
|
|
cd_upload ()
|
|
{
|
|
local sfile=${CDPath}${2:-"$CDFile"}
|
|
if ${TEST} "${1}" = "SHOW"
|
|
then
|
|
${PRINTF} "Loading from %s\n" ${sfile}
|
|
fi
|
|
. ${sfile}
|
|
}
|
|
|
|
cd_new ()
|
|
{
|
|
local -i count
|
|
local -i choose=0
|
|
|
|
cd_npwd="${1}"
|
|
cd_specDir=-1
|
|
cd_doselection "${1}" "${2}"
|
|
|
|
if ${TEST} ${cd_doflag} = "TRUE"
|
|
then
|
|
if ${TEST} "${CD[0]}" != "`pwd`"
|
|
then
|
|
count=$cd_maxhistory
|
|
while ${TEST} $count -gt 0
|
|
do
|
|
CD[$count]=${CD[$count-1]}
|
|
count=${count}-1
|
|
done
|
|
CD[0]=`pwd`
|
|
fi
|
|
command cd "${cd_npwd}" 2>/dev/null
|
|
if ${TEST} $? -eq 1
|
|
then
|
|
${PRINTF} "Unknown dir: %s\n" "${cd_npwd}"
|
|
local -i ftflag=0
|
|
for i in "${cd_npwd}"*
|
|
do
|
|
if ${TEST} -d "${i}"
|
|
then
|
|
if ${TEST} ${ftflag} -eq 0
|
|
then
|
|
${PRINTF} "Suggest:\n"
|
|
ftflag=1
|
|
fi
|
|
${PRINTF} "\t-a${choose} %s\n" "$i"
|
|
cd_sugg[$choose]="${i}"
|
|
choose=${choose}+1
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
|
|
if ${TEST} ${cd_specDir} -ne -1
|
|
then
|
|
CDS[${cd_specDir}]=`pwd`
|
|
fi
|
|
|
|
if ${TEST} ! -z "${CDL_PROMPTLEN}"
|
|
then
|
|
cd_right_trunc "${PWD}" ${CDL_PROMPTLEN}
|
|
cd_rp=${CDL_PROMPT_PRE}${tcd}${CDL_PROMPT_POST}
|
|
export PS1="$(echo -ne ${cd_rp})"
|
|
fi
|
|
}
|
|
#########################################################################
|
|
# #
|
|
# Initialisation here #
|
|
# #
|
|
#########################################################################
|
|
#
|
|
VERSION_MAJOR="1"
|
|
VERSION_MINOR="2.1"
|
|
VERSION_DATE="24-MAY-2003"
|
|
#
|
|
alias cd=cd_new
|
|
#
|
|
# Set up commands
|
|
RM=/bin/rm
|
|
TEST=test
|
|
PRINTF=printf # Use builtin printf
|
|
|
|
#########################################################################
|
|
# #
|
|
# Change this to modify the default pre- and post prompt strings. #
|
|
# These only come into effect if CDL_PROMPTLEN is set. #
|
|
# #
|
|
#########################################################################
|
|
if ${TEST} ${EUID} -eq 0
|
|
then
|
|
# CDL_PROMPT_PRE=${CDL_PROMPT_PRE:="$HOSTNAME@"}
|
|
CDL_PROMPT_PRE=${CDL_PROMPT_PRE:="\\[\\e[01;31m\\]"} # Root is in red
|
|
CDL_PROMPT_POST=${CDL_PROMPT_POST:="\\[\\e[00m\\]#"}
|
|
else
|
|
CDL_PROMPT_PRE=${CDL_PROMPT_PRE:="\\[\\e[01;34m\\]"} # Users in blue
|
|
CDL_PROMPT_POST=${CDL_PROMPT_POST:="\\[\\e[00m\\]$"}
|
|
fi
|
|
#########################################################################
|
|
#
|
|
# cd_maxhistory defines the max number of history entries allowed.
|
|
typeset -i cd_maxhistory=50
|
|
|
|
#########################################################################
|
|
#
|
|
# cd_maxspecial defines the number of special entries.
|
|
typeset -i cd_maxspecial=9
|
|
#
|
|
#
|
|
#########################################################################
|
|
#
|
|
# cd_histcount defines the number of entries displayed in
|
|
#+ the history command.
|
|
typeset -i cd_histcount=9
|
|
#
|
|
#########################################################################
|
|
export CDPath=${HOME}/
|
|
# Change these to use a different #
|
|
#+ default path and filename #
|
|
export CDFile=${CDFILE:=cdfile} # for the -u and -f commands #
|
|
#
|
|
#########################################################################
|
|
#
|
|
typeset -i cd_lchar cd_rchar cd_flchar
|
|
# This is the number of chars to allow for the #
|
|
cd_flchar=${FLCHAR:=75} #+ cd_flchar is used for the @s & @h history#
|
|
|
|
typeset -ax CD CDS
|
|
#
|
|
cd_mset="\n\tDefault mode is now set - entering cd with no parameters \
|
|
has the default action\n\tUse cd -d or -D for cd to go to \
|
|
previous directory with no parameters\n"
|
|
cd_mnset="\n\tNon-default mode is now set - entering cd with no \
|
|
parameters is the same as entering cd 0\n\tUse cd -d or \
|
|
-D to change default cd action\n"
|
|
|
|
# ==================================================================== #
|
|
|
|
|
|
|
|
: <<DOCUMENTATION
|
|
|
|
Written by Phil Braham. Realtime Software Pty Ltd.
|
|
Released under GNU license. Free to use. Please pass any modifications
|
|
or comments to the author Phil Braham:
|
|
|
|
realtime@mpx.com.au
|
|
=======================================================================
|
|
|
|
cdll is a replacement for cd and incorporates similar functionality to
|
|
the bash pushd and popd commands but is independent of them.
|
|
|
|
This version of cdll has been tested on Linux using Bash. It will work
|
|
on most Linux versions but will probably not work on other shells without
|
|
modification.
|
|
|
|
Introduction
|
|
============
|
|
|
|
cdll allows easy moving about between directories. When changing to a new
|
|
directory the current one is automatically put onto a stack. By default
|
|
50 entries are kept, but this is configurable. Special directories can be
|
|
kept for easy access - by default up to 10, but this is configurable. The
|
|
most recent stack entries and the special entries can be easily viewed.
|
|
|
|
The directory stack and special entries can be saved to, and loaded from,
|
|
a file. This allows them to be set up on login, saved before logging out
|
|
or changed when moving project to project.
|
|
|
|
In addition, cdll provides a flexible command prompt facility that allows,
|
|
for example, a directory name in colour that is truncated from the left
|
|
if it gets too long.
|
|
|
|
|
|
Setting up cdll
|
|
===============
|
|
|
|
Copy cdll to either your local home directory or a central directory
|
|
such as /usr/bin (this will require root access).
|
|
|
|
Copy the file cdfile to your home directory. It will require read and
|
|
write access. This a default file that contains a directory stack and
|
|
special entries.
|
|
|
|
To replace the cd command you must add commands to your login script.
|
|
The login script is one or more of:
|
|
|
|
/etc/profile
|
|
~/.bash_profile
|
|
~/.bash_login
|
|
~/.profile
|
|
~/.bashrc
|
|
/etc/bash.bashrc.local
|
|
|
|
To setup your login, ~/.bashrc is recommended, for global (and root) setup
|
|
add the commands to /etc/bash.bashrc.local
|
|
|
|
To set up on login, add the command:
|
|
. <dir>/cdll
|
|
For example if cdll is in your local home directory:
|
|
. ~/cdll
|
|
If in /usr/bin then:
|
|
. /usr/bin/cdll
|
|
|
|
If you want to use this instead of the buitin cd command then add:
|
|
alias cd='cd_new'
|
|
We would also recommend the following commands:
|
|
alias @='cd_new @'
|
|
cd -U
|
|
cd -D
|
|
|
|
If you want to use cdll's prompt facilty then add the following:
|
|
CDL_PROMPTLEN=nn
|
|
Where nn is a number described below. Initially 99 would be suitable
|
|
number.
|
|
|
|
Thus the script looks something like this:
|
|
|
|
######################################################################
|
|
# CD Setup
|
|
######################################################################
|
|
CDL_PROMPTLEN=21 # Allow a prompt length of up to 21 characters
|
|
. /usr/bin/cdll # Initialise cdll
|
|
alias cd='cd_new' # Replace the built in cd command
|
|
alias @='cd_new @' # Allow @ at the prompt to display history
|
|
cd -U # Upload directories
|
|
cd -D # Set default action to non-posix
|
|
######################################################################
|
|
|
|
The full meaning of these commands will become clear later.
|
|
|
|
There are a couple of caveats. If another program changes the directory
|
|
without calling cdll, then the directory won't be put on the stack and
|
|
also if the prompt facility is used then this will not be updated. Two
|
|
programs that can do this are pushd and popd. To update the prompt and
|
|
stack simply enter:
|
|
|
|
cd .
|
|
|
|
Note that if the previous entry on the stack is the current directory
|
|
then the stack is not updated.
|
|
|
|
Usage
|
|
=====
|
|
cd [dir] [0-9] [@[s|h] [-g <dir>] [-d] [-D] [-r<n>]
|
|
[dir|0-9] [-R<n>] [<dir>|0-9] [-s<n>] [-S<n>]
|
|
[-u] [-U] [-f] [-F] [-h] [-H] [-v]
|
|
|
|
<dir> Go to directory
|
|
0-n Goto previous directory (0 is previous,
|
|
1 is last but 1, etc.)
|
|
n is up to max history (default is 50)
|
|
@ List history and special entries (Usually available as $ @)
|
|
@h List history entries
|
|
@s List special entries
|
|
-g [<dir>] Go to literal name (bypass special names)
|
|
This is to allow access to dirs called '0','1','-h' etc
|
|
-d Change default action - verbose. (See note)
|
|
-D Change default action - silent. (See note)
|
|
-s<n> Go to the special entry <n>
|
|
-S<n> Go to the special entry <n>
|
|
and replace it with the current dir
|
|
-r<n> [<dir>] Go to directory <dir>
|
|
and then put it on special entry <n>
|
|
-R<n> [<dir>] Go to directory <dir>
|
|
and put current dir on special entry <n>
|
|
-a<n> Alternative suggested directory. See note below.
|
|
-f [<file>] File entries to <file>.
|
|
-u [<file>] Update entries from <file>.
|
|
If no filename supplied then default file (~/cdfile) is used
|
|
-F and -U are silent versions
|
|
-v Print version number
|
|
-h Help
|
|
-H Detailed help
|
|
|
|
|
|
|
|
Examples
|
|
========
|
|
|
|
These examples assume non-default mode is set (that is, cd with no
|
|
parameters will go to the most recent stack directory), that aliases
|
|
have been set up for cd and @ as described above and that cd's prompt
|
|
facility is active and the prompt length is 21 characters.
|
|
|
|
/home/phil$ @
|
|
# List the entries with the @
|
|
History:
|
|
# Output of the @ command
|
|
.....
|
|
# Skipped these entries for brevity
|
|
1 /home/phil/ummdev S1 /home/phil/perl
|
|
# Most recent two history entries
|
|
0 /home/phil/perl/eg S0 /home/phil/umm/ummdev
|
|
# and two special entries are shown
|
|
|
|
/home/phil$ cd /home/phil/utils/Cdll
|
|
# Now change directories
|
|
/home/phil/utils/Cdll$ @
|
|
# Prompt reflects the directory.
|
|
History:
|
|
# New history
|
|
.....
|
|
1 /home/phil/perl/eg S1 /home/phil/perl
|
|
# History entry 0 has moved to 1
|
|
0 /home/phil S0 /home/phil/umm/ummdev
|
|
# and the most recent has entered
|
|
|
|
To go to a history entry:
|
|
|
|
/home/phil/utils/Cdll$ cd 1
|
|
# Go to history entry 1.
|
|
/home/phil/perl/eg$
|
|
# Current directory is now what was 1
|
|
|
|
To go to a special entry:
|
|
|
|
/home/phil/perl/eg$ cd -s1
|
|
# Go to special entry 1
|
|
/home/phil/umm/ummdev$
|
|
# Current directory is S1
|
|
|
|
To go to a directory called, for example, 1:
|
|
|
|
/home/phil$ cd -g 1
|
|
# -g ignores the special meaning of 1
|
|
/home/phil/1$
|
|
|
|
To put current directory on the special list as S1:
|
|
cd -r1 . # OR
|
|
cd -R1 . # These have the same effect if the directory is
|
|
#+ . (the current directory)
|
|
|
|
To go to a directory and add it as a special
|
|
The directory for -r<n> or -R<n> may be a number.
|
|
For example:
|
|
$ cd -r3 4 Go to history entry 4 and put it on special entry 3
|
|
$ cd -R3 4 Put current dir on the special entry 3 and go to
|
|
history entry 4
|
|
$ cd -s3 Go to special entry 3
|
|
|
|
Note that commands R,r,S and s may be used without a number and
|
|
refer to 0:
|
|
$ cd -s Go to special entry 0
|
|
$ cd -S Go to special entry 0 and make special entry 0
|
|
current dir
|
|
$ cd -r 1 Go to history entry 1 and put it on special entry 0
|
|
$ cd -r Go to history entry 0 and put it on special entry 0
|
|
|
|
|
|
Alternative suggested directories:
|
|
|
|
If a directory is not found, then CD will suggest any
|
|
possibilities. These are directories starting with the same letters
|
|
and if any are found they are listed prefixed with -a<n>
|
|
where <n> is a number. It's possible to go to the directory
|
|
by entering cd -a<n> on the command line.
|
|
|
|
Use cd -d or -D to change default cd action. cd -H will show
|
|
current action.
|
|
|
|
The history entries (0-n) are stored in the environment variables
|
|
CD[0] - CD[n]
|
|
Similarly the special directories S0 - 9 are in the environment
|
|
variable CDS[0] - CDS[9]
|
|
and may be accessed from the command line, for example:
|
|
|
|
ls -l ${CDS[3]}
|
|
cat ${CD[8]}/file.txt
|
|
|
|
The default pathname for the -f and -u commands is ~
|
|
The default filename for the -f and -u commands is cdfile
|
|
|
|
|
|
Configuration
|
|
=============
|
|
|
|
The following environment variables can be set:
|
|
|
|
CDL_PROMPTLEN - Set to the length of prompt you require.
|
|
Prompt string is set to the right characters of the current
|
|
directory. If not set, then prompt is left unchanged. Note
|
|
that this is the number of characters that the directory is
|
|
shortened to, not the total characters in the prompt.
|
|
|
|
CDL_PROMPT_PRE - Set to the string to prefix the prompt.
|
|
Default is:
|
|
non-root: "\\[\\e[01;34m\\]" (sets colour to blue).
|
|
root: "\\[\\e[01;31m\\]" (sets colour to red).
|
|
|
|
CDL_PROMPT_POST - Set to the string to suffix the prompt.
|
|
Default is:
|
|
non-root: "\\[\\e[00m\\]$"
|
|
(resets colour and displays $).
|
|
root: "\\[\\e[00m\\]#"
|
|
(resets colour and displays #).
|
|
|
|
Note:
|
|
CDL_PROMPT_PRE & _POST only t
|
|
|
|
CDPath - Set the default path for the -f & -u options.
|
|
Default is home directory
|
|
CDFile - Set the default filename for the -f & -u options.
|
|
Default is cdfile
|
|
|
|
|
|
There are three variables defined in the file cdll which control the
|
|
number of entries stored or displayed. They are in the section labeled
|
|
'Initialisation here' towards the end of the file.
|
|
|
|
cd_maxhistory - The number of history entries stored.
|
|
Default is 50.
|
|
cd_maxspecial - The number of special entries allowed.
|
|
Default is 9.
|
|
cd_histcount - The number of history and special entries
|
|
displayed. Default is 9.
|
|
|
|
Note that cd_maxspecial should be >= cd_histcount to avoid displaying
|
|
special entries that can't be set.
|
|
|
|
|
|
Version: 1.2.1 Date: 24-MAY-2003
|
|
|
|
DOCUMENTATION
|