mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-15 13:34:18 +01:00
aba936b17c
22980: add hook array for special functions
172 lines
3.2 KiB
Plaintext
172 lines
3.2 KiB
Plaintext
%prep
|
|
|
|
storepath=($path)
|
|
|
|
mkdir command.tmp command.tmp/dir1 command.tmp/dir2
|
|
|
|
cd command.tmp
|
|
|
|
print '#!/bin/sh\necho This is top' >tstcmd
|
|
|
|
print '#!/bin/sh\necho This is dir1' >dir1/tstcmd
|
|
|
|
print '#!/bin/sh\necho This is dir2' >dir2/tstcmd
|
|
|
|
chmod 755 tstcmd dir1/tstcmd dir2/tstcmd
|
|
|
|
%test
|
|
./tstcmd
|
|
0:./prog execution
|
|
>This is top
|
|
|
|
path=($ZTST_testdir/command.tmp/dir1
|
|
$ZTST_testdir/command.tmp/dir2
|
|
.)
|
|
tstcmd
|
|
path=($storepath)
|
|
0:path (1)
|
|
>This is dir1
|
|
|
|
path=(. command.tmp/dir{1,2})
|
|
tstcmd
|
|
path=($storepath)
|
|
0:path (2)
|
|
>This is top
|
|
|
|
functst() { print $# arguments:; print -l $*; }
|
|
functst "Eines Morgens" "als Gregor Samsa"
|
|
functst ""
|
|
functst "aus unrühigen Träumen erwachte"
|
|
foo="fand er sich in seinem Bett"
|
|
bar=
|
|
rod="zu einem ungeheuren Ungeziefer verwandelt."
|
|
functst $foo $bar $rod
|
|
# set up alias for next test
|
|
alias foo='print This is alias one'
|
|
0:function argument passing
|
|
>2 arguments:
|
|
>Eines Morgens
|
|
>als Gregor Samsa
|
|
>1 arguments:
|
|
>
|
|
>1 arguments:
|
|
>aus unrühigen Träumen erwachte
|
|
>2 arguments:
|
|
>fand er sich in seinem Bett
|
|
>zu einem ungeheuren Ungeziefer verwandelt.
|
|
|
|
alias foo='print This is alias two'
|
|
fn() { foo; }
|
|
fn
|
|
0:Aliases in functions
|
|
>This is alias one
|
|
|
|
foo='Global foo'
|
|
traptst() { local foo="Local foo"; trap 'print $foo' EXIT; }
|
|
traptst
|
|
0:EXIT trap environment
|
|
>Global foo
|
|
|
|
functst() { return 0; print Ha ha; return 1; }
|
|
functst
|
|
0:return (1)
|
|
|
|
functst() { return 1; print Ho ho; return 0; }
|
|
functst
|
|
1:return (2)
|
|
|
|
unfunction functst
|
|
fpath=(.)
|
|
print "print This is functst." >functst
|
|
autoload functst
|
|
functst
|
|
0:autoloading (1)
|
|
>This is functst.
|
|
|
|
unfunction functst
|
|
print "functst() { print This, too, is functst; }; print Hello." >functst
|
|
typeset -fu functst
|
|
functst
|
|
functst
|
|
0:autoloading with initialization
|
|
>Hello.
|
|
>This, too, is functst
|
|
|
|
unfunction functst
|
|
print "print Yet another version" >functst
|
|
functst() { autoload -X; }
|
|
functst
|
|
0:autoloading via -X
|
|
>Yet another version
|
|
|
|
chpwd() { print Changed to $PWD; }
|
|
cd .
|
|
unfunction chpwd
|
|
0q:chpwd
|
|
>Changed to $ZTST_testdir/command.tmp
|
|
|
|
chpwd() { print chpwd: changed to $PWD; }
|
|
chpwdfn1() { print chpwdfn1: changed to $PWD; }
|
|
chpwdfn2() { print chpwdfn2: changed to $PWD; }
|
|
chpwd_functions=(chpwdfn1 '' chpwdnonexistentfn chpwdfn2)
|
|
cd .
|
|
unfunction chpwd
|
|
unset chpwd_functions
|
|
0q:chpwd_functions
|
|
>chpwd: changed to $ZTST_testdir/command.tmp
|
|
>chpwdfn1: changed to $ZTST_testdir/command.tmp
|
|
>chpwdfn2: changed to $ZTST_testdir/command.tmp
|
|
|
|
# Hard to test periodic, precmd and preexec non-interactively.
|
|
|
|
fn() { TRAPEXIT() { print Exit; }; }
|
|
fn
|
|
0:TRAPEXIT
|
|
>Exit
|
|
|
|
unfunction fn
|
|
print 'TRAPDEBUG() {
|
|
print Line $LINENO
|
|
}
|
|
:
|
|
unfunction TRAPDEBUG
|
|
' > fn
|
|
autoload fn
|
|
fn
|
|
rm fn
|
|
0:TRAPDEBUG
|
|
>Line 1
|
|
>Line 1
|
|
|
|
unfunction fn
|
|
print 'trap '\''print Line $LINENO'\'' DEBUG
|
|
:
|
|
trap - DEBUG
|
|
' > fn
|
|
autoload fn
|
|
fn
|
|
rm fn
|
|
0:trap DEBUG
|
|
>Line 1
|
|
>Line 2
|
|
|
|
TRAPZERR() { print Command failed; }
|
|
true
|
|
false
|
|
true
|
|
false
|
|
unfunction TRAPZERR
|
|
0:TRAPZERR
|
|
>Command failed
|
|
>Command failed
|
|
|
|
trap 'print Command failed again.' ZERR
|
|
true
|
|
false
|
|
true
|
|
false
|
|
trap - ZERR
|
|
0:trap ZERR
|
|
>Command failed again.
|
|
>Command failed again.
|