mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
added documentation pages from Dave Korn's old web site
This commit is contained in:
parent
82a89f64a9
commit
a30e7b7fa9
20 changed files with 2777 additions and 0 deletions
111
docs/ksh/functions/dirs.txt
Normal file
111
docs/ksh/functions/dirs.txt
Normal file
|
@ -0,0 +1,111 @@
|
|||
#
|
||||
# DIRECTORY MANIPULATION FUNCTIONS PUSHD, POPD AND DIRS
|
||||
#
|
||||
# Uses global parameters _push_max _push_top _push_stack
|
||||
integer _push_max=100 _push_top=100
|
||||
# Display directory stack -- $HOME displayed as ~
|
||||
function dirs
|
||||
{
|
||||
typeset dir="${PWD#$HOME/}"
|
||||
case $dir in
|
||||
$HOME)
|
||||
dir=\~
|
||||
;;
|
||||
/*) ;;
|
||||
*) dir=\~/$dir
|
||||
esac
|
||||
print -r - "$dir ${_push_stack[@]}"
|
||||
}
|
||||
|
||||
# Change directory and put directory on front of stack
|
||||
function pushd
|
||||
{
|
||||
typeset dir= type=0
|
||||
integer i
|
||||
case $1 in
|
||||
"") # pushd
|
||||
if ((_push_top >= _push_max))
|
||||
then print pushd: No other directory.
|
||||
return 1
|
||||
fi
|
||||
type=1 dir=${_push_stack[_push_top]}
|
||||
;;
|
||||
+[1-9]|+[1-9][0-9]) # pushd +n
|
||||
integer i=_push_top$1-1
|
||||
if ((i >= _push_max))
|
||||
then print pushd: Directory stack not that deep.
|
||||
return 1
|
||||
fi
|
||||
type=2 dir=${_push_stack[i]}
|
||||
;;
|
||||
*) if ((_push_top <= 0))
|
||||
then print pushd: Directory stack overflow.
|
||||
return 1
|
||||
fi
|
||||
esac
|
||||
case $dir in
|
||||
\~*) dir=$HOME${dir#\~}
|
||||
esac
|
||||
cd "${dir:-$1}" > /dev/null || return 1
|
||||
dir=${OLDPWD#$HOME/}
|
||||
case $dir in
|
||||
$HOME)
|
||||
dir=\~
|
||||
;;
|
||||
/*) ;;
|
||||
*) dir=\~/$dir
|
||||
esac
|
||||
case $type in
|
||||
0) # pushd name
|
||||
_push_stack[_push_top=_push_top-1]=$dir
|
||||
;;
|
||||
1) # pushd
|
||||
_push_stack[_push_top]=$dir
|
||||
;;
|
||||
2) # push +n
|
||||
type=${1#+} i=_push_top-1
|
||||
set -- "${_push_stack[@]}" "$dir" "${_push_stack[@]}"
|
||||
shift $type
|
||||
for dir
|
||||
do (((i=i+1) < _push_max)) || break
|
||||
_push_stack[i]=$dir
|
||||
done
|
||||
esac
|
||||
dirs
|
||||
}
|
||||
|
||||
# Pops the top directory
|
||||
function popd
|
||||
{
|
||||
typeset dir
|
||||
if ((_push_top >= _push_max))
|
||||
then print popd: Nothing to pop.
|
||||
return 1
|
||||
fi
|
||||
case $1 in
|
||||
"")
|
||||
dir=${_push_stack[_push_top]}
|
||||
case $dir in
|
||||
\~*) dir=$HOME${dir#\~}
|
||||
esac
|
||||
cd "$dir" || return 1
|
||||
;;
|
||||
+[1-9]|+[1-9][0-9])
|
||||
typeset savedir
|
||||
integer i=_push_top$1-1
|
||||
if ((i >= _push_max))
|
||||
then print pushd: Directory stack not that deep.
|
||||
return 1
|
||||
fi
|
||||
while ((i > _push_top))
|
||||
do _push_stack[i]=${_push_stack[i-1]}
|
||||
i=i-1
|
||||
done
|
||||
;;
|
||||
*) print pushd: Bad directory.
|
||||
return 1
|
||||
esac
|
||||
unset '_push_stack[_push_top]'
|
||||
_push_top=_push_top+1
|
||||
dirs
|
||||
}
|
12
docs/ksh/functions/emacs_keybind.txt
Normal file
12
docs/ksh/functions/emacs_keybind.txt
Normal file
|
@ -0,0 +1,12 @@
|
|||
typeset -A Keytable
|
||||
trap 'eval "${Keytable[${.sh.edchar}]}"' KEYBD
|
||||
function emacs_keybind
|
||||
{
|
||||
keybind $'\E[A' $'\020' # Up key
|
||||
keybind $'\E[B' $'\016' # Down key
|
||||
keybind $'\E[C' $'\06' # Right key
|
||||
keybind $'\E[D' $'\02' # Left key
|
||||
keybind $'\E[H' $'\01' # Home key
|
||||
keybind $'\E[Y' $'\05' # End key
|
||||
keybind $'\t' $'\E\E' # Tab for command-line completion
|
||||
}
|
28
docs/ksh/functions/getopt.txt
Normal file
28
docs/ksh/functions/getopt.txt
Normal file
|
@ -0,0 +1,28 @@
|
|||
function getopt
|
||||
{
|
||||
typeset c optstring=$1 options= sep=
|
||||
shift
|
||||
while getopts $optstring c
|
||||
do case $c in
|
||||
[:?])
|
||||
exit 2
|
||||
;;
|
||||
*)
|
||||
options="$options$sep-$c"
|
||||
sep=' '
|
||||
if [[ $optstring == *$c:* ]]
|
||||
then options=" $options $OPTARG"
|
||||
fi
|
||||
#then print -rn -- " -$c" "$OPTARG"
|
||||
#else print -rn -- " -$c"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
print -rn -- "$options"
|
||||
if [[ ${@:$OPTIND-1} != -- ]]
|
||||
then print -rn -- " --"
|
||||
fi
|
||||
if [[ -n ${@:$OPTIND} ]]
|
||||
then print -r -- " ${@:$OPTIND}"
|
||||
fi
|
||||
}
|
14
docs/ksh/functions/keybind.txt
Normal file
14
docs/ksh/functions/keybind.txt
Normal file
|
@ -0,0 +1,14 @@
|
|||
typeset -A Keytable
|
||||
trap 'eval "${Keytable[${.sh.edchar}]}"' KEYBD
|
||||
function keybind # key action
|
||||
{
|
||||
typeset key=$(print -f "%q" "$2")
|
||||
case $# in
|
||||
2) Keytable[$1]='.sh.edchar=${.sh.edmode}'"$key"
|
||||
;;
|
||||
1) unset Keytable[$1]
|
||||
;;
|
||||
*) print -u2 "Usage: $0 key [action]"
|
||||
;;
|
||||
esac
|
||||
}
|
111
docs/ksh/functions/popd.txt
Normal file
111
docs/ksh/functions/popd.txt
Normal file
|
@ -0,0 +1,111 @@
|
|||
#
|
||||
# DIRECTORY MANIPULATION FUNCTIONS PUSHD, POPD AND DIRS
|
||||
#
|
||||
# Uses global parameters _push_max _push_top _push_stack
|
||||
integer _push_max=100 _push_top=100
|
||||
# Display directory stack -- $HOME displayed as ~
|
||||
function dirs
|
||||
{
|
||||
typeset dir="${PWD#$HOME/}"
|
||||
case $dir in
|
||||
$HOME)
|
||||
dir=\~
|
||||
;;
|
||||
/*) ;;
|
||||
*) dir=\~/$dir
|
||||
esac
|
||||
print -r - "$dir ${_push_stack[@]}"
|
||||
}
|
||||
|
||||
# Change directory and put directory on front of stack
|
||||
function pushd
|
||||
{
|
||||
typeset dir= type=0
|
||||
integer i
|
||||
case $1 in
|
||||
"") # pushd
|
||||
if ((_push_top >= _push_max))
|
||||
then print pushd: No other directory.
|
||||
return 1
|
||||
fi
|
||||
type=1 dir=${_push_stack[_push_top]}
|
||||
;;
|
||||
+[1-9]|+[1-9][0-9]) # pushd +n
|
||||
integer i=_push_top$1-1
|
||||
if ((i >= _push_max))
|
||||
then print pushd: Directory stack not that deep.
|
||||
return 1
|
||||
fi
|
||||
type=2 dir=${_push_stack[i]}
|
||||
;;
|
||||
*) if ((_push_top <= 0))
|
||||
then print pushd: Directory stack overflow.
|
||||
return 1
|
||||
fi
|
||||
esac
|
||||
case $dir in
|
||||
\~*) dir=$HOME${dir#~}
|
||||
esac
|
||||
cd "${dir:-$1}" > /dev/null || return 1
|
||||
dir=${OLDPWD#$HOME/}
|
||||
case $dir in
|
||||
$HOME)
|
||||
dir=\~
|
||||
;;
|
||||
/*) ;;
|
||||
*) dir=\~/$dir
|
||||
esac
|
||||
case $type in
|
||||
0) # pushd name
|
||||
_push_stack[_push_top=_push_top-1]=$dir
|
||||
;;
|
||||
1) # pushd
|
||||
_push_stack[_push_top]=$dir
|
||||
;;
|
||||
2) # push +n
|
||||
type=${1#+} i=_push_top-1
|
||||
set -- "${_push_stack[@]}" "$dir" "${_push_stack[@]}"
|
||||
shift $type
|
||||
for dir
|
||||
do (((i=i+1) < _push_max)) || break
|
||||
_push_stack[i]=$dir
|
||||
done
|
||||
esac
|
||||
dirs
|
||||
}
|
||||
|
||||
# Pops the top directory
|
||||
function popd
|
||||
{
|
||||
typeset dir
|
||||
if ((_push_top >= _push_max))
|
||||
then print popd: Nothing to pop.
|
||||
return 1
|
||||
fi
|
||||
case $1 in
|
||||
"")
|
||||
dir=${_push_stack[_push_top]}
|
||||
case $dir in
|
||||
\~*) dir=$HOME${dir#~}
|
||||
esac
|
||||
cd "$dir" || return 1
|
||||
;;
|
||||
+[1-9]|+[1-9][0-9])
|
||||
typeset savedir
|
||||
integer i=_push_top$1-1
|
||||
if ((i >= _push_max))
|
||||
then print pushd: Directory stack not that deep.
|
||||
return 1
|
||||
fi
|
||||
while ((i > _push_top))
|
||||
do _push_stack[i]=${_push_stack[i-1]}
|
||||
i=i-1
|
||||
done
|
||||
;;
|
||||
*) print pushd: Bad directory.
|
||||
return 1
|
||||
esac
|
||||
unset '_push_stack[_push_top]'
|
||||
_push_top=_push_top+1
|
||||
dirs
|
||||
}
|
111
docs/ksh/functions/pushd.txt
Normal file
111
docs/ksh/functions/pushd.txt
Normal file
|
@ -0,0 +1,111 @@
|
|||
#
|
||||
# DIRECTORY MANIPULATION FUNCTIONS PUSHD, POPD AND DIRS
|
||||
#
|
||||
# Uses global parameters _push_max _push_top _push_stack
|
||||
integer _push_max=100 _push_top=100
|
||||
# Display directory stack -- $HOME displayed as ~
|
||||
function dirs
|
||||
{
|
||||
typeset dir="${PWD#$HOME/}"
|
||||
case $dir in
|
||||
$HOME)
|
||||
dir=\~
|
||||
;;
|
||||
/*) ;;
|
||||
*) dir=\~/$dir
|
||||
esac
|
||||
print -r - "$dir ${_push_stack[@]}"
|
||||
}
|
||||
|
||||
# Change directory and put directory on front of stack
|
||||
function pushd
|
||||
{
|
||||
typeset dir= type=0
|
||||
integer i
|
||||
case $1 in
|
||||
"") # pushd
|
||||
if ((_push_top >= _push_max))
|
||||
then print pushd: No other directory.
|
||||
return 1
|
||||
fi
|
||||
type=1 dir=${_push_stack[_push_top]}
|
||||
;;
|
||||
+[1-9]|+[1-9][0-9]) # pushd +n
|
||||
integer i=_push_top$1-1
|
||||
if ((i >= _push_max))
|
||||
then print pushd: Directory stack not that deep.
|
||||
return 1
|
||||
fi
|
||||
type=2 dir=${_push_stack[i]}
|
||||
;;
|
||||
*) if ((_push_top <= 0))
|
||||
then print pushd: Directory stack overflow.
|
||||
return 1
|
||||
fi
|
||||
esac
|
||||
case $dir in
|
||||
\~*) dir=$HOME${dir#\~}
|
||||
esac
|
||||
cd "${dir:-$1}" > /dev/null || return 1
|
||||
dir=${OLDPWD#$HOME/}
|
||||
case $dir in
|
||||
$HOME)
|
||||
dir=\~
|
||||
;;
|
||||
/*) ;;
|
||||
*) dir=\~/$dir
|
||||
esac
|
||||
case $type in
|
||||
0) # pushd name
|
||||
_push_stack[_push_top=_push_top-1]=$dir
|
||||
;;
|
||||
1) # pushd
|
||||
_push_stack[_push_top]=$dir
|
||||
;;
|
||||
2) # push +n
|
||||
type=${1#+} i=_push_top-1
|
||||
set -- "${_push_stack[@]}" "$dir" "${_push_stack[@]}"
|
||||
shift $type
|
||||
for dir
|
||||
do (((i=i+1) < _push_max)) || break
|
||||
_push_stack[i]=$dir
|
||||
done
|
||||
esac
|
||||
dirs
|
||||
}
|
||||
|
||||
# Pops the top directory
|
||||
function popd
|
||||
{
|
||||
typeset dir
|
||||
if ((_push_top >= _push_max))
|
||||
then print popd: Nothing to pop.
|
||||
return 1
|
||||
fi
|
||||
case $1 in
|
||||
"")
|
||||
dir=${_push_stack[_push_top]}
|
||||
case $dir in
|
||||
\~*) dir=$HOME${dir#\~}
|
||||
esac
|
||||
cd "$dir" || return 1
|
||||
;;
|
||||
+[1-9]|+[1-9][0-9])
|
||||
typeset savedir
|
||||
integer i=_push_top$1-1
|
||||
if ((i >= _push_max))
|
||||
then print pushd: Directory stack not that deep.
|
||||
return 1
|
||||
fi
|
||||
while ((i > _push_top))
|
||||
do _push_stack[i]=${_push_stack[i-1]}
|
||||
i=i-1
|
||||
done
|
||||
;;
|
||||
*) print pushd: Bad directory.
|
||||
return 1
|
||||
esac
|
||||
unset '_push_stack[_push_top]'
|
||||
_push_top=_push_top+1
|
||||
dirs
|
||||
}
|
54
docs/ksh/functions/title.txt
Normal file
54
docs/ksh/functions/title.txt
Normal file
|
@ -0,0 +1,54 @@
|
|||
# add to (+), delete from (-), print (.), or set ([=]) window title
|
||||
# arguments are eval'd before printing
|
||||
# title text string exported in TITLE_TEXT
|
||||
|
||||
function title # [+ | - | =] title ...
|
||||
{
|
||||
typeset x t="$TITLE_TEXT"
|
||||
|
||||
case $1 in
|
||||
+) shift
|
||||
case $# in
|
||||
0) ;;
|
||||
*) for x
|
||||
do case " $t " in
|
||||
*" $x "*) ;;
|
||||
" ") t=$x ;;
|
||||
*) t="$t $x" ;;
|
||||
esac
|
||||
done
|
||||
case $t in
|
||||
$TITLE_TEXT) return 1 ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
-) shift
|
||||
case $# in
|
||||
0) ;;
|
||||
*) for x
|
||||
do case " $t " in
|
||||
*" $x "*) t="${t%?( )$x*}${t##*$x?( )}" ;;
|
||||
esac
|
||||
done
|
||||
case $t in
|
||||
$TITLE_TEXT) return 1 ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
.) print -r -- "$TITLE_TEXT"
|
||||
return 0
|
||||
;;
|
||||
*) t="$*"
|
||||
;;
|
||||
esac
|
||||
export TITLE_TEXT="$t"
|
||||
eval x=\"$t\"
|
||||
case $TERM in
|
||||
630*) print -nr -- "[?${#x};0v$x" ;;
|
||||
vt100|xterm*) print -nr -- "]0;$x" ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
return 0
|
||||
}
|
10
docs/ksh/functions/vi_keybind.txt
Normal file
10
docs/ksh/functions/vi_keybind.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
typeset -A Keytable
|
||||
trap 'eval "${Keytable[${.sh.edchar}]}"' KEYBD
|
||||
function vi_keybind
|
||||
{
|
||||
keybind $'\E[A' k # Up key
|
||||
keybind $'\E[B' j # Down key
|
||||
keybind $'\E[C' l # Right key
|
||||
keybind $'\E[D' h # Left key
|
||||
keybind $'\t' '\' # Tab for command-line completion
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue