fish-shell/doc_src/cmds/functions.rst
Fabian Boehm 38b24c2325 docs: Use :doc: role when linking to commands
This makes it so we link to the very top of the document instead of a
special anchor we manually include.

So clicking e.g. :doc:`string <cmds/string>` will link you to
cmds/string.html instead of cmds/string.html#cmd-string.

I would love to have a way to say "this document from the root of the
document path", but that doesn't appear to work, I tried
`/cmds/string`.

So we'll just have to use cmds/string in normal documents and plain
`string` from other commands.
2022-09-24 10:56:43 +02:00

98 lines
3.6 KiB
ReStructuredText

.. _cmd-functions:
functions - print or erase functions
====================================
Synopsis
--------
.. synopsis::
functions [-a | --all] [-n | --names]
functions [-D | --details] [-v] FUNCTION
functions -c OLDNAME NEWNAME
functions -d DESCRIPTION FUNCTION
functions [-e | -q] FUNCTION ...
Description
-----------
``functions`` prints or erases functions.
The following options are available:
**-a** or **--all**
Lists all functions, even those whose name starts with an underscore.
**-c** or **--copy** *OLDNAME* *NEWNAME*
Creates a new function named *NEWNAME*, using the definition of the *OLDNAME* function.
**-d** or **--description** *DESCRIPTION*
Changes the description of this function.
**-e** or **--erase**
Causes the specified functions to be erased. This also means that it is prevented from autoloading in the current session. Use :doc:`funcsave <funcsave>` to remove the saved copy.
**-D** or **--details**
Reports the path name where the specified function is defined or could be autoloaded, ``stdin`` if the function was defined interactively or on the command line or by reading standard input, **-** if the function was created via :doc:`source <source>`, and ``n/a`` if the function isn't available. (Functions created via :doc:`alias <alias>` will return **-**, because ``alias`` uses ``source`` internally.) If the **--verbose** option is also specified then five lines are written:
- the pathname as already described,
- ``autoloaded``, ``not-autoloaded`` or ``n/a``,
- the line number within the file or zero if not applicable,
- ``scope-shadowing`` if the function shadows the vars in the calling function (the normal case if it wasn't defined with **--no-scope-shadowing**), else ``no-scope-shadowing``, or ``n/a`` if the function isn't defined,
- the function description minimally escaped so it is a single line, or ``n/a`` if the function isn't defined or has no description.
You should not assume that only five lines will be written since we may add additional information to the output in the future.
**--no-details**
Turns off function path reporting, so just the definition will be printed.
**-n** or **--names**
Lists the names of all defined functions.
**-q** or **--query**
Tests if the specified functions exist.
**-v** or **--verbose**
Make some output more verbose.
**-H** or **--handlers**
Show all event handlers.
**-t** or **--handlers-type** *TYPE*
Show all event handlers matching the given *TYPE*.
**-h** or **--help**
Displays help about using this command.
The default behavior of ``functions``, when called with no arguments, is to print the names of all defined functions. Unless the ``-a`` option is given, no functions starting with underscores are included in the output.
If any non-option parameters are given, the definition of the specified functions are printed.
Copying a function using ``-c`` copies only the body of the function, and does not attach any event notifications from the original function.
Only one function's description can be changed in a single invocation of ``functions -d``.
The exit status of ``functions`` is the number of functions specified in the argument list that do not exist, which can be used in concert with the ``-q`` option.
Examples
--------
::
functions -n
# Displays a list of currently-defined functions
functions -c foo bar
# Copies the 'foo' function to a new function called 'bar'
functions -e bar
# Erases the function ``bar``
See more
--------
For more explanation of how functions fit into fish, see :ref:`Functions <syntax-function>`.