aboutsummaryrefslogtreecommitdiffhomepage
path: root/doc_src/function.txt
blob: 829530f6e9d6e9ec59ce989a73d3366af55a35e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
\section function function - create a function

\subsection function-synopsis Synopsis
 <code>function [OPTIONS] NAME; BODY; end </code>

\subsection function-description Description

- <code>-d DESCRIPTION</code> or \c --description=DESCRIPTION is a description of what the function does, suitable as a completion description
- <code>-e</code> or <code>--on-event EVENT_NAME</code> tells fish to run this function when the specified named event is emitted. Fish internally generates named events e.g. when showing the prompt.
- <code>-j PID</code> or <code> --on-job-exit PID</code> tells fish to run this function when the job with group id PID exits. Instead of PID, the string 'caller' can be specified. This is only legal when in a command substitution, and will result in the handler being triggered by the exit of the job which created this command substitution.
- <code>-p PID</code> or <code> --on-process-exit PID</code> tells fish to run this function when the fish child process with process id PID exits
- <code>-s</code> or <code>--on-signal SIGSPEC</code> tells fish to run this function when the signal SIGSPEC is delivered. SIGSPEC can be a signal number, or the signal name, such as SIGHUP (or just HUP)
- <code>-v</code> or <code>--on-variable VARIABLE_NAME</code> tells fish to run this function when the variable VARIABLE_NAME changes value

This builtin command is used to create a new function. A function is a
list of commands that will be executed when the name of the function
is entered. The function

<pre>
function hi
	echo hello
end
</pre>

will write <code>hello</code> whenever the user enters \c hi.

If the user enters any additional arguments after the function, they
are inserted into the environment <a href="index.html#variables-arrays">variable array</a> argv.

By using one of the event handler switches, a function can be made to run automatically at specific events. The user may generate new events using the <a href='#emit">emit</a> builtin. Fish generates the following named events:

- \c fish_prompt, which is emitted whenever a new fish prompt is about to be displayed
- \c fish_command_not_found, which is emitted whenever a command lookup failed

\subsection function-example Example

<pre>
function ll
	ls -l $argv
end
</pre>

will run the \c ls command, using the \c -l option, while passing on any additional files and switches to \c ls.

<pre>
function mkdir -d "Create a directory and set CWD"
	mkdir $argv
	if test $status = 0
		switch $argv[(count $argv)]
			case '-*'

			case '*'
				cd $argv[(count $argv)]
				return
		end
	end
end
</pre>

will run the mkdir command, and if it is successful, change the
current working directory to the one just created.