2021-05-11 02:29:21 +02:00
|
|
|
|
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
|
|
|
|
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
|
|
|
|
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
|
|
|
|
|
|
|
|
|
|
- [22 Zsh Modules](#22-zsh-modules)
|
|
|
|
|
- [22.1 Description](#221-description)
|
|
|
|
|
- [22.2 The zsh/attr Module](#222-the-zshattr-module)
|
|
|
|
|
- [22.3 The zsh/cap Module](#223-the-zshcap-module)
|
|
|
|
|
- [22.4 The zsh/clone Module](#224-the-zshclone-module)
|
|
|
|
|
- [22.5 The zsh/compctl Module](#225-the-zshcompctl-module)
|
|
|
|
|
- [22.6 The zsh/complete Module](#226-the-zshcomplete-module)
|
|
|
|
|
- [22.7 The zsh/complist Module](#227-the-zshcomplist-module)
|
|
|
|
|
- [22.7.1 Colored completion listings](#2271-colored-completion-listings)
|
|
|
|
|
- [22.7.2 Scrolling in completion listings](#2272-scrolling-in-completion-listings)
|
|
|
|
|
- [22.7.3 Menu selection](#2273-menu-selection)
|
|
|
|
|
- [22.8 The zsh/computil Module](#228-the-zshcomputil-module)
|
|
|
|
|
- [22.9 The zsh/curses Module](#229-the-zshcurses-module)
|
|
|
|
|
- [22.9.1 Builtin](#2291-builtin)
|
|
|
|
|
- [22.9.2 Parameters](#2292-parameters)
|
|
|
|
|
- [22.10 The zsh/datetime Module](#2210-the-zshdatetime-module)
|
|
|
|
|
- [22.11 The zsh/db/gdbm Module](#2211-the-zshdbgdbm-module)
|
|
|
|
|
- [22.12 The zsh/deltochar Module](#2212-the-zshdeltochar-module)
|
|
|
|
|
- [22.13 The zsh/example Module](#2213-the-zshexample-module)
|
|
|
|
|
- [22.14 The zsh/files Module](#2214-the-zshfiles-module)
|
|
|
|
|
- [22.15 The zsh/langinfo Module](#2215-the-zshlanginfo-module)
|
|
|
|
|
- [22.16 The zsh/mapfile Module](#2216-the-zshmapfile-module)
|
|
|
|
|
- [22.16.1 Limitations](#22161-limitations)
|
|
|
|
|
- [22.17 The zsh/mathfunc Module](#2217-the-zshmathfunc-module)
|
|
|
|
|
- [22.18 The zsh/nearcolor Module](#2218-the-zshnearcolor-module)
|
|
|
|
|
- [22.19 The zsh/newuser Module](#2219-the-zshnewuser-module)
|
|
|
|
|
- [22.20 The zsh/parameter Module](#2220-the-zshparameter-module)
|
|
|
|
|
- [22.21 The zsh/pcre Module](#2221-the-zshpcre-module)
|
|
|
|
|
- [22.22 The zsh/param/private Module](#2222-the-zshparamprivate-module)
|
|
|
|
|
- [22.23 The zsh/regex Module](#2223-the-zshregex-module)
|
|
|
|
|
- [22.24 The zsh/sched Module](#2224-the-zshsched-module)
|
|
|
|
|
- [22.25 The zsh/net/socket Module](#2225-the-zshnetsocket-module)
|
|
|
|
|
- [22.25.1 Outbound Connections](#22251-outbound-connections)
|
|
|
|
|
- [22.25.2 Inbound Connections](#22252-inbound-connections)
|
|
|
|
|
- [22.26 The zsh/stat Module](#2226-the-zshstat-module)
|
|
|
|
|
- [22.27 The zsh/system Module](#2227-the-zshsystem-module)
|
|
|
|
|
- [22.27.1 Builtins](#22271-builtins)
|
|
|
|
|
- [22.27.2 Math Functions](#22272-math-functions)
|
|
|
|
|
- [22.27.3 Parameters](#22273-parameters)
|
|
|
|
|
- [22.28 The zsh/net/tcp Module](#2228-the-zshnettcp-module)
|
|
|
|
|
- [22.28.1 Outbound Connections](#22281-outbound-connections)
|
|
|
|
|
- [22.28.2 Inbound Connections](#22282-inbound-connections)
|
|
|
|
|
- [22.28.3 Closing Connections](#22283-closing-connections)
|
|
|
|
|
- [22.28.4 Example](#22284-example)
|
|
|
|
|
- [22.29 The zsh/termcap Module](#2229-the-zshtermcap-module)
|
|
|
|
|
- [22.30 The zsh/terminfo Module](#2230-the-zshterminfo-module)
|
2022-08-24 15:13:36 +02:00
|
|
|
|
- [22.31 The zsh/watch Module](#2231-the-zshwatch-module)
|
|
|
|
|
- [22.32 The zsh/zftp Module](#2232-the-zshzftp-module)
|
|
|
|
|
- [22.32.1 Subcommands](#22321-subcommands)
|
|
|
|
|
- [22.32.2 Parameters](#22322-parameters)
|
|
|
|
|
- [22.32.3 Functions](#22323-functions)
|
|
|
|
|
- [22.32.4 Problems](#22324-problems)
|
|
|
|
|
- [22.33 The zsh/zle Module](#2233-the-zshzle-module)
|
|
|
|
|
- [22.34 The zsh/zleparameter Module](#2234-the-zshzleparameter-module)
|
|
|
|
|
- [22.35 The zsh/zprof Module](#2235-the-zshzprof-module)
|
|
|
|
|
- [22.36 The zsh/zpty Module](#2236-the-zshzpty-module)
|
|
|
|
|
- [22.37 The zsh/zselect Module](#2237-the-zshzselect-module)
|
|
|
|
|
- [22.38 The zsh/zutil Module](#2238-the-zshzutil-module)
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
|
|
|
|
|
|
|
|
|
<span id="Zsh-Modules"></span> <span id="Zsh-Modules-1"></span>
|
|
|
|
|
|
|
|
|
|
# 22 Zsh Modules
|
|
|
|
|
|
|
|
|
|
<span id="index-modules"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="Description-4"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.1 Description
|
|
|
|
|
|
|
|
|
|
Some optional parts of zsh are in modules, separate from the core of the
|
|
|
|
|
shell. Each of these modules may be linked in to the shell at build
|
|
|
|
|
time, or can be dynamically linked while the shell is running if the
|
|
|
|
|
installation supports this feature. Modules are linked at runtime with
|
2022-08-24 15:13:36 +02:00
|
|
|
|
the zmodload command, see [Shell Builtin
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Commands](Shell-Builtin-Commands.html#Shell-Builtin-Commands).
|
|
|
|
|
|
|
|
|
|
The modules that are bundled with the zsh distribution are:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/attr
|
|
|
|
|
Builtins for manipulating extended attributes (xattr).
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/cap
|
|
|
|
|
Builtins for manipulating POSIX.1e (POSIX.6) capability (privilege)
|
|
|
|
|
sets.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/clone
|
|
|
|
|
A builtin that can clone a running shell onto another terminal.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/compctl
|
|
|
|
|
The compctl builtin for controlling completion.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/complete
|
|
|
|
|
The basic completion code.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/complist
|
|
|
|
|
Completion listing extensions.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/computil
|
|
|
|
|
A module with utility builtins needed for the shell function based
|
|
|
|
|
completion system.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/curses
|
|
|
|
|
curses windowing commands
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/datetime
|
|
|
|
|
Some date/time commands and parameters.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/db/gdbm
|
|
|
|
|
Builtins for managing associative array parameters tied to GDBM
|
|
|
|
|
databases.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/deltochar
|
|
|
|
|
A ZLE function duplicating EMACS’ zap-to-char.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/example
|
|
|
|
|
An example of how to write a module.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/files
|
|
|
|
|
Some basic file manipulation commands as builtins.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/langinfo
|
|
|
|
|
Interface to locale information.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/mapfile
|
|
|
|
|
Access to external files via a special associative array.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/mathfunc
|
|
|
|
|
Standard scientific functions for use in mathematical evaluations.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/nearcolor
|
|
|
|
|
Map colours to the nearest colour in the available palette.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/newuser
|
|
|
|
|
Arrange for files for new users to be installed.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/parameter
|
|
|
|
|
zsh/pcre
|
|
|
|
|
Interface to the PCRE library.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/param/private
|
|
|
|
|
Builtins for managing private-scoped parameters in function context.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/regex
|
|
|
|
|
Interface to the POSIX regex library.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/sched
|
|
|
|
|
A builtin that provides a timed execution facility within the shell.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/net/socket
|
|
|
|
|
Manipulation of Unix domain sockets
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/stat
|
|
|
|
|
A builtin command interface to the stat system call.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/system
|
|
|
|
|
A builtin interface to various low-level system features.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/net/tcp
|
|
|
|
|
Manipulation of TCP sockets
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/termcap
|
|
|
|
|
Interface to the termcap database.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/terminfo
|
|
|
|
|
Interface to the terminfo database.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/watch
|
|
|
|
|
Reporting of login and logout events.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/zftp
|
|
|
|
|
A builtin FTP client.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/zle
|
|
|
|
|
The Zsh Line Editor, including the bindkey and vared builtins.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/zleparameter
|
|
|
|
|
Access to internals of the Zsh Line Editor via parameters.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/zprof
|
|
|
|
|
A module allowing profiling for shell functions.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/zpty
|
|
|
|
|
A builtin for starting a command in a pseudo-terminal.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/zselect
|
|
|
|
|
Block and return when file descriptors are ready.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/zutil
|
|
|
|
|
Some utility builtins, e.g. the one for supporting configuration via
|
|
|
|
|
styles.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
<span id="The-zsh_002fattr-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fattr-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.2 The zsh/attr Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/attr module is used for manipulating extended attributes. The -h
|
|
|
|
|
option causes all commands to operate on symbolic links instead of their
|
|
|
|
|
targets. The builtins in this module are:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-zgetattr"></span> <span
|
|
|
|
|
id="index-extended-attributes_002c-xattr_002c-getting-from-files"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zgetattr \[ -h \] `filename` `attribute` \[ `parameter` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Get the extended attribute `attribute` from the specified `filename`. If
|
|
|
|
|
the optional argument `parameter` is given, the attribute is set on that
|
|
|
|
|
parameter instead of being printed to stdout.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-zsetattr"></span> <span
|
|
|
|
|
id="index-extended-attributes_002c-xattr_002c-setting-on-files"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsetattr \[ -h \] `filename` `attribute` `value`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Set the extended attribute `attribute` on the specified `filename` to
|
|
|
|
|
`value`.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-zdelattr"></span> <span
|
|
|
|
|
id="index-extended-attributes_002c-xattr_002c-removing_002c-deleting"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zdelattr \[ -h \] `filename` `attribute`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Remove the extended attribute `attribute` from the specified `filename`.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-zlistattr"></span> <span
|
|
|
|
|
id="index-extended-attributes_002c-xattr_002c-listing"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zlistattr \[ -h \] `filename` \[ `parameter` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
List the extended attributes currently set on the specified `filename`.
|
|
|
|
|
If the optional argument `parameter` is given, the list of attributes is
|
|
|
|
|
set on that parameter instead of being printed to stdout.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zgetattr and zlistattr allocate memory dynamically. If the attribute or
|
|
|
|
|
list of attributes grows between the allocation and the call to get
|
2021-05-11 02:29:21 +02:00
|
|
|
|
them, they return 2. On all other errors, 1 is returned. This allows the
|
|
|
|
|
calling function to check for this case and retry.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fcap-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fcap-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.3 The zsh/cap Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/cap module is used for manipulating POSIX.1e (POSIX.6)
|
2021-05-11 02:29:21 +02:00
|
|
|
|
capability sets. If the operating system does not support this
|
|
|
|
|
interface, the builtins defined by this module will do nothing. The
|
|
|
|
|
builtins in this module are:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-cap"></span> <span
|
|
|
|
|
id="index-capabilities_002c-setting"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
cap \[ `capabilities` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Change the shell’s process capability sets to the specified
|
|
|
|
|
`capabilities`, otherwise display the shell’s current capabilities.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-getcap"></span> <span
|
|
|
|
|
id="index-capabilities_002c-getting-from-files"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
getcap `filename` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This is a built-in implementation of the POSIX standard utility. It
|
|
|
|
|
displays the capability sets on each specified `filename`.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-setcap"></span> <span
|
|
|
|
|
id="index-capabilities_002c-setting-on-files"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
setcap `capabilities` `filename` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This is a built-in implementation of the POSIX standard utility. It sets
|
|
|
|
|
the capability sets on each specified `filename` to the specified
|
|
|
|
|
`capabilities`.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fclone-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fclone-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.4 The zsh/clone Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/clone module makes available one builtin command:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-clone"></span> <span
|
|
|
|
|
id="index-shell_002c-cloning"></span> <span
|
|
|
|
|
id="index-cloning-the-shell"></span> <span id="index-terminal"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
clone `tty`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Creates a forked instance of the current shell, attached to the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
specified `tty`. In the new shell, the PID, PPID and TTY special
|
|
|
|
|
parameters are changed appropriately. $! is set to zero in the new
|
2021-05-11 02:29:21 +02:00
|
|
|
|
shell, and to the new shell’s PID in the original shell.
|
|
|
|
|
|
|
|
|
|
The return status of the builtin is zero in both shells if successful,
|
|
|
|
|
and non-zero on error.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The target of clone should be an unused terminal, such as an unused
|
2021-05-11 02:29:21 +02:00
|
|
|
|
virtual console or a virtual terminal created by
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
xterm -e sh -c 'trap : INT QUIT TSTP; tty;
|
|
|
|
|
while :; do sleep 100000000; done'
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
Some words of explanation are warranted about this long xterm command
|
|
|
|
|
line: when doing clone on a pseudo-terminal, some other session
|
|
|
|
|
("session" meant as a unix session group, or SID) is already owning the
|
|
|
|
|
terminal. Hence the cloned zsh cannot acquire the pseudo-terminal as a
|
|
|
|
|
controlling tty. That means two things:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
- the job control signals will go to the sh-started-by-xterm process
|
2021-05-11 02:29:21 +02:00
|
|
|
|
group (that’s why we disable INT QUIT and TSTP with trap; otherwise
|
|
|
|
|
the while loop could get suspended or killed)
|
2022-08-24 15:13:36 +02:00
|
|
|
|
- the cloned shell will have job control disabled, and the job control
|
2021-05-11 02:29:21 +02:00
|
|
|
|
keys (control-C, control-\\ and control-Z) will not work.
|
|
|
|
|
|
|
|
|
|
This does not apply when cloning to an *unused* vc.
|
|
|
|
|
|
|
|
|
|
Cloning to a used (and unprepared) terminal will result in two processes
|
|
|
|
|
reading simultaneously from the same terminal, with input bytes going
|
|
|
|
|
randomly to either process.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
clone is mostly useful as a shell built-in replacement for openvt.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fcompctl-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fcompctl-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.5 The zsh/compctl Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/compctl module makes available two builtin commands. compctl, is
|
|
|
|
|
the old, deprecated way to control completions for ZLE. See [Completion
|
|
|
|
|
Using compctl](Completion-Using-compctl.html#Completion-Using-compctl).
|
|
|
|
|
The other builtin command, compcall can be used in user-defined
|
|
|
|
|
completion widgets, see [Completion
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Widgets](Completion-Widgets.html#Completion-Widgets).
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fcomplete-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fcomplete-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.6 The zsh/complete Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/complete module makes available several builtin commands which
|
2021-05-11 02:29:21 +02:00
|
|
|
|
can be used in user-defined completion widgets, see [Completion
|
|
|
|
|
Widgets](Completion-Widgets.html#Completion-Widgets).
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fcomplist-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fcomplist-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.7 The zsh/complist Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-completion_002c-listing-1"></span> <span
|
|
|
|
|
id="index-completion_002c-coloured-listings"></span> <span
|
|
|
|
|
id="index-completion_002c-scroll-listings"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/complist module offers three extensions to completion listings:
|
|
|
|
|
the ability to highlight matches in such a list, the ability to scroll
|
|
|
|
|
through long lists and a different style of menu completion.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Colored-completion-listings"></span>
|
|
|
|
|
|
|
|
|
|
### 22.7.1 Colored completion listings
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Whenever one of the parameters ZLS_COLORS or ZLS_COLOURS is set and the
|
|
|
|
|
zsh/complist module is loaded or linked into the shell, completion lists
|
|
|
|
|
will be colored. Note, however, that complist will not automatically be
|
|
|
|
|
loaded if it is not linked in: on systems with dynamic loading,
|
|
|
|
|
‘zmodload zsh/complist’ is required.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-ZLS_005fCOLORS"></span> <span
|
|
|
|
|
id="index-ZLS_005fCOLOURS"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The parameters ZLS_COLORS and ZLS_COLOURS describe how matches are
|
2021-05-11 02:29:21 +02:00
|
|
|
|
highlighted. To turn on highlighting an empty value suffices, in which
|
|
|
|
|
case all the default values given below will be used. The format of the
|
|
|
|
|
value of these parameters is the same as used by the GNU version of the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ls command: a colon-separated list of specifications of the form
|
|
|
|
|
‘`name`=`value`’. The `name` may be one of the following strings, most
|
|
|
|
|
of which specify file types for which the `value` will be used. The
|
2021-05-11 02:29:21 +02:00
|
|
|
|
strings and their default values are:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
no 0
|
|
|
|
|
for normal text (i.e. when displaying something other than a matched
|
|
|
|
|
file)
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
fi 0
|
|
|
|
|
for regular files
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
di 32
|
|
|
|
|
for directories
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ln 36
|
|
|
|
|
for symbolic links. If this has the special value target, symbolic links
|
|
|
|
|
are dereferenced and the target file used to determine the display
|
|
|
|
|
format.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
pi 31
|
|
|
|
|
for named pipes (FIFOs)
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
so 33
|
|
|
|
|
for sockets
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
bd 44;37
|
|
|
|
|
for block devices
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
cd 44;37
|
|
|
|
|
for character devices
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
or `none`
|
|
|
|
|
for a symlink to nonexistent file (default is the value defined for ln)
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
mi `none`
|
|
|
|
|
for a non-existent file (default is the value defined for fi); this code
|
|
|
|
|
is currently not used
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
su 37;41
|
|
|
|
|
for files with setuid bit set
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sg 30;43
|
|
|
|
|
for files with setgid bit set
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
tw 30;42
|
|
|
|
|
ow 34;43
|
|
|
|
|
sa `none`
|
|
|
|
|
for files with an associated suffix alias; this is only tested after
|
|
|
|
|
specific suffixes, as described below
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
st 37;44
|
|
|
|
|
ex 35
|
|
|
|
|
lc \\e\[
|
|
|
|
|
for the left code (see below)
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
rc m
|
|
|
|
|
for the right code
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
tc 0
|
|
|
|
|
for the character indicating the file type printed after filenames if
|
|
|
|
|
the LIST_TYPES option is set
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sp 0
|
|
|
|
|
for the spaces printed after matches to align the next column
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ec `none`
|
|
|
|
|
for the end code
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Apart from these strings, the `name` may also be an asterisk (‘\*’)
|
2021-05-11 02:29:21 +02:00
|
|
|
|
followed by any string. The `value` given for such a string will be used
|
|
|
|
|
for all files whose name ends with the string. The `name` may also be an
|
2022-08-24 15:13:36 +02:00
|
|
|
|
equals sign (‘=’) followed by a pattern; the EXTENDED_GLOB option will
|
|
|
|
|
be turned on for evaluation of the pattern. The `value` given for this
|
|
|
|
|
pattern will be used for all matches (not just filenames) whose display
|
|
|
|
|
string are matched by the pattern. Definitions for the form with the
|
|
|
|
|
leading equal sign take precedence over the values defined for file
|
2021-05-11 02:29:21 +02:00
|
|
|
|
types, which in turn take precedence over the form with the leading
|
|
|
|
|
asterisk (file extensions).
|
|
|
|
|
|
|
|
|
|
The leading-equals form also allows different parts of the displayed
|
|
|
|
|
strings to be colored differently. For this, the pattern has to use the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
‘(#b)’ globbing flag and pairs of parentheses surrounding the parts of
|
|
|
|
|
the strings that are to be colored differently. In this case the `value`
|
|
|
|
|
may consist of more than one color code separated by equal signs. The
|
|
|
|
|
first code will be used for all parts for which no explicit code is
|
|
|
|
|
specified and the following codes will be used for the parts matched by
|
|
|
|
|
the sub-patterns in parentheses. For example, the specification
|
|
|
|
|
‘=(#b)(?)\*(?)=0=3=7’ will be used for all matches which are at least
|
|
|
|
|
two characters long and will use the code ‘3’ for the first character,
|
|
|
|
|
‘7’ for the last character and ‘0’ for the rest.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
All three forms of `name` may be preceded by a pattern in parentheses.
|
|
|
|
|
If this is given, the `value` will be used only for matches in groups
|
|
|
|
|
whose names are matched by the pattern given in the parentheses. For
|
2022-08-24 15:13:36 +02:00
|
|
|
|
example, ‘(g\*)m\*=43’ highlights all matches beginning with ‘m’ in
|
|
|
|
|
groups whose names begin with ‘g’ using the color code ‘43’. In case of
|
|
|
|
|
the ‘lc’, ‘rc’, and ‘ec’ codes, the group pattern is ignored.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Note also that all patterns are tried in the order in which they appear
|
|
|
|
|
in the parameter value until the first one matches which is then used.
|
|
|
|
|
Patterns may be matched against completions, descriptions (possibly with
|
|
|
|
|
spaces appended for padding), or lines consisting of a completion
|
|
|
|
|
followed by a description. For consistent coloring it may be necessary
|
|
|
|
|
to use more than one pattern or a pattern with backreferences.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
When printing a match, the code prints the value of lc, the value for
|
|
|
|
|
the file-type or the last matching specification with a ‘\*’, the value
|
|
|
|
|
of rc, the string to display for the match itself, and then the value of
|
|
|
|
|
ec if that is defined or the values of lc, no, and rc if ec is not
|
|
|
|
|
defined.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The default values are ISO 6429 (ANSI) compliant and can be used on
|
2022-08-24 15:13:36 +02:00
|
|
|
|
vt100 compatible terminals such as xterms. On monochrome terminals the
|
|
|
|
|
default values will have no visible effect. The colors function from the
|
|
|
|
|
contribution can be used to get associative arrays containing the codes
|
|
|
|
|
for ANSI terminals (see [Other
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Functions](User-Contributions.html#Other-Functions)). For example, after
|
2022-08-24 15:13:36 +02:00
|
|
|
|
loading colors, one could use ‘$color\[red\]’ to get the code for
|
|
|
|
|
foreground color red and ‘$color\[bg-green\]’ for the code for
|
2021-05-11 02:29:21 +02:00
|
|
|
|
background color green.
|
|
|
|
|
|
|
|
|
|
If the completion system invoked by compinit is used, these parameters
|
|
|
|
|
should not be set directly because the system controls them itself.
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Instead, the list-colors style should be used (see [Completion System
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Configuration](Completion-System.html#Completion-System-Configuration)).
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Scrolling-in-completion-listings"></span>
|
|
|
|
|
|
|
|
|
|
### 22.7.2 Scrolling in completion listings
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
To enable scrolling through a completion list, the LISTPROMPT parameter
|
|
|
|
|
must be set. Its value will be used as the prompt; if it is the empty
|
|
|
|
|
string, a default prompt will be used. The value may contain escapes of
|
|
|
|
|
the form ‘%x’. It supports the escapes ‘%B’, ‘%b’, ‘%S’, ‘%s’, ‘%U’,
|
|
|
|
|
‘%u’, ‘%F’, ‘%f’, ‘%K’, ‘%k’ and ‘%{`...`%}’ used also in shell prompts
|
|
|
|
|
as well as three pairs of additional sequences: a ‘%l’ or ‘%L’ is
|
|
|
|
|
replaced by the number of the last line shown and the total number of
|
|
|
|
|
lines in the form ‘`number`/`total`’; a ‘%m’ or ‘%M’ is replaced with
|
|
|
|
|
the number of the last match shown and the total number of matches; and
|
|
|
|
|
‘%p’ or ‘%P’ is replaced with ‘Top’, ‘Bottom’ or the position of the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
first line shown in percent of the total number of lines, respectively.
|
|
|
|
|
In each of these cases the form with the uppercase letter will be
|
|
|
|
|
replaced with a string of fixed width, padded to the right with spaces,
|
|
|
|
|
while the lowercase form will not be padded.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If the parameter LISTPROMPT is set, the completion code will not ask if
|
|
|
|
|
the list should be shown. Instead it immediately starts displaying the
|
|
|
|
|
list, stopping after the first screenful, showing the prompt at the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
bottom, waiting for a keypress after temporarily switching to the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
listscroll keymap. Some of the zle functions have a special meaning
|
2021-05-11 02:29:21 +02:00
|
|
|
|
while scrolling lists:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
send-break
|
|
|
|
|
stops listing discarding the key pressed
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
accept-line, down-history, down-line-or-history
|
|
|
|
|
down-line-or-search, vi-down-line-or-history
|
|
|
|
|
scrolls forward one line
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
complete-word, menu-complete, expand-or-complete
|
|
|
|
|
expand-or-complete-prefix, menu-complete-or-expand
|
|
|
|
|
scrolls forward one screenful
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
accept-search
|
|
|
|
|
stop listing but take no other action
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Every other character stops listing and immediately processes the key as
|
2022-08-24 15:13:36 +02:00
|
|
|
|
usual. Any key that is not bound in the listscroll keymap or that is
|
|
|
|
|
bound to undefined-key is looked up in the keymap currently selected.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
As for the ZLS_COLORS and ZLS_COLOURS parameters, LISTPROMPT should not
|
|
|
|
|
be set directly when using the shell function based completion system.
|
|
|
|
|
Instead, the list-prompt style should be used.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Menu-selection"></span>
|
|
|
|
|
|
|
|
|
|
### 22.7.3 Menu selection
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-completion_002c-selecting-by-cursor"></span> <span
|
|
|
|
|
id="index-MENUSELECT"></span> <span id="index-menu_002dselect"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/complist module also offers an alternative style of selecting
|
2021-05-11 02:29:21 +02:00
|
|
|
|
matches from a list, called menu selection, which can be used if the
|
|
|
|
|
shell is set up to return to the last prompt after showing a completion
|
2022-08-24 15:13:36 +02:00
|
|
|
|
list (see the ALWAYS_LAST_PROMPT option in
|
2021-05-11 02:29:21 +02:00
|
|
|
|
[Options](Options.html#Options)).
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Menu selection can be invoked directly by the widget menu-select defined
|
|
|
|
|
by this module. This is a standard ZLE widget that can be bound to a key
|
|
|
|
|
in the usual way as described in [Zsh Line
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Editor](Zsh-Line-Editor.html#Zsh-Line-Editor).
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Alternatively, the parameter MENUSELECT can be set to an integer, which
|
|
|
|
|
gives the minimum number of matches that must be present before menu
|
|
|
|
|
selection is automatically turned on. This second method requires that
|
|
|
|
|
menu completion be started, either directly from a widget such as
|
|
|
|
|
menu-complete, or due to one of the options MENU_COMPLETE or AUTO_MENU
|
|
|
|
|
being set. If MENUSELECT is set, but is 0, 1 or empty, menu selection
|
|
|
|
|
will always be started during an ambiguous menu completion.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
When using the completion system based on shell functions, the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
MENUSELECT parameter should not be used (like the ZLS_COLORS and
|
|
|
|
|
ZLS_COLOURS parameters described above). Instead, the menu style should
|
|
|
|
|
be used with the select=`...` keyword.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
After menu selection is started, the matches will be listed. If there
|
|
|
|
|
are more matches than fit on the screen, only the first screenful is
|
|
|
|
|
shown. The matches to insert into the command line can be selected from
|
2022-08-24 15:13:36 +02:00
|
|
|
|
this list. In the list one match is highlighted using the value for ma
|
|
|
|
|
from the ZLS_COLORS or ZLS_COLOURS parameter. The default value for this
|
|
|
|
|
is ‘7’ which forces the selected match to be highlighted using standout
|
|
|
|
|
mode on a vt100-compatible terminal. If neither ZLS_COLORS nor
|
|
|
|
|
ZLS_COLOURS is set, the same terminal control sequence as for the ‘%S’
|
|
|
|
|
escape in prompts is used.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
If there are more matches than fit on the screen and the parameter
|
2022-08-24 15:13:36 +02:00
|
|
|
|
MENUPROMPT is set, its value will be shown below the matches. It
|
|
|
|
|
supports the same escape sequences as LISTPROMPT, but the number of the
|
|
|
|
|
match or line shown will be that of the one where the mark is placed. If
|
|
|
|
|
its value is the empty string, a default prompt will be used.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The MENUSCROLL parameter can be used to specify how the list is
|
2021-05-11 02:29:21 +02:00
|
|
|
|
scrolled. If the parameter is unset, this is done line by line, if it is
|
2022-08-24 15:13:36 +02:00
|
|
|
|
set to ‘0’ (zero), the list will scroll half the number of lines of the
|
|
|
|
|
screen. If the value is positive, it gives the number of lines to scroll
|
|
|
|
|
and if it is negative, the list will be scrolled the number of lines of
|
|
|
|
|
the screen minus the (absolute) value.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
As for the ZLS_COLORS, ZLS_COLOURS and LISTPROMPT parameters, neither
|
|
|
|
|
MENUPROMPT nor MENUSCROLL should be set directly when using the shell
|
|
|
|
|
function based completion system. Instead, the select-prompt and
|
|
|
|
|
select-scroll styles should be used.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The completion code sometimes decides not to show all of the matches in
|
|
|
|
|
the list. These hidden matches are either matches for which the
|
|
|
|
|
completion function which added them explicitly requested that they not
|
2022-08-24 15:13:36 +02:00
|
|
|
|
appear in the list (using the -n option of the compadd builtin command)
|
|
|
|
|
or they are matches which duplicate a string already in the list
|
|
|
|
|
(because they differ only in things like prefixes or suffixes that are
|
|
|
|
|
not displayed). In the list used for menu selection, however, even these
|
|
|
|
|
matches are shown so that it is possible to select them. To highlight
|
|
|
|
|
such matches the hi and du capabilities in the ZLS_COLORS and
|
|
|
|
|
ZLS_COLOURS parameters are supported for hidden matches of the first and
|
|
|
|
|
second kind, respectively.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Selecting matches is done by moving the mark around using the zle
|
|
|
|
|
movement functions. When not all matches can be shown on the screen at
|
|
|
|
|
the same time, the list will scroll up and down when crossing the top or
|
|
|
|
|
bottom line. The following zle functions have special meaning during
|
|
|
|
|
menu selection. Note that the following always perform the same task
|
|
|
|
|
within the menu selection map and cannot be replaced by user defined
|
|
|
|
|
widgets, nor can the set of functions be extended:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
accept-line, accept-search
|
|
|
|
|
accept the current match and leave menu selection (but do not cause the
|
|
|
|
|
command line to be accepted)
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
send-break
|
|
|
|
|
leaves menu selection and restores the previous contents of the command
|
|
|
|
|
line
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
redisplay, clear-screen
|
|
|
|
|
execute their normal function without leaving menu selection
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
accept-and-hold, accept-and-menu-complete
|
|
|
|
|
accept the currently inserted match and continue selection allowing to
|
|
|
|
|
select the next match to insert into the line
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
accept-and-infer-next-history
|
|
|
|
|
accepts the current match and then tries completion with menu selection
|
|
|
|
|
again; in the case of files this allows one to select a directory and
|
|
|
|
|
immediately attempt to complete files in it; if there are no matches, a
|
|
|
|
|
message is shown and one can use undo to go back to completion on the
|
|
|
|
|
previous level, every other key leaves menu selection (including the
|
|
|
|
|
other zle functions which are otherwise special during menu selection)
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
undo
|
|
|
|
|
removes matches inserted during the menu selection by one of the three
|
|
|
|
|
functions before
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
down-history, down-line-or-history
|
|
|
|
|
vi-down-line-or-history, down-line-or-search
|
|
|
|
|
moves the mark one line down
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
up-history, up-line-or-history
|
|
|
|
|
vi-up-line-or-history, up-line-or-search
|
|
|
|
|
moves the mark one line up
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
forward-char, vi-forward-char
|
|
|
|
|
moves the mark one column right
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
backward-char, vi-backward-char
|
|
|
|
|
moves the mark one column left
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
forward-word, vi-forward-word
|
|
|
|
|
vi-forward-word-end, emacs-forward-word
|
|
|
|
|
moves the mark one screenful down
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
backward-word, vi-backward-word, emacs-backward-word
|
|
|
|
|
moves the mark one screenful up
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
vi-forward-blank-word, vi-forward-blank-word-end
|
|
|
|
|
moves the mark to the first line of the next group of matches
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
vi-backward-blank-word
|
|
|
|
|
moves the mark to the last line of the previous group of matches
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
beginning-of-history
|
|
|
|
|
moves the mark to the first line
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
end-of-history
|
|
|
|
|
moves the mark to the last line
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
beginning-of-buffer-or-history, beginning-of-line
|
|
|
|
|
beginning-of-line-hist, vi-beginning-of-line
|
|
|
|
|
moves the mark to the leftmost column
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
end-of-buffer-or-history, end-of-line
|
|
|
|
|
end-of-line-hist, vi-end-of-line
|
|
|
|
|
moves the mark to the rightmost column
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
complete-word, menu-complete, expand-or-complete
|
|
|
|
|
expand-or-complete-prefix, menu-expand-or-complete
|
|
|
|
|
moves the mark to the next match
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
reverse-menu-complete
|
|
|
|
|
moves the mark to the previous match
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
vi-insert
|
|
|
|
|
this toggles between normal and interactive mode; in interactive mode
|
|
|
|
|
the keys bound to self-insert and self-insert-unmeta insert into the
|
|
|
|
|
command line as in normal editing mode but without leaving menu
|
|
|
|
|
selection; after each character completion is tried again and the list
|
|
|
|
|
changes to contain only the new matches; the completion widgets make the
|
|
|
|
|
longest unambiguous string be inserted in the command line and undo and
|
|
|
|
|
backward-delete-char go back to the previous set of matches
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
history-incremental-search-forward
|
|
|
|
|
history-incremental-search-backward
|
|
|
|
|
this starts incremental searches in the list of completions displayed;
|
|
|
|
|
in this mode, accept-line only leaves incremental search, going back to
|
|
|
|
|
the normal menu selection mode
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
All movement functions wrap around at the edges; any other zle function
|
|
|
|
|
not listed leaves menu selection and executes that function. It is
|
|
|
|
|
possible to make widgets in the above list do the same by using the form
|
2022-08-24 15:13:36 +02:00
|
|
|
|
of the widget with a ‘.’ in front. For example, the widget
|
|
|
|
|
‘.accept-line’ has the effect of leaving menu selection and accepting
|
|
|
|
|
the entire command line.
|
|
|
|
|
|
|
|
|
|
During this selection the widget uses the keymap menuselect. Any key
|
|
|
|
|
that is not defined in this keymap or that is bound to undefined-key is
|
|
|
|
|
looked up in the keymap currently selected. This is used to ensure that
|
|
|
|
|
the most important keys used during selection (namely the cursor keys,
|
|
|
|
|
return, and TAB) have sensible defaults. However, keys in the menuselect
|
|
|
|
|
keymap can be modified directly using the bindkey builtin command (see
|
|
|
|
|
[The zsh/zle Module](#The-zsh_002fzle-Module)). For example, to make the
|
|
|
|
|
return key leave menu selection without accepting the match currently
|
|
|
|
|
selected one could call
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
bindkey -M menuselect '^M' send-break
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
after loading the zsh/complist module.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fcomputil-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fcomputil-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.8 The zsh/computil Module
|
|
|
|
|
|
|
|
|
|
<span id="index-completion_002c-utility"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/computil module adds several builtin commands that are used by
|
2021-05-11 02:29:21 +02:00
|
|
|
|
some of the completion functions in the completion system based on shell
|
|
|
|
|
functions (see [Completion
|
|
|
|
|
System](Completion-System.html#Completion-System) ). Except for
|
2022-08-24 15:13:36 +02:00
|
|
|
|
compquote these builtin commands are very specialised and thus not very
|
|
|
|
|
interesting when writing your own completion functions. In summary,
|
2021-05-11 02:29:21 +02:00
|
|
|
|
these builtin commands are:
|
|
|
|
|
|
|
|
|
|
<span id="index-comparguments"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
comparguments
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
This is used by the \_arguments function to do the argument and command
|
|
|
|
|
line parsing. Like compdescribe it has an option -i to do the parsing
|
|
|
|
|
and initialize some internal state and various options to access the
|
|
|
|
|
state information to decide what should be completed.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-compdescribe"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
compdescribe
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
This is used by the \_describe function to build the displays for the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
matches and to get the strings to add as matches with their options. On
|
2022-08-24 15:13:36 +02:00
|
|
|
|
the first call one of the options -i or -I should be supplied as the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
first argument. In the first case, display strings without the
|
|
|
|
|
descriptions will be generated, in the second case, the string used to
|
|
|
|
|
separate the matches from their descriptions must be given as the second
|
|
|
|
|
argument and the descriptions (if any) will be shown. All other
|
2022-08-24 15:13:36 +02:00
|
|
|
|
arguments are like the definition arguments to \_describe itself.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Once compdescribe has been called with either the -i or the -I option,
|
|
|
|
|
it can be repeatedly called with the -g option and the names of four
|
|
|
|
|
parameters as its arguments. This will step through the different sets
|
|
|
|
|
of matches and store the value of compstate\[list\] in the first scalar,
|
|
|
|
|
the options for compadd in the second array, the matches in the third
|
|
|
|
|
array, and the strings to be displayed in the completion listing in the
|
|
|
|
|
fourth array. The arrays may then be directly given to compadd to
|
|
|
|
|
register the matches with the completion code.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-compfiles"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
compfiles
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Used by the \_path_files function to optimize complex recursive filename
|
|
|
|
|
generation (globbing). It does three things. With the -p and -P options
|
|
|
|
|
it builds the glob patterns to use, including the paths already handled
|
|
|
|
|
and trying to optimize the patterns with respect to the prefix and
|
|
|
|
|
suffix from the line and the match specification currently used. The -i
|
|
|
|
|
option does the directory tests for the ignore-parents style and the -r
|
|
|
|
|
option tests if a component for some of the matches are equal to the
|
|
|
|
|
string on the line and removes all other matches if that is true.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-compgroups"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
compgroups
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Used by the \_tags function to implement the internals of the
|
|
|
|
|
group-order style. This only takes its arguments as names of completion
|
|
|
|
|
groups and creates the groups for it (all six types: sorted and
|
|
|
|
|
unsorted, both without removing duplicates, with removing all duplicates
|
|
|
|
|
and with removing consecutive duplicates).
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-compquote"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
compquote \[ -p \] `names` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
There may be reasons to write completion functions that have to add the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
matches using the -Q option to compadd and perform quoting themselves.
|
|
|
|
|
Instead of interpreting the first character of the all_quotes key of the
|
|
|
|
|
compstate special association and using the q flag for parameter
|
|
|
|
|
expansions, one can use this builtin command. The arguments are the
|
|
|
|
|
names of scalar or array parameters and the values of these parameters
|
|
|
|
|
are quoted as needed for the innermost quoting level. If the -p option
|
|
|
|
|
is given, quoting is done as if there is some prefix before the values
|
|
|
|
|
of the parameters, so that a leading equal sign will not be quoted.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The return status is non-zero in case of an error and zero otherwise.
|
|
|
|
|
|
|
|
|
|
<span id="index-comptags"></span> <span id="index-comptry"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
comptags
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
comptry
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
These implement the internals of the tags mechanism.
|
|
|
|
|
|
|
|
|
|
<span id="index-compvalues"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
compvalues
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Like comparguments, but for the \_values function.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fcurses-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fcurses-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.9 The zsh/curses Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/curses module makes available one builtin command and various
|
2021-05-11 02:29:21 +02:00
|
|
|
|
parameters.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Builtin"></span>
|
|
|
|
|
|
|
|
|
|
### 22.9.1 Builtin
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-zcurses"></span> <span
|
|
|
|
|
id="index-windows_002c-curses"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses init
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses end
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses addwin `targetwin` `nlines` `ncols` `begin_y` `begin_x` \[
|
2021-05-11 02:29:21 +02:00
|
|
|
|
`parentwin` \]
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses delwin `targetwin`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses refresh \[ `targetwin` ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses touch `targetwin` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses move `targetwin` `new_y` `new_x`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses clear `targetwin` \[ redraw \| eol \| bot \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses position `targetwin` `array`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses char `targetwin` `character`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses string `targetwin` `string`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses border `targetwin` `border`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses attr `targetwin` \[ \[+\|-\]`attribute` \| `fg_col`/`bg_col` \]
|
|
|
|
|
\[...\]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses bg `targetwin` \[ \[+\|-\]`attribute` \| `fg_col`/`bg_col` \|
|
|
|
|
|
@`char` \] \[...\]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses scroll `targetwin` \[ on \| off \| \[+\|-\]`lines` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses input `targetwin` \[ `param` \[ `kparam` \[ `mparam` \] \] \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses mouse \[ delay `num` \| \[+\|-\]motion \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses timeout `targetwin` `intval`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses querychar `targetwin` \[ `param` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses resize `height` `width` \[ endwin \| nosave \| endwin_nosave \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Manipulate curses windows. All uses of this command should be bracketed
|
2022-08-24 15:13:36 +02:00
|
|
|
|
by ‘zcurses init’ to initialise use of curses, and ‘zcurses end’ to end
|
|
|
|
|
it; omitting ‘zcurses end’ can cause the terminal to be in an unwanted
|
|
|
|
|
state.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The subcommand addwin creates a window with `nlines` lines and `ncols`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
columns. Its upper left corner will be placed at row `begin_y` and
|
|
|
|
|
column `begin_x` of the screen. `targetwin` is a string and refers to
|
|
|
|
|
the name of a window that is not currently assigned. Note in particular
|
|
|
|
|
the curses convention that vertical values appear before horizontal
|
|
|
|
|
values.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If addwin is given an existing window as the final argument, the new
|
2021-05-11 02:29:21 +02:00
|
|
|
|
window is created as a subwindow of `parentwin`. This differs from an
|
|
|
|
|
ordinary new window in that the memory of the window contents is shared
|
|
|
|
|
with the parent’s memory. Subwindows must be deleted before their
|
|
|
|
|
parent. Note that the coordinates of subwindows are relative to the
|
|
|
|
|
screen, not the parent, as with other windows.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Use the subcommand delwin to delete a window created with addwin. Note
|
|
|
|
|
that end does *not* implicitly delete windows, and that delwin does not
|
|
|
|
|
erase the screen image of the window.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The window corresponding to the full visible screen is called stdscr; it
|
|
|
|
|
always exists after ‘zcurses init’ and cannot be delete with delwin.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The subcommand refresh will refresh window `targetwin`; this is
|
2021-05-11 02:29:21 +02:00
|
|
|
|
necessary to make any pending changes (such as characters you have
|
2022-08-24 15:13:36 +02:00
|
|
|
|
prepared for output with char) visible on the screen. refresh without an
|
|
|
|
|
argument causes the screen to be cleared and redrawn. If multiple
|
|
|
|
|
windows are given, the screen is updated once at the end.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The subcommand touch marks the `targetwin`s listed as changed. This is
|
|
|
|
|
necessary before refreshing windows if a window that was in front of
|
|
|
|
|
another window (which may be stdscr) is deleted.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The subcommand move moves the cursor position in `targetwin` to new
|
|
|
|
|
coordinates `new_y` and `new_x`. Note that the subcommand string (but
|
|
|
|
|
not the subcommand char) advances the cursor position over the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
characters added.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The subcommand clear erases the contents of `targetwin`. One (and no
|
2021-05-11 02:29:21 +02:00
|
|
|
|
more than one) of three options may be specified. With the option
|
2022-08-24 15:13:36 +02:00
|
|
|
|
redraw, in addition the next refresh of `targetwin` will cause the
|
|
|
|
|
screen to be cleared and repainted. With the option eol, `targetwin` is
|
|
|
|
|
only cleared to the end of the current cursor line. With the option bot,
|
|
|
|
|
`targetwin` is cleared to the end of the window, i.e everything to the
|
|
|
|
|
right and below the cursor is cleared.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The subcommand position writes various positions associated with
|
2021-05-11 02:29:21 +02:00
|
|
|
|
`targetwin` into the array named `array`. These are, in order:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
\-
|
|
|
|
|
The y and x coordinates of the cursor relative to the top left of
|
|
|
|
|
`targetwin`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
\-
|
|
|
|
|
The y and x coordinates of the top left of `targetwin` on the screen
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
\-
|
|
|
|
|
The size of `targetwin` in y and x dimensions.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Outputting characters and strings are achieved by char and string
|
2021-05-11 02:29:21 +02:00
|
|
|
|
respectively.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
To draw a border around window `targetwin`, use border. Note that the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
border is not subsequently handled specially: in other words, the border
|
|
|
|
|
is simply a set of characters output at the edge of the window. Hence it
|
|
|
|
|
can be overwritten, can scroll off the window, etc.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The subcommand attr will set `targetwin`’s attributes or
|
2021-05-11 02:29:21 +02:00
|
|
|
|
foreground/background color pair for any successive character output.
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Each `attribute` given on the line may be prepended by a + to set or a -
|
|
|
|
|
to unset that attribute; + is assumed if absent. The attributes
|
|
|
|
|
supported are blink, bold, dim, reverse, standout, and underline.
|
|
|
|
|
|
|
|
|
|
Each `fg_col`/`bg_col` attribute (to be read as ‘`fg_col` on `bg_col`’)
|
|
|
|
|
sets the foreground and background color for character output. The color
|
|
|
|
|
default is sometimes available (in particular if the library is
|
|
|
|
|
ncurses), specifying the foreground or background color with which the
|
|
|
|
|
terminal started. The color pair default/default is always available. To
|
|
|
|
|
use more than the 8 named colors (red, green, etc.) construct the
|
|
|
|
|
`fg_col`/`bg_col` pairs where `fg_col` and `bg_col` are decimal
|
|
|
|
|
integers, e.g 128/200. The maximum color value is 254 if the terminal
|
|
|
|
|
supports 256 colors.
|
|
|
|
|
|
|
|
|
|
bg overrides the color and other attributes of all characters in the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
window. Its usual use is to set the background initially, but it will
|
|
|
|
|
overwrite the attributes of any characters at the time when it is
|
2022-08-24 15:13:36 +02:00
|
|
|
|
called. In addition to the arguments allowed with attr, an argument
|
|
|
|
|
@`char` specifies a character to be shown in otherwise blank areas of
|
2021-05-11 02:29:21 +02:00
|
|
|
|
the window. Owing to limitations of curses this cannot be a multibyte
|
|
|
|
|
character (use of ASCII characters only is recommended). As the
|
|
|
|
|
specified set of attributes override the existing background, turning
|
|
|
|
|
attributes off in the arguments is not useful, though this does not
|
|
|
|
|
cause an error.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The subcommand scroll can be used with on or off to enabled or disable
|
|
|
|
|
scrolling of a window when the cursor would otherwise move below the
|
|
|
|
|
window due to typing or output. It can also be used with a positive or
|
|
|
|
|
negative integer to scroll the window up or down the given number of
|
2021-05-11 02:29:21 +02:00
|
|
|
|
lines without changing the current cursor position (which therefore
|
|
|
|
|
appears to move in the opposite direction relative to the window). In
|
2022-08-24 15:13:36 +02:00
|
|
|
|
the second case, if scrolling is off it is temporarily turned on to
|
2021-05-11 02:29:21 +02:00
|
|
|
|
allow the window to be scrolled.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The subcommand input reads a single character from the window without
|
2021-05-11 02:29:21 +02:00
|
|
|
|
echoing it back. If `param` is supplied the character is assigned to the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
parameter `param`, else it is assigned to the parameter REPLY.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
If both `param` and `kparam` are supplied, the key is read in ‘keypad’
|
|
|
|
|
mode. In this mode special keys such as function keys and arrow keys
|
|
|
|
|
return the name of the key in the parameter `kparam`. The key names are
|
2022-08-24 15:13:36 +02:00
|
|
|
|
the macros defined in the curses.h or ncurses.h with the prefix ‘KEY\_’
|
|
|
|
|
removed; see also the description of the parameter zcurses_keycodes
|
|
|
|
|
below. Other keys cause a value to be set in `param` as before. On a
|
|
|
|
|
successful return only one of `param` or `kparam` contains a non-empty
|
|
|
|
|
string; the other is set to an empty string.
|
|
|
|
|
|
|
|
|
|
If `mparam` is also supplied, input attempts to handle mouse input. This
|
|
|
|
|
is only available with the ncurses library; mouse handling can be
|
|
|
|
|
detected by checking for the exit status of ‘zcurses mouse’ with no
|
2021-05-11 02:29:21 +02:00
|
|
|
|
arguments. If a mouse button is clicked (or double- or triple-clicked,
|
|
|
|
|
or pressed or released with a configurable delay from being clicked)
|
2022-08-24 15:13:36 +02:00
|
|
|
|
then `kparam` is set to the string MOUSE, and `mparam` is set to an
|
2021-05-11 02:29:21 +02:00
|
|
|
|
array consisting of the following elements:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
\-
|
|
|
|
|
An identifier to discriminate different input devices; this is only
|
|
|
|
|
rarely useful.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
\-
|
|
|
|
|
The x, y and z coordinates of the mouse click relative to the full
|
|
|
|
|
screen, as three elements in that order (i.e. the y coordinate is,
|
|
|
|
|
unusually, after the x coordinate). The z coordinate is only available
|
|
|
|
|
for a few unusual input devices and is otherwise set to zero.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
\-
|
|
|
|
|
Any events that occurred as separate items; usually there will be just
|
|
|
|
|
one. An event consists of PRESSED, RELEASED, CLICKED, DOUBLE_CLICKED or
|
|
|
|
|
TRIPLE_CLICKED followed immediately (in the same element) by the number
|
|
|
|
|
of the button.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
\-
|
|
|
|
|
If the shift key was pressed, the string SHIFT.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
\-
|
|
|
|
|
If the control key was pressed, the string CTRL.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
\-
|
|
|
|
|
If the alt key was pressed, the string ALT.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Not all mouse events may be passed through to the terminal window; most
|
|
|
|
|
terminal emulators handle some mouse events themselves. Note that the
|
|
|
|
|
ncurses manual implies that using input both with and without mouse
|
|
|
|
|
handling may cause the mouse cursor to appear and disappear.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The subcommand mouse can be used to configure the use of the mouse.
|
|
|
|
|
There is no window argument; mouse options are global. ‘zcurses mouse’
|
2021-05-11 02:29:21 +02:00
|
|
|
|
with no arguments returns status 0 if mouse handling is possible, else
|
|
|
|
|
status 1. Otherwise, the possible arguments (which may be combined on
|
2022-08-24 15:13:36 +02:00
|
|
|
|
the same command line) are as follows. delay `num` sets the maximum
|
2021-05-11 02:29:21 +02:00
|
|
|
|
delay in milliseconds between press and release events to be considered
|
|
|
|
|
as a click; the value 0 disables click resolution, and the default is
|
2022-08-24 15:13:36 +02:00
|
|
|
|
one sixth of a second. motion proceeded by an optional ‘+’ (the default)
|
|
|
|
|
or - turns on or off reporting of mouse motion in addition to clicks,
|
|
|
|
|
presses and releases, which are always reported. However, it appears
|
|
|
|
|
reports for mouse motion are not currently implemented.
|
|
|
|
|
|
|
|
|
|
The subcommand timeout specifies a timeout value for input from
|
|
|
|
|
`targetwin`. If `intval` is negative, ‘zcurses input’ waits indefinitely
|
|
|
|
|
for a character to be typed; this is the default. If `intval` is zero,
|
|
|
|
|
‘zcurses input’ returns immediately; if there is typeahead it is
|
|
|
|
|
returned, else no input is done and status 1 is returned. If `intval` is
|
|
|
|
|
positive, ‘zcurses input’ waits `intval` milliseconds for input and if
|
|
|
|
|
there is none at the end of that period returns status 1.
|
|
|
|
|
|
|
|
|
|
The subcommand querychar queries the character at the current cursor
|
2021-05-11 02:29:21 +02:00
|
|
|
|
position. The return values are stored in the array named `param` if
|
2022-08-24 15:13:36 +02:00
|
|
|
|
supplied, else in the array reply. The first value is the character
|
2021-05-11 02:29:21 +02:00
|
|
|
|
(which may be a multibyte character if the system supports them); the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
second is the color pair in the usual `fg_col`/`bg_col` notation, or 0
|
|
|
|
|
if color is not supported. Any attributes other than color that apply to
|
|
|
|
|
the character, as set with the subcommand attr, appear as additional
|
|
|
|
|
elements.
|
|
|
|
|
|
|
|
|
|
The subcommand resize resizes stdscr and all windows to given dimensions
|
|
|
|
|
(windows that stick out from the new dimensions are resized down). The
|
|
|
|
|
underlying curses extension (resize_term call) can be unavailable. To
|
|
|
|
|
verify, zeroes can be used for `height` and `width`. If the result of
|
|
|
|
|
the subcommand is 0, resize_term is available (2 otherwise). Tests show
|
|
|
|
|
that resizing can be normally accomplished by calling zcurses end and
|
|
|
|
|
zcurses refresh. The resize subcommand is provided for versatility.
|
|
|
|
|
Multiple system configurations have been checked and zcurses end and
|
|
|
|
|
zcurses refresh are still needed for correct terminal state after
|
|
|
|
|
resize. To invoke them with resize, use `endwin` argument. Using
|
|
|
|
|
`nosave` argument will cause new terminal state to not be saved
|
|
|
|
|
internally by zcurses. This is also provided for versatility and should
|
|
|
|
|
normally be not needed.
|
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="Parameters-2"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
### 22.9.2 Parameters
|
|
|
|
|
|
|
|
|
|
<span id="index-ZCURSES_005fCOLORS"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZCURSES_COLORS
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly integer. The maximum number of colors the terminal supports.
|
|
|
|
|
This value is initialised by the curses library and is not available
|
2022-08-24 15:13:36 +02:00
|
|
|
|
until the first time zcurses init is run.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-ZCURSES_005fCOLOR_005fPAIRS"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZCURSES_COLOR_PAIRS
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Readonly integer. The maximum number of color pairs `fg_col`/`bg_col`
|
|
|
|
|
that may be defined in ‘zcurses attr’ commands; note this limit applies
|
|
|
|
|
to all color pairs that have been used whether or not they are currently
|
|
|
|
|
active. This value is initialised by the curses library and is not
|
|
|
|
|
available until the first time zcurses init is run.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zcurses_005fattrs"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses_attrs
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Readonly array. The attributes supported by zsh/curses; available as
|
2021-05-11 02:29:21 +02:00
|
|
|
|
soon as the module is loaded.
|
|
|
|
|
|
|
|
|
|
<span id="index-zcurses_005fcolors"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses_colors
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Readonly array. The colors supported by zsh/curses; available as soon as
|
|
|
|
|
the module is loaded.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zcurses_005fkeycodes"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses_keycodes
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly array. The values that may be returned in the second parameter
|
2022-08-24 15:13:36 +02:00
|
|
|
|
supplied to ‘zcurses input’ in the order in which they are defined
|
|
|
|
|
internally by curses. Not all function keys are listed, only F0; curses
|
|
|
|
|
reserves space for F0 up to F63.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zcurses_005fwindows"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zcurses_windows
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly array. The current list of windows, i.e. all windows that have
|
2022-08-24 15:13:36 +02:00
|
|
|
|
been created with ‘zcurses addwin’ and not removed with ‘zcurses
|
|
|
|
|
delwin’.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fdatetime-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fdatetime-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.10 The zsh/datetime Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/datetime module makes available one builtin command:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-strftime"></span> <span
|
|
|
|
|
id="index-date-string_002c-printing"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
strftime \[ -s `scalar` \| -n \] `format` \[ `epochtime` \[
|
|
|
|
|
`nanoseconds` \] \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
strftime -r \[ -q \] \[ -s `scalar` \| -n \] `format` `timestring`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Output the date in the `format` specified. With no `epochtime`, the
|
|
|
|
|
current system date/time is used; optionally, `epochtime` may be used to
|
|
|
|
|
specify the number of seconds since the epoch, and `nanoseconds` may
|
|
|
|
|
additionally be used to specify the number of nanoseconds past the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
second (otherwise that number is assumed to be 0). See strftime(3) for
|
|
|
|
|
details. The zsh extensions described in [Prompt
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Expansion](Prompt-Expansion.html#Prompt-Expansion) are also available.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
-n
|
|
|
|
|
Suppress printing a newline after the formatted string.
|
|
|
|
|
|
|
|
|
|
-q
|
|
|
|
|
Run quietly; suppress printing of all error messages described below.
|
|
|
|
|
Errors for invalid `epochtime` values are always printed.
|
|
|
|
|
|
|
|
|
|
-r
|
|
|
|
|
With the option -r (reverse), use `format` to parse the input string
|
|
|
|
|
`timestring` and output the number of seconds since the epoch at which
|
|
|
|
|
the time occurred. The parsing is implemented by the system function
|
|
|
|
|
strptime; see strptime(3). This means that zsh format extensions are not
|
|
|
|
|
available, but for reverse lookup they are not required.
|
|
|
|
|
|
|
|
|
|
In most implementations of strftime any timezone in the `timestring` is
|
|
|
|
|
ignored and the local timezone declared by the TZ environment variable
|
|
|
|
|
is used; other parameters are set to zero if not present.
|
|
|
|
|
|
|
|
|
|
If `timestring` does not match `format` the command returns status 1 and
|
|
|
|
|
prints an error message. If `timestring` matches `format` but not all
|
|
|
|
|
characters in `timestring` were used, the conversion succeeds but also
|
|
|
|
|
prints an error message.
|
|
|
|
|
|
|
|
|
|
If either of the system functions strptime or mktime is not available,
|
|
|
|
|
status 2 is returned and an error message is printed.
|
|
|
|
|
|
|
|
|
|
-s `scalar`
|
|
|
|
|
Assign the date string (or epoch time in seconds if -r is given) to
|
|
|
|
|
`scalar` instead of printing it.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Note that depending on the system’s declared integral time type,
|
2022-08-24 15:13:36 +02:00
|
|
|
|
strftime may produce incorrect results for epoch times greater than
|
2021-05-11 02:29:21 +02:00
|
|
|
|
2147483647 which corresponds to 2038-01-19 03:14:07 +0000.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/datetime module makes available several parameters; all are
|
2021-05-11 02:29:21 +02:00
|
|
|
|
readonly:
|
|
|
|
|
|
|
|
|
|
<span id="index-EPOCHREALTIME"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
EPOCHREALTIME
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
A floating point value representing the number of seconds since the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
epoch. The notional accuracy is to nanoseconds if the clock_gettime call
|
|
|
|
|
is available and to microseconds otherwise, but in practice the range of
|
|
|
|
|
double precision floating point and shell scheduling latencies may be
|
|
|
|
|
significant effects.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-EPOCHSECONDS"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
EPOCHSECONDS
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
An integer value representing the number of seconds since the epoch.
|
|
|
|
|
|
|
|
|
|
<span id="index-epochtime"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
epochtime
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
An array value containing the number of seconds since the epoch in the
|
|
|
|
|
first element and the remainder of the time since the epoch in
|
|
|
|
|
nanoseconds in the second element. To ensure the two elements are
|
|
|
|
|
consistent the array should be copied or otherwise referenced as a
|
|
|
|
|
single substitution before the values are used. The following idiom may
|
|
|
|
|
be used:
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
for secs nsecs in $epochtime; do
|
|
|
|
|
...
|
|
|
|
|
done
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fdb_002fgdbm-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fdb_002fgdbm-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.11 The zsh/db/gdbm Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/db/gdbm module is used to create "tied" associative arrays that
|
|
|
|
|
interface to database files. If the GDBM interface is not available, the
|
|
|
|
|
builtins defined by this module will report an error. This module is
|
|
|
|
|
also intended as a prototype for creating additional database
|
|
|
|
|
interfaces, so the ztie builtin may move to a more generic module in the
|
|
|
|
|
future.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The builtins in this module are:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-ztie"></span> <span
|
|
|
|
|
id="index-database-tied-array_002c-creating"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ztie -d db/gdbm -f `filename` \[ -r \] `arrayname`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Open the GDBM database identified by `filename` and, if successful,
|
|
|
|
|
create the associative array `arrayname` linked to the file. To create a
|
|
|
|
|
local tied array, the parameter must first be declared, so commands
|
|
|
|
|
similar to the following would be executed inside a function scope:
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
local -A sampledb
|
|
|
|
|
ztie -d db/gdbm -f sample.gdbm sampledb
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -r option opens the database file for reading only, creating a
|
|
|
|
|
parameter with the readonly attribute. Without this option, using ‘ztie’
|
|
|
|
|
on a file for which the user does not have write permission is changed
|
|
|
|
|
in `arrayname` are immediately written to `filename`.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Changes to the file modes `filename` after it has been opened do not
|
2022-08-24 15:13:36 +02:00
|
|
|
|
alter the state of `arrayname`, but ‘typeset -r `arrayname`’ works as
|
2021-05-11 02:29:21 +02:00
|
|
|
|
expected.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-zuntie"></span> <span
|
|
|
|
|
id="index-database-tied-array_002c-destroying"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zuntie \[ -u \] `arrayname` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Close the GDBM database associated with each `arrayname` and then unset
|
2022-08-24 15:13:36 +02:00
|
|
|
|
the parameter. The -u option forces an unset of parameters made readonly
|
|
|
|
|
with ‘ztie -r’.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This happens automatically if the parameter is explicitly unset or its
|
|
|
|
|
local scope (function) ends. Note that a readonly parameter may not be
|
|
|
|
|
explicitly unset, so the only way to unset a global parameter created
|
2022-08-24 15:13:36 +02:00
|
|
|
|
with ‘ztie -r’ is to use ‘zuntie -u’.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-zgdbmpath"></span> <span
|
|
|
|
|
id="index-database-file-path_002c-reading"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zgdbmpath `parametername`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Put path to database file assigned to `parametername` into REPLY scalar.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-zgdbm_005ftied"></span> <span
|
|
|
|
|
id="index-database-tied-arrays_002c-enumerating"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zgdbm_tied
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Array holding names of all tied parameters.
|
|
|
|
|
|
|
|
|
|
The fields of an associative array tied to GDBM are neither cached nor
|
|
|
|
|
otherwise stored in memory, they are read from or written to the
|
|
|
|
|
database on each reference. Thus, for example, the values in a readonly
|
|
|
|
|
array may be changed by a second writer of the same database file.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fdeltochar-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fdeltochar-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.12 The zsh/deltochar Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/deltochar module makes available two ZLE functions:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-delete_002dto_002dchar"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
delete-to-char
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Read a character from the keyboard, and delete from the cursor position
|
|
|
|
|
up to and including the next (or, with repeat count `n`, the `n`th)
|
|
|
|
|
instance of that character. Negative repeat counts mean delete
|
|
|
|
|
backwards.
|
|
|
|
|
|
|
|
|
|
<span id="index-zap_002dto_002dchar"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zap-to-char
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
This behaves like delete-to-char, except that the final occurrence of
|
2021-05-11 02:29:21 +02:00
|
|
|
|
the character itself is not deleted.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fexample-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fexample-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.13 The zsh/example Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/example module makes available one builtin command:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-example"></span> <span
|
|
|
|
|
id="index-modules_002c-example"></span> <span
|
|
|
|
|
id="index-modules_002c-writing"></span> <span
|
|
|
|
|
id="index-writing-modules"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
example \[ -flags \] \[ `args` ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Displays the flags and arguments it is invoked with.
|
|
|
|
|
|
|
|
|
|
The purpose of the module is to serve as an example of how to write a
|
|
|
|
|
module.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002ffiles-Module"></span> <span
|
|
|
|
|
id="The-zsh_002ffiles-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.14 The zsh/files Module
|
|
|
|
|
|
|
|
|
|
<span id="index-files_002c-manipulating"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/files module makes available some common commands for file
|
2021-05-11 02:29:21 +02:00
|
|
|
|
manipulation as builtins; these commands are probably not needed for
|
|
|
|
|
many normal situations but can be useful in emergency recovery
|
|
|
|
|
situations with constrained resources. The commands do not implement all
|
|
|
|
|
features now required by relevant standards committees.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
For all commands, a variant beginning zf\_ is also available and loaded
|
2021-05-11 02:29:21 +02:00
|
|
|
|
automatically. Using the features capability of zmodload will let you
|
|
|
|
|
load only those names you want. Note that it’s possible to load only the
|
|
|
|
|
builtins with zsh-specific names using the following command:
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
zmodload -m -F zsh/files b:zf_\*
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
The commands loaded by default are:
|
|
|
|
|
|
|
|
|
|
<span id="index-chgrp"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
chgrp \[ -hRs \] `group` `filename` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Changes group of files specified. This is equivalent to chown with a
|
|
|
|
|
`user-spec` argument of ‘:`group`’.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-chmod"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
chmod \[ -Rs \] `mode` `filename` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Changes mode of files specified.
|
|
|
|
|
|
|
|
|
|
The specified `mode` must be in octal.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -R option causes chmod to recursively descend into directories,
|
2021-05-11 02:29:21 +02:00
|
|
|
|
changing the mode of all files in the directory after changing the mode
|
|
|
|
|
of the directory itself.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -s option is a zsh extension to chmod functionality. It enables
|
2021-05-11 02:29:21 +02:00
|
|
|
|
paranoid behaviour, intended to avoid security problems involving a
|
2022-08-24 15:13:36 +02:00
|
|
|
|
chmod being tricked into affecting files other than the ones intended.
|
|
|
|
|
It will refuse to follow symbolic links, so that (for example) ‘‘chmod
|
|
|
|
|
600 /tmp/foo/passwd’’ can’t accidentally chmod /etc/passwd if /tmp/foo
|
|
|
|
|
happens to be a link to /etc. It will also check where it is after
|
|
|
|
|
leaving directories, so that a recursive chmod of a deep directory tree
|
|
|
|
|
can’t end up recursively chmoding /usr as a result of directories being
|
|
|
|
|
moved up the tree.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-chown"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
chown \[ -hRs \] `user-spec` `filename` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Changes ownership and group of files specified.
|
|
|
|
|
|
|
|
|
|
The `user-spec` can be in four forms:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
`user`
|
|
|
|
|
change owner to `user`; do not change group
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
`user`::
|
|
|
|
|
change owner to `user`; do not change group
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
`user`:
|
|
|
|
|
change owner to `user`; change group to `user`’s primary group
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
`user`:`group`
|
|
|
|
|
change owner to `user`; change group to `group`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
:`group`
|
|
|
|
|
do not change owner; change group to `group`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
In each case, the ‘:’ may instead be a ‘.’. The rule is that if there is
|
|
|
|
|
a ‘:’ then the separator is ‘:’, otherwise if there is a ‘.’ then the
|
|
|
|
|
separator is ‘.’, otherwise there is no separator.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Each of `user` and `group` may be either a username (or group name, as
|
|
|
|
|
appropriate) or a decimal user ID (group ID). Interpretation as a name
|
|
|
|
|
takes precedence, if there is an all-numeric username (or group name).
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If the target is a symbolic link, the -h option causes chown to set the
|
|
|
|
|
ownership of the link instead of its target.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -R option causes chown to recursively descend into directories,
|
2021-05-11 02:29:21 +02:00
|
|
|
|
changing the ownership of all files in the directory after changing the
|
|
|
|
|
ownership of the directory itself.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -s option is a zsh extension to chown functionality. It enables
|
2021-05-11 02:29:21 +02:00
|
|
|
|
paranoid behaviour, intended to avoid security problems involving a
|
2022-08-24 15:13:36 +02:00
|
|
|
|
chown being tricked into affecting files other than the ones intended.
|
|
|
|
|
It will refuse to follow symbolic links, so that (for example) ‘‘chown
|
|
|
|
|
luser /tmp/foo/passwd’’ can’t accidentally chown /etc/passwd if /tmp/foo
|
|
|
|
|
happens to be a link to /etc. It will also check where it is after
|
|
|
|
|
leaving directories, so that a recursive chown of a deep directory tree
|
|
|
|
|
can’t end up recursively chowning /usr as a result of directories being
|
|
|
|
|
moved up the tree.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-ln"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ln \[ -dfhins \] `filename` `dest`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ln \[ -dfhins \] `filename` ... `dir`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Creates hard (or, with -s, symbolic) links. In the first form, the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
specified `dest`ination is created, as a link to the specified
|
|
|
|
|
`filename`. In the second form, each of the `filename`s is taken in
|
|
|
|
|
turn, and linked to a pathname in the specified `dir`ectory that has the
|
|
|
|
|
same last pathname component.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Normally, ln will not attempt to create hard links to directories. This
|
|
|
|
|
check can be overridden using the -d option. Typically only the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
super-user can actually succeed in creating hard links to directories.
|
|
|
|
|
This does not apply to symbolic links in any case.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
By default, existing files cannot be replaced by links. The -i option
|
|
|
|
|
causes the user to be queried about replacing existing files. The -f
|
2021-05-11 02:29:21 +02:00
|
|
|
|
option causes existing files to be silently deleted, without querying.
|
2022-08-24 15:13:36 +02:00
|
|
|
|
-f takes precedence.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -h and -n options are identical and both exist for compatibility;
|
|
|
|
|
either one indicates that if the target is a symlink then it should not
|
|
|
|
|
be dereferenced. Typically this is used in combination with -sf so that
|
|
|
|
|
if an existing link points to a directory then it will be removed,
|
|
|
|
|
instead of followed. If this option is used with multiple filenames and
|
|
|
|
|
the target is a symbolic link pointing to a directory then the result is
|
|
|
|
|
an error.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-mkdir"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
mkdir \[ -p \] \[ -m `mode` \] `dir` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Creates directories. With the -p option, non-existing parent directories
|
|
|
|
|
are first created if necessary, and there will be no complaint if the
|
|
|
|
|
directory already exists. The -m option can be used to specify (in
|
|
|
|
|
octal) a set of file permissions for the created directories, otherwise
|
|
|
|
|
mode 777 modified by the current umask (see umask(2)) is used.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-mv"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
mv \[ -fi \] `filename` `dest`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
mv \[ -fi \] `filename` ... `dir`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Moves files. In the first form, the specified `filename` is moved to the
|
|
|
|
|
specified `dest`ination. In the second form, each of the `filename`s is
|
|
|
|
|
taken in turn, and moved to a pathname in the specified `dir`ectory that
|
|
|
|
|
has the same last pathname component.
|
|
|
|
|
|
|
|
|
|
By default, the user will be queried before replacing any file removed.
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -i option causes the user to be queried about replacing any existing
|
|
|
|
|
files. The -f option causes any existing files to be silently deleted,
|
|
|
|
|
without querying. -f takes precedence.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Note that this mv will not move files across devices. Historical
|
|
|
|
|
versions of mv, when actual renaming is impossible, fall back on copying
|
|
|
|
|
and removing files; if this behaviour is desired, use cp and rm
|
|
|
|
|
manually. This may change in a future version.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-rm"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
rm \[ -dfiRrs \] `filename` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Removes files and directories specified.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Normally, rm will not remove directories (except with the -R or -r
|
|
|
|
|
options). The -d option causes rm to try removing directories with
|
|
|
|
|
unlink (see unlink(2)), the same method used for files. Typically only
|
|
|
|
|
the super-user can actually succeed in unlinking directories in this
|
|
|
|
|
way. -d takes precedence over -R and -r.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
By default, the user will be queried before removing any file removed.
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -i option causes the user to be queried about removing any files.
|
|
|
|
|
The -f option causes files to be silently deleted, without querying, and
|
|
|
|
|
suppresses all error indications. -f takes precedence.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -R and -r options cause rm to recursively descend into directories,
|
|
|
|
|
deleting all files in the directory before removing the directory with
|
|
|
|
|
the rmdir system call (see rmdir(2)).
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -s option is a zsh extension to rm functionality. It enables
|
2021-05-11 02:29:21 +02:00
|
|
|
|
paranoid behaviour, intended to avoid common security problems involving
|
2022-08-24 15:13:36 +02:00
|
|
|
|
a root-run rm being tricked into removing files other than the ones
|
2021-05-11 02:29:21 +02:00
|
|
|
|
intended. It will refuse to follow symbolic links, so that (for example)
|
2022-08-24 15:13:36 +02:00
|
|
|
|
‘‘rm /tmp/foo/passwd’’ can’t accidentally remove /etc/passwd if /tmp/foo
|
|
|
|
|
happens to be a link to /etc. It will also check where it is after
|
|
|
|
|
leaving directories, so that a recursive removal of a deep directory
|
|
|
|
|
tree can’t end up recursively removing /usr as a result of directories
|
|
|
|
|
being moved up the tree.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-rmdir"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
rmdir `dir` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Removes empty directories specified.
|
|
|
|
|
|
|
|
|
|
<span id="index-sync"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sync
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Calls the system call of the same name (see sync(2)), which flushes
|
|
|
|
|
dirty buffers to disk. It might return before the I/O has actually been
|
|
|
|
|
completed.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002flanginfo-Module"></span> <span
|
|
|
|
|
id="The-zsh_002flanginfo-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.15 The zsh/langinfo Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/langinfo module makes available one parameter:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-langinfo"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
langinfo
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
An associative array that maps langinfo elements to their values.
|
|
|
|
|
|
|
|
|
|
Your implementation may support a number of the following keys:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
CODESET, D_T\_FMT, D_FMT, T_FMT, RADIXCHAR, THOUSEP, YESEXPR, NOEXPR,
|
|
|
|
|
CRNCYSTR, ABDAY\_{1..7}, DAY\_{1..7}, ABMON\_{1..12}, MON\_{1..12},
|
|
|
|
|
T_FMT_AMPM, AM_STR, PM_STR, ERA, ERA_D\_FMT, ERA_D\_T_FMT, ERA_T\_FMT,
|
|
|
|
|
ALT_DIGITS
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fmapfile-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fmapfile-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.16 The zsh/mapfile Module
|
|
|
|
|
|
|
|
|
|
<span id="index-parameter_002c-file-access-via"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/mapfile module provides one special associative array parameter
|
|
|
|
|
of the same name.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-mapfile"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
mapfile
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This associative array takes as keys the names of files; the resulting
|
|
|
|
|
value is the content of the file. The value is treated identically to
|
|
|
|
|
any other text coming from a parameter. The value may also be assigned
|
|
|
|
|
to, in which case the file in question is written (whether or not it
|
|
|
|
|
originally existed); or an element may be unset, which will delete the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
file in question. For example, ‘vared ’mapfile\[myfile\]’’ works as
|
|
|
|
|
expected, editing the file ‘myfile’.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
When the array is accessed as a whole, the keys are the names of files
|
|
|
|
|
in the current directory, and the values are empty (to save a huge
|
2022-08-24 15:13:36 +02:00
|
|
|
|
overhead in memory). Thus ${(k)mapfile} has the same effect as the glob
|
|
|
|
|
operator \*(D), since files beginning with a dot are not special. Care
|
|
|
|
|
must be taken with expressions such as rm ${(k)mapfile}, which will
|
|
|
|
|
delete every file in the current directory without the usual ‘rm \*’
|
|
|
|
|
test.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The parameter mapfile may be made read-only; in that case, files
|
2021-05-11 02:29:21 +02:00
|
|
|
|
referenced may not be written or deleted.
|
|
|
|
|
|
|
|
|
|
A file may conveniently be read into an array as one line per element
|
2022-08-24 15:13:36 +02:00
|
|
|
|
with the form ‘`array`=("${(f@)mapfile\[`filename`\]}")’. The double
|
|
|
|
|
quotes and the ‘@’ are necessary to prevent empty lines from being
|
2021-05-11 02:29:21 +02:00
|
|
|
|
removed. Note that if the file ends with a newline, the shell will split
|
|
|
|
|
on the final newline, generating an additional empty field; this can be
|
|
|
|
|
suppressed by using
|
2022-08-24 15:13:36 +02:00
|
|
|
|
‘`array`=("${(f@)${mapfile\[`filename`\]%$’\\n’}}")’.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Limitations"></span>
|
|
|
|
|
|
|
|
|
|
### 22.16.1 Limitations
|
|
|
|
|
|
|
|
|
|
Although reading and writing of the file in question is efficiently
|
|
|
|
|
handled, zsh’s internal memory management may be arbitrarily baroque;
|
2022-08-24 15:13:36 +02:00
|
|
|
|
however, mapfile is usually very much more efficient than anything
|
2021-05-11 02:29:21 +02:00
|
|
|
|
involving a loop. Note in particular that the whole contents of the file
|
|
|
|
|
will always reside physically in memory when accessed (possibly multiple
|
|
|
|
|
times, due to standard parameter substitution operations). In
|
|
|
|
|
particular, this means handling of sufficiently long files (greater than
|
|
|
|
|
the machine’s swap space, or than the range of the pointer type) will be
|
|
|
|
|
incorrect.
|
|
|
|
|
|
|
|
|
|
No errors are printed or flagged for non-existent, unreadable, or
|
|
|
|
|
execution hierarchy to make this convenient.
|
|
|
|
|
|
|
|
|
|
It is unfortunate that the mechanism for loading modules does not yet
|
|
|
|
|
allow the user to specify the name of the shell parameter to be given
|
|
|
|
|
the special behaviour.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fmathfunc-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fmathfunc-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.17 The zsh/mathfunc Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-functions_002c-mathematical"></span> <span
|
|
|
|
|
id="index-mathematical-functions"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/mathfunc module provides standard mathematical functions for use
|
|
|
|
|
when evaluating mathematical formulae. The syntax agrees with normal C
|
|
|
|
|
and FORTRAN conventions, for example,
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
(( f = sin(0.3) ))
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
assigns the sine of 0.3 to the parameter f.
|
|
|
|
|
|
|
|
|
|
Most functions take floating point arguments and return a floating point
|
|
|
|
|
value. However, any necessary conversions from or to integer type will
|
2022-08-24 15:13:36 +02:00
|
|
|
|
be performed automatically by the shell. Apart from atan with a second
|
|
|
|
|
argument and the abs, int and float functions, all functions behave as
|
|
|
|
|
noted in the manual page for the corresponding C function, except that
|
|
|
|
|
any arguments out of range for the function in question will be detected
|
|
|
|
|
by the shell and an error reported.
|
|
|
|
|
|
|
|
|
|
The following functions take a single floating point argument: acos,
|
|
|
|
|
acosh, asin, asinh, atan, atanh, cbrt, ceil, cos, cosh, erf, erfc, exp,
|
|
|
|
|
expm1, fabs, floor, gamma, j0, j1, lgamma, log, log10, log1p, log2,
|
|
|
|
|
logb, sin, sinh, sqrt, tan, tanh, y0, y1. The atan function can
|
|
|
|
|
optionally take a second argument, in which case it behaves like the C
|
|
|
|
|
function atan2. The ilogb function takes a single floating point
|
|
|
|
|
argument, but returns an integer.
|
|
|
|
|
|
|
|
|
|
The function signgam takes no arguments, and returns an integer, which
|
|
|
|
|
is the C variable of the same name, as described in gamma(3). Note that
|
|
|
|
|
it is therefore only useful immediately after a call to gamma or lgamma.
|
|
|
|
|
Note also that ‘signgam()’ and ‘signgam’ are distinct expressions.
|
|
|
|
|
|
|
|
|
|
The functions min, max, and sum are defined not in this module but in
|
|
|
|
|
the zmathfunc autoloadable function, described in [Mathematical
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Functions](User-Contributions.html#Mathematical-Functions).
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The following functions take two floating point arguments: copysign,
|
|
|
|
|
fmod, hypot, nextafter.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The following take an integer first argument and a floating point second
|
2022-08-24 15:13:36 +02:00
|
|
|
|
argument: jn, yn.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The following take a floating point first argument and an integer second
|
2022-08-24 15:13:36 +02:00
|
|
|
|
argument: ldexp, scalb.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The function abs does not convert the type of its single argument; it
|
2021-05-11 02:29:21 +02:00
|
|
|
|
returns the absolute value of either a floating point number or an
|
2022-08-24 15:13:36 +02:00
|
|
|
|
integer. The functions float and int convert their arguments into a
|
2021-05-11 02:29:21 +02:00
|
|
|
|
floating point or integer value (by truncation) respectively.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Note that the C pow function is available in ordinary math evaluation as
|
|
|
|
|
the ‘\*\*’ operator and is not provided here.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The function rand48 is available if your system’s mathematical library
|
|
|
|
|
has the function erand48(3). It returns a pseudo-random floating point
|
2021-05-11 02:29:21 +02:00
|
|
|
|
number between 0 and 1. It takes a single string optional argument.
|
|
|
|
|
|
|
|
|
|
If the argument is not present, the random number seed is initialised by
|
2022-08-24 15:13:36 +02:00
|
|
|
|
three calls to the rand(3) function — this produces the same random
|
|
|
|
|
numbers as the next three values of $RANDOM.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
If the argument is present, it gives the name of a scalar parameter
|
|
|
|
|
where the current random number seed will be stored. On the first call,
|
|
|
|
|
the value must contain at least twelve hexadecimal digits (the remainder
|
|
|
|
|
of the string is ignored), or the seed will be initialised in the same
|
2022-08-24 15:13:36 +02:00
|
|
|
|
manner as for a call to rand48 with no argument. Subsequent calls to
|
|
|
|
|
rand48(`param`) will then maintain the seed in the parameter `param` as
|
|
|
|
|
a string of twelve hexadecimal digits, with no base signifier. The
|
2021-05-11 02:29:21 +02:00
|
|
|
|
random number sequences for different parameters are completely
|
2022-08-24 15:13:36 +02:00
|
|
|
|
independent, and are also independent from that used by calls to rand48
|
|
|
|
|
with no argument.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
For example, consider
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
print $(( rand48(seed) ))
|
|
|
|
|
print $(( rand48() ))
|
|
|
|
|
print $(( rand48(seed) ))
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Assuming $seed does not exist, it will be initialised by the first call.
|
|
|
|
|
In the second call, the default seed is initialised; note, however, that
|
|
|
|
|
because of the properties of rand() there is a correlation between the
|
|
|
|
|
seeds used for the two initialisations, so for more secure uses, you
|
|
|
|
|
should generate your own 12-byte seed. The third call returns to the
|
|
|
|
|
same sequence of random numbers used in the first call, unaffected by
|
|
|
|
|
the intervening rand48().
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fnearcolor-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fnearcolor-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.18 The zsh/nearcolor Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/nearcolor module replaces colours specified as hex triplets with
|
|
|
|
|
the nearest colour in the 88 or 256 colour palettes that are widely used
|
|
|
|
|
by terminal emulators. By default, 24-bit true colour escape codes are
|
|
|
|
|
generated when colours are specified using hex triplets. These are not
|
|
|
|
|
supported by all terminals. The purpose of this module is to make it
|
2021-05-11 02:29:21 +02:00
|
|
|
|
easier to define colour preferences in a form that can work across a
|
|
|
|
|
range of terminal emulators.
|
|
|
|
|
|
|
|
|
|
Aside from the default colour, the ANSI standard for terminal escape
|
|
|
|
|
codes provides for eight colours. The bright attribute brings this to
|
|
|
|
|
sixteen. These basic colours are commonly used in terminal applications
|
|
|
|
|
due to being widely supported. Expanded 88 and 256 colour palettes are
|
|
|
|
|
also common and, while the first sixteen colours vary somewhat between
|
|
|
|
|
terminals and configurations, these add a generally consistent and
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
In order to use the zsh/nearcolor module, it only needs to be loaded.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Thereafter, whenever a colour is specified using a hex triplet, it will
|
|
|
|
|
be compared against each of the available colours and the closest will
|
|
|
|
|
be selected. The first sixteen colours are never matched in
|
|
|
|
|
|
|
|
|
|
It isn’t possible to reliably detect support for true colour in the
|
|
|
|
|
terminal emulator. It is therefore recommended to be selective in
|
2022-08-24 15:13:36 +02:00
|
|
|
|
loading the zsh/nearcolor module. For example, the following checks the
|
|
|
|
|
COLORTERM environment variable:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
[[ $COLORTERM = *(24bit|truecolor)* ]] || zmodload zsh/nearcolor
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
Note that some terminals accept the true color escape codes but map them
|
|
|
|
|
internally to a more limited palette in a similar manner to the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/nearcolor module.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fnewuser-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fnewuser-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.19 The zsh/newuser Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/newuser module is loaded at boot if it is available, the RCS
|
|
|
|
|
option is set, and the PRIVILEGED option is not set (all three are true
|
|
|
|
|
by default). This takes place immediately after commands in the global
|
|
|
|
|
zshenv file (typically /etc/zshenv), if any, have been executed. If the
|
|
|
|
|
module is not available it is silently ignored by the shell; the module
|
|
|
|
|
may safely be removed from $MODULE_PATH by the administrator if it is
|
|
|
|
|
not required.
|
|
|
|
|
|
|
|
|
|
On loading, the module tests if any of the start-up files .zshenv,
|
|
|
|
|
.zprofile, .zshrc or .zlogin exist in the directory given by the
|
|
|
|
|
environment variable ZDOTDIR, or the user’s home directory if that is
|
2021-05-11 02:29:21 +02:00
|
|
|
|
not set. The test is not performed and the module halts processing if
|
|
|
|
|
the shell was in an emulation mode (i.e. had been invoked as some other
|
|
|
|
|
shell than zsh).
|
|
|
|
|
|
|
|
|
|
If none of the start-up files were found, the module then looks for the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
file newuser first in a sitewide directory, usually the parent directory
|
|
|
|
|
of the site-functions directory, and if that is not found the module
|
|
|
|
|
searches in a version-specific directory, usually the parent of the
|
|
|
|
|
functions directory containing version-specific functions. (These
|
|
|
|
|
directories can be configured when zsh is built using the
|
|
|
|
|
–enable-site-scriptdir=`dir` and –enable-scriptdir=`dir` flags to
|
|
|
|
|
configure, respectively; the defaults are `prefix`/share/zsh and
|
|
|
|
|
`prefix`/share/zsh/$ZSH_VERSION where the default `prefix` is
|
|
|
|
|
/usr/local.)
|
|
|
|
|
|
|
|
|
|
If the file newuser is found, it is then sourced in the same manner as a
|
|
|
|
|
start-up file. The file is expected to contain code to install start-up
|
|
|
|
|
files for the user, however any valid shell code will be executed.
|
|
|
|
|
|
|
|
|
|
The zsh/newuser module is then unconditionally unloaded.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Note that it is possible to achieve exactly the same effect as the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh/newuser module by adding code to /etc/zshenv. The module exists
|
2021-05-11 02:29:21 +02:00
|
|
|
|
simply to allow the shell to make arrangements for new users without the
|
|
|
|
|
need for intervention by package maintainers and system administrators.
|
|
|
|
|
|
|
|
|
|
The script supplied with the module invokes the shell function
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh-newuser-install. This may be invoked directly by the user even if
|
|
|
|
|
the zsh/newuser module is disabled. Note, however, that if the module is
|
|
|
|
|
not installed the function will not be installed either. The function is
|
|
|
|
|
documented in [User Configuration
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Functions](User-Contributions.html#User-Configuration-Functions).
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fparameter-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fparameter-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.20 The zsh/parameter Module
|
|
|
|
|
|
|
|
|
|
<span id="index-parameters_002c-special-1"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/parameter module gives access to some of the internal hash
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-options-1"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
options
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The keys for this associative array are the names of the options that
|
2022-08-24 15:13:36 +02:00
|
|
|
|
can be set and unset using the setopt and unsetopt builtins. The value
|
|
|
|
|
of each key is either the string on if the option is currently set, or
|
|
|
|
|
the string off if the option is unset. Setting a key to one of these
|
|
|
|
|
strings is like setting or unsetting the option, respectively. Unsetting
|
|
|
|
|
a key in this array is like setting it to the value off.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-commands"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
commands
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
names of external commands, the values are the pathnames of the files
|
|
|
|
|
that would be executed when the command would be invoked. Setting a with
|
2022-08-24 15:13:36 +02:00
|
|
|
|
the hash builtin. Unsetting a key as in ‘unset "commands\[foo\]"’
|
2021-05-11 02:29:21 +02:00
|
|
|
|
removes the entry for the given key from the command
|
|
|
|
|
|
|
|
|
|
<span id="index-functions-2"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
functions
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This associative array maps names of enabled functions to their
|
|
|
|
|
definitions. Setting a key in it is like defining a function with the
|
|
|
|
|
name given by the key and the body given by the value. Unsetting a key
|
|
|
|
|
removes the definition for the function named by the key.
|
|
|
|
|
|
|
|
|
|
<span id="index-dis_005ffunctions"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
dis_functions
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Like functions but for disabled functions.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-functions_005fsource"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
functions_source
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This readonly associative array maps names of enabled functions to the
|
|
|
|
|
name of the file containing the source of the function.
|
|
|
|
|
|
|
|
|
|
For an autoloaded function that has already been loaded, or marked for
|
|
|
|
|
autoload with an absolute path, or that has had its path resolved with
|
2022-08-24 15:13:36 +02:00
|
|
|
|
‘functions -r’, this is the file found for autoloading, resolved to an
|
|
|
|
|
absolute path.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
For a function defined within the body of a script or sourced file, this
|
|
|
|
|
is the name of that file. In this case, this is the exact path
|
|
|
|
|
originally used to that file, which may be a relative path.
|
|
|
|
|
|
|
|
|
|
For any other function, including any defined at an interactive prompt
|
|
|
|
|
or an autoload function whose path has not yet been resolved, this is
|
|
|
|
|
the empty string. However, the hash element is reported as defined just
|
|
|
|
|
so long as the function is present: the keys to this hash are the same
|
2022-08-24 15:13:36 +02:00
|
|
|
|
as those to $functions.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-dis_005ffunctions_005fsource"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
dis_functions_source
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Like functions_source but for disabled functions.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-builtins"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
builtins
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This associative array gives information about the builtin commands
|
|
|
|
|
currently enabled. The keys are the names of the builtin commands and
|
2022-08-24 15:13:36 +02:00
|
|
|
|
the values are either ‘undefined’ for builtin commands that will
|
|
|
|
|
automatically be loaded from a module if invoked or ‘defined’ for
|
2021-05-11 02:29:21 +02:00
|
|
|
|
builtin commands that are already loaded.
|
|
|
|
|
|
|
|
|
|
<span id="index-dis_005fbuiltins"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
dis_builtins
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Like builtins but for disabled builtin commands.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-reswords"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
reswords
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This array contains the enabled reserved words.
|
|
|
|
|
|
|
|
|
|
<span id="index-dis_005freswords"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
dis_reswords
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Like reswords but for disabled reserved words.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-patchars"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
patchars
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This array contains the enabled pattern characters.
|
|
|
|
|
|
|
|
|
|
<span id="index-dis_005fpatchars"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
dis_patchars
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Like patchars but for disabled pattern characters.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-aliases"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
aliases
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This maps the names of the regular aliases currently enabled to their
|
|
|
|
|
expansions.
|
|
|
|
|
|
|
|
|
|
<span id="index-dis_005faliases"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
dis_aliases
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Like aliases but for disabled regular aliases.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-galiases"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
galiases
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Like aliases, but for global aliases.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-dis_005fgaliases"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
dis_galiases
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Like galiases but for disabled global aliases.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-saliases"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
saliases
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Like raliases, but for suffix aliases.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-dis_005fsaliases"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
dis_saliases
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Like saliases but for disabled suffix aliases.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-parameters-1"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
parameters
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The keys in this associative array are the names of the parameters
|
|
|
|
|
currently defined. The values are strings describing the type of the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
parameter, in the same format used by the t parameter flag, see
|
2021-05-11 02:29:21 +02:00
|
|
|
|
[Parameter Expansion](Expansion.html#Parameter-Expansion) . Setting or
|
|
|
|
|
unsetting keys in this array is not possible.
|
|
|
|
|
|
|
|
|
|
<span id="index-modules-1"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
modules
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
An associative array giving information about modules. The keys are the
|
|
|
|
|
names of the modules loaded, registered to be autoloaded, or aliased.
|
|
|
|
|
The value says which state the named module is in and is one of the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
strings ‘loaded’, ‘autoloaded’, or ‘alias:`name`’, where `name` is the
|
|
|
|
|
name the module is aliased to.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Setting or unsetting keys in this array is not possible.
|
|
|
|
|
|
|
|
|
|
<span id="index-dirstack"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
dirstack
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
A normal array holding the elements of the directory stack. Note that
|
2022-08-24 15:13:36 +02:00
|
|
|
|
the output of the dirs builtin command includes one more directory, the
|
|
|
|
|
current working directory.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-history-2"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
history
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This associative array maps history event numbers to the full history
|
|
|
|
|
lines. Although it is presented as an associative array, the array of
|
2022-08-24 15:13:36 +02:00
|
|
|
|
all values (${history\[@\]}) is guaranteed to be returned in order from
|
2021-05-11 02:29:21 +02:00
|
|
|
|
most recent to oldest history event, that is, by decreasing history
|
|
|
|
|
event number.
|
|
|
|
|
|
|
|
|
|
<span id="index-historywords"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
historywords
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
A special array containing the words stored in the history. These also
|
|
|
|
|
appear in most to least recent order.
|
|
|
|
|
|
|
|
|
|
<span id="index-jobdirs"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
jobdirs
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This associative array maps job numbers to the directories from which
|
|
|
|
|
the job was started (which may not be the current directory of the job).
|
|
|
|
|
|
|
|
|
|
The keys of the associative arrays are usually valid job numbers, and
|
2022-08-24 15:13:36 +02:00
|
|
|
|
these are the values output with, for example, ${(k)jobdirs}.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Non-numeric job references may be used when looking up a value; for
|
2022-08-24 15:13:36 +02:00
|
|
|
|
example, ${jobdirs\[%+\]} refers to the current job.
|
|
|
|
|
|
|
|
|
|
See the jobs builtin for how job information is provided in a subshell.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-jobtexts"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
jobtexts
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This associative array maps job numbers to the texts of the command
|
|
|
|
|
lines that were used to start the jobs.
|
|
|
|
|
|
|
|
|
|
Handling of the keys of the associative array is as described for
|
2022-08-24 15:13:36 +02:00
|
|
|
|
jobdirs above.
|
|
|
|
|
|
|
|
|
|
See the jobs builtin for how job information is provided in a subshell.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-jobstates"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
jobstates
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This associative array gives information about the states of the jobs
|
|
|
|
|
currently known. The keys are the job numbers and the values are strings
|
2022-08-24 15:13:36 +02:00
|
|
|
|
of the form ‘`job-state`:`mark`:`pid`=`state`...’. The `job-state` gives
|
|
|
|
|
the state the whole job is currently in, one of ‘running’, ‘suspended’,
|
|
|
|
|
or ‘done’. The `mark` is ‘+’ for the current job, ‘-’ for the previous
|
|
|
|
|
job and empty otherwise. This is followed by one ‘:`pid`=`state`’ for
|
|
|
|
|
every process in the job. The `pid`s are, of course, the process IDs and
|
|
|
|
|
the `state` describes the state of that process.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Handling of the keys of the associative array is as described for
|
2022-08-24 15:13:36 +02:00
|
|
|
|
jobdirs above.
|
|
|
|
|
|
|
|
|
|
See the jobs builtin for how job information is provided in a subshell.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-nameddirs"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
nameddirs
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This associative array maps the names of named directories to the
|
|
|
|
|
pathnames they stand for.
|
|
|
|
|
|
|
|
|
|
<span id="index-userdirs"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
userdirs
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This associative array maps user names to the pathnames of their home
|
|
|
|
|
directories.
|
|
|
|
|
|
|
|
|
|
<span id="index-usergroups"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
usergroups
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This associative array maps names of system groups of which the current
|
|
|
|
|
user is a member to the corresponding group identifiers. The contents
|
2022-08-24 15:13:36 +02:00
|
|
|
|
are the same as the groups output by the id command.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-funcfiletrace"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
funcfiletrace
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This array contains the absolute line numbers and corresponding file
|
|
|
|
|
names for the point where the current function, sourced file, or (if
|
2022-08-24 15:13:36 +02:00
|
|
|
|
EVAL_LINENO is set) eval command was called. The array is of the same
|
|
|
|
|
length as funcsourcetrace and functrace, but differs from
|
|
|
|
|
funcsourcetrace in that the line and file are the point of call, not the
|
|
|
|
|
point of definition, and differs from functrace in that all values are
|
|
|
|
|
absolute line numbers in files, rather than relative to the start of a
|
|
|
|
|
function, if any.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-funcsourcetrace"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
funcsourcetrace
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This array contains the file names and line numbers of the points where
|
2022-08-24 15:13:36 +02:00
|
|
|
|
the functions, sourced files, and (if EVAL_LINENO is set) eval commands
|
|
|
|
|
currently being executed were defined. The line number is the line where
|
|
|
|
|
the ‘function `name`’ or ‘`name` ()’ started. In the case of an
|
|
|
|
|
autoloaded function the line number is reported as zero. The format of
|
|
|
|
|
each element is `filename`:`lineno`.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
For functions autoloaded from a file in native zsh format, where only
|
|
|
|
|
the body of the function occurs in the file, or for files that have been
|
2022-08-24 15:13:36 +02:00
|
|
|
|
executed by the source or ‘.’ builtins, the trace information is shown
|
|
|
|
|
as `filename`:`0`, since the entire file is the definition. The source
|
|
|
|
|
file name is resolved to an absolute path when the function is loaded or
|
|
|
|
|
the path to it otherwise resolved.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Most users will be interested in the information in the funcfiletrace
|
2021-05-11 02:29:21 +02:00
|
|
|
|
array instead.
|
|
|
|
|
|
|
|
|
|
<span id="index-funcstack"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
funcstack
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This array contains the names of the functions, sourced files, and (if
|
2022-08-24 15:13:36 +02:00
|
|
|
|
EVAL_LINENO is set) eval commands. currently being executed. The first
|
|
|
|
|
element is the name of the function using the parameter.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The standard shell array zsh_eval_context can be used to determine the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
type of shell construct being executed at each depth: note, however,
|
|
|
|
|
that is in the opposite order, with the most recent item last, and it is
|
2022-08-24 15:13:36 +02:00
|
|
|
|
more detailed, for example including an entry for toplevel, the main
|
2021-05-11 02:29:21 +02:00
|
|
|
|
shell code being executed either interactively or from a script, which
|
2022-08-24 15:13:36 +02:00
|
|
|
|
is not present in $funcstack.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-functrace"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
functrace
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This array contains the names and line numbers of the callers
|
|
|
|
|
corresponding to the functions currently being executed. The format of
|
2022-08-24 15:13:36 +02:00
|
|
|
|
each element is `name`:`lineno`. Callers are also shown for sourced
|
|
|
|
|
files; the caller is the point where the source or ‘.’ command was
|
2021-05-11 02:29:21 +02:00
|
|
|
|
executed.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fpcre-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fpcre-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.21 The zsh/pcre Module
|
|
|
|
|
|
|
|
|
|
<span id="index-regular-expressions_002c-perl_002dcompatible"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/pcre module makes some commands available as builtins:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-pcre_005fcompile"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
pcre_compile \[ -aimxs \] `PCRE`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Compiles a perl-compatible regular expression.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Option -a will force the pattern to be anchored. Option -i will compile
|
|
|
|
|
a case-insensitive pattern. Option -m will compile a multi-line pattern;
|
|
|
|
|
that is, ^ and $ will match newlines within the pattern. Option -x will
|
|
|
|
|
compile an extended pattern, wherein whitespace and # comments are
|
|
|
|
|
ignored. Option -s makes the dot metacharacter match all characters,
|
|
|
|
|
including those that indicate newline.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-pcre_005fstudy"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
pcre_study
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Studies the previously-compiled PCRE which may result in faster
|
|
|
|
|
matching.
|
|
|
|
|
|
|
|
|
|
<span id="index-pcre_005fmatch"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
pcre_match \[ -v `var` \] \[ -a `arr` \] \[ -n `offset` \] \[ -b \]
|
|
|
|
|
`string`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Returns successfully if string matches the previously-compiled PCRE.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Upon successful match, if the expression captures substrings within
|
2022-08-24 15:13:36 +02:00
|
|
|
|
parentheses, pcre_match will set the array match to those substrings,
|
|
|
|
|
unless the -a option is given, in which case it will set the array
|
|
|
|
|
`arr`. Similarly, the variable MATCH will be set to the entire matched
|
|
|
|
|
portion of the string, unless the -v option is given, in which case the
|
|
|
|
|
variable `var` will be set. No variables are altered if there is no
|
|
|
|
|
successful match. A -n option starts searching for a match from the byte
|
|
|
|
|
`offset` position in `string`. If the -b option is given, the variable
|
|
|
|
|
ZPCRE_OP will be set to an offset pair string, representing the byte
|
|
|
|
|
offset positions of the entire matched portion within the `string`. For
|
|
|
|
|
example, a ZPCRE_OP set to "32 45" indicates that the matched portion
|
|
|
|
|
began on byte offset 32 and ended on byte offset 44. Here, byte offset
|
|
|
|
|
position 45 is the position directly after the matched portion. Keep in
|
|
|
|
|
mind that the byte position isn’t necessarily the same as the character
|
|
|
|
|
position when UTF-8 characters are involved. Consequently, the byte
|
|
|
|
|
offset positions are only to be relied on in the context of using them
|
|
|
|
|
for subsequent searches on `string`, using an offset position as an
|
|
|
|
|
argument to the -n option. This is mostly used to implement the "find
|
|
|
|
|
all non-overlapping matches" functionality.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
A simple example of "find all non-overlapping matches":
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
string="The following zip codes: 78884 90210 99513"
|
|
|
|
|
pcre_compile -m "\d{5}"
|
|
|
|
|
accum=()
|
|
|
|
|
pcre_match -b -- $string
|
|
|
|
|
while [[ $? -eq 0 ]] do
|
|
|
|
|
b=($=ZPCRE_OP)
|
|
|
|
|
accum+=$MATCH
|
|
|
|
|
pcre_match -b -n $b[2] -- $string
|
|
|
|
|
done
|
|
|
|
|
print -l $accum
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/pcre module makes available the following test condition:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-pcre_002dmatch"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
`expr` -pcre-match `pcre`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Matches a string against a perl-compatible regular expression.
|
|
|
|
|
|
|
|
|
|
For example,
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
[[ "$text" -pcre-match ^d+$ ]] &&
|
|
|
|
|
print text variable contains only "d's".
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-REMATCH_005fPCRE-1"></span> <span
|
|
|
|
|
id="index-NO_005fCASE_005fMATCH-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If the REMATCH_PCRE option is set, the =\~ operator is equivalent to
|
|
|
|
|
-pcre-match, and the NO_CASE_MATCH option may be used. Note that
|
|
|
|
|
NO_CASE_MATCH never applies to the pcre_match builtin, instead use the
|
|
|
|
|
-i switch of pcre_compile.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fparam_002fprivate-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fparam_002fprivate-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.22 The zsh/param/private Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/param/private module is used to create parameters whose scope is
|
|
|
|
|
limited to the current function body, and *not* to other functions
|
2021-05-11 02:29:21 +02:00
|
|
|
|
called by the current function.
|
|
|
|
|
|
|
|
|
|
This module provides a single autoloaded builtin:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-private"></span> <span
|
|
|
|
|
id="index-private-parameter_002c-creating"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
private \[ {+\|-}AHUahlmrtux \] \[ {+\|-}EFLRZi \[ `n` \] \] \[
|
|
|
|
|
`name`\[=`value`\] ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The private builtin accepts all the same options and arguments as local
|
|
|
|
|
([Shell Builtin
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Commands](Shell-Builtin-Commands.html#Shell-Builtin-Commands)) except
|
2022-08-24 15:13:36 +02:00
|
|
|
|
for the ‘-T’ option. Tied parameters may not be made private.
|
|
|
|
|
|
|
|
|
|
The ‘-p’ option is presently a no-op because the state of private
|
|
|
|
|
parameters cannot reliably be reloaded. This also applies to printing
|
|
|
|
|
private parameters with ‘typeset -p’.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If used at the top level (outside a function scope), private creates a
|
|
|
|
|
normal parameter in the same manner as declare or typeset. A warning
|
|
|
|
|
about this is printed if WARN_CREATE_GLOBAL is set
|
|
|
|
|
([Options](Options.html#Options)). Used inside a function scope, private
|
|
|
|
|
creates a local parameter similar to one declared with local, except
|
|
|
|
|
having special properties noted below.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Special parameters which expose or manipulate internal shell state, such
|
2022-08-24 15:13:36 +02:00
|
|
|
|
as ARGC, argv, COLUMNS, LINES, UID, EUID, IFS, PROMPT, RANDOM, SECONDS,
|
|
|
|
|
etc., cannot be made private unless the ‘-h’ option is used to hide the
|
|
|
|
|
special meaning of the parameter. This may change in the future.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
As with other typeset equivalents, private is both a builtin and a
|
2021-05-11 02:29:21 +02:00
|
|
|
|
reserved word, so arrays may be assigned with parenthesized word list
|
2022-08-24 15:13:36 +02:00
|
|
|
|
`name`=(`value`...) syntax. However, the reserved word ‘private’ is not
|
|
|
|
|
available until zsh/param/private is loaded, so care must be taken with
|
|
|
|
|
order of execution and parsing for function definitions which use
|
|
|
|
|
private. To compensate for this, the module also adds the option ‘-P’ to
|
|
|
|
|
the ‘local’ builtin to declare private parameters.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
For example, this construction fails if zsh/param/private has not yet
|
|
|
|
|
been loaded when ‘bad_declaration’ is defined:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
bad_declaration() {
|
|
|
|
|
zmodload zsh/param/private
|
|
|
|
|
private array=( one two three )
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
This construction works because local is already a keyword, and the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
module is loaded before the statement is executed:
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
good_declaration() {
|
|
|
|
|
zmodload zsh/param/private
|
|
|
|
|
local -P array=( one two three )
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The following is usable in scripts but may have trouble with autoload:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
zmodload zsh/param/private
|
|
|
|
|
iffy_declaration() {
|
|
|
|
|
private array=( one two three )
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The private builtin may always be used with scalar assignments and for
|
2021-05-11 02:29:21 +02:00
|
|
|
|
declarations without assignments.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Parameters declared with private have the following properties:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
- Within the function body where it is declared, the parameter behaves
|
2021-05-11 02:29:21 +02:00
|
|
|
|
as a local, except as noted above for tied or special parameters.
|
2022-08-24 15:13:36 +02:00
|
|
|
|
- The type of a parameter declared private cannot be changed in the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
scope where it was declared, even if the parameter is unset. Thus an
|
|
|
|
|
array cannot be assigned to a private scalar, etc.
|
2022-08-24 15:13:36 +02:00
|
|
|
|
- Within any other function called by the declaring function, the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
private parameter does *NOT* hide other parameters of the same name,
|
|
|
|
|
so for example a global parameter of the same name is visible and
|
|
|
|
|
may be assigned or unset. This includes calls to anonymous
|
2022-08-24 15:13:36 +02:00
|
|
|
|
functions, although that may also change in the future. However, the
|
|
|
|
|
private name may not be created outside the local scope when it was
|
|
|
|
|
not previously declared.
|
|
|
|
|
- An exported private remains in the environment of inner scopes but
|
2021-05-11 02:29:21 +02:00
|
|
|
|
appears unset for the current shell in those scopes. Generally,
|
|
|
|
|
exporting private parameters should be avoided.
|
|
|
|
|
|
|
|
|
|
Note that this differs from the static scope defined by compiled
|
|
|
|
|
languages derived from C, in that the a new call to the same function
|
|
|
|
|
creates a new scope, i.e., the parameter is still associated with the
|
|
|
|
|
call stack rather than with the function definition. It differs from ksh
|
2022-08-24 15:13:36 +02:00
|
|
|
|
‘typeset -S’ because the syntax used to define the function has no
|
2021-05-11 02:29:21 +02:00
|
|
|
|
bearing on whether the parameter scope is respected.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fregex-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fregex-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.23 The zsh/regex Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-regular-expressions"></span> <span
|
|
|
|
|
id="index-regex"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/regex module makes available the following test condition:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-regex_002dmatch"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
`expr` -regex-match `regex`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Matches a string against a POSIX extended regular expression. On
|
|
|
|
|
successful match, matched portion of the string will normally be placed
|
2022-08-24 15:13:36 +02:00
|
|
|
|
in the MATCH variable. If there are any capturing parentheses within the
|
|
|
|
|
regex, then the match array variable will contain those. If the match is
|
|
|
|
|
not successful, then the variables will not be altered.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
For example,
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
[[ alphabetical -regex-match ^a([^a]+)a([^a]+)a ]] &&
|
|
|
|
|
print -l $MATCH X $match
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If the option REMATCH_PCRE is not set, then the =\~ operator will
|
2021-05-11 02:29:21 +02:00
|
|
|
|
automatically load this module as needed and will invoke the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
-regex-match operator.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If BASH_REMATCH is set, then the array BASH_REMATCH will be set instead
|
|
|
|
|
of MATCH and match.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Note that the zsh/regex module logic relies on the host system. The same
|
|
|
|
|
`expr` and `regex` pair could produce different results on different
|
|
|
|
|
platforms if a `regex` with non-standard syntax is given.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
For example, no syntax for matching a word boundary is defined in the
|
|
|
|
|
POSIX extended regular expression standard. GNU libc and BSD libc both
|
|
|
|
|
provide such syntaxes as extensions (\\b and \[\[:\<:\]\]/\[\[:>:\]\]
|
|
|
|
|
respectively), but neither of these syntaxes is supported by both of
|
|
|
|
|
these implementations.
|
|
|
|
|
|
|
|
|
|
Refer to the regcomp(3) and re_format(7) manual pages on your system for
|
|
|
|
|
locally-supported syntax.
|
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
<span id="The-zsh_002fsched-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fsched-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.24 The zsh/sched Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/sched module makes available one builtin command and one
|
2021-05-11 02:29:21 +02:00
|
|
|
|
parameter.
|
|
|
|
|
|
|
|
|
|
<span id="index-sched"></span> <span id="index-timed-execution"></span>
|
|
|
|
|
<span id="index-execution_002c-timed"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sched \[-o\] \[+\]`hh`:`mm`\[:`ss`\] `command` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sched \[-o\] \[+\]`seconds` `command` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sched \[ -`item` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Make an entry in the scheduled list of commands to execute. The time may
|
|
|
|
|
be specified in either absolute or relative time, and either as hours,
|
|
|
|
|
minutes and (optionally) seconds separated by a colon, or seconds alone.
|
|
|
|
|
An absolute number of seconds indicates the time since the epoch
|
|
|
|
|
(1970/01/01 00:00); this is useful in combination with the features in
|
2022-08-24 15:13:36 +02:00
|
|
|
|
the zsh/datetime module, see [The zsh/datetime
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Module](#The-zsh_002fdatetime-Module).
|
|
|
|
|
|
|
|
|
|
With no arguments, prints the list of scheduled commands. If the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
scheduled command has the -o flag set, this is shown at the start of the
|
|
|
|
|
command.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
With the argument ‘-`item`’, removes the given item from the list. The
|
2021-05-11 02:29:21 +02:00
|
|
|
|
numbering of the list is continuous and entries are in time order, so
|
|
|
|
|
the numbering can change when entries are added or deleted.
|
|
|
|
|
|
|
|
|
|
Commands are executed either immediately before a prompt, or while the
|
|
|
|
|
shell’s line editor is waiting for input. In the latter case it is
|
|
|
|
|
useful to be able to produce output that does not interfere with the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
line being edited. Providing the option -o causes the shell to clear the
|
|
|
|
|
command line before the event and redraw it afterwards. This should be
|
|
|
|
|
used with any scheduled event that produces visible output to the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
terminal; it is not needed, for example, with output that updates a
|
|
|
|
|
terminal emulator’s title bar.
|
|
|
|
|
|
|
|
|
|
To effect changes to the editor buffer when an event executes, use the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
‘zle’ command with no arguments to test whether the editor is active,
|
|
|
|
|
and if it is, then use ‘zle `widget`’ to access the editor via the named
|
|
|
|
|
`widget`.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The sched builtin is not made available by default when the shell starts
|
|
|
|
|
in a mode emulating another shell. It can be made available with the
|
|
|
|
|
command ‘zmodload -F zsh/sched b:sched’.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zsh_005fscheduled_005fevents"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsh_scheduled_events
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
A readonly array corresponding to the events scheduled by the sched
|
2021-05-11 02:29:21 +02:00
|
|
|
|
builtin. The indices of the array correspond to the numbers shown when
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sched is run with no arguments (provided that the KSH_ARRAYS option is
|
|
|
|
|
not set). The value of the array consists of the scheduled time in
|
2021-05-11 02:29:21 +02:00
|
|
|
|
seconds since the epoch (see [The zsh/datetime
|
|
|
|
|
Module](#The-zsh_002fdatetime-Module) for facilities for using this
|
|
|
|
|
number), followed by a colon, followed by any options (which may be
|
2022-08-24 15:13:36 +02:00
|
|
|
|
empty but will be preceded by a ‘-’ otherwise), followed by a colon,
|
2021-05-11 02:29:21 +02:00
|
|
|
|
followed by the command to be executed.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The sched builtin should be used for manipulating the events. Note that
|
|
|
|
|
this will have an immediate effect on the contents of the array, so that
|
|
|
|
|
indices may become invalid.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fnet_002fsocket-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fnet_002fsocket-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.25 The zsh/net/socket Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/net/socket module makes available one builtin command:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-zsocket"></span> <span id="index-sockets"></span> <span
|
|
|
|
|
id="index-sockets_002c-Unix-domain"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsocket \[ -altv \] \[ -d `fd` \] \[ `args` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsocket is implemented as a builtin to allow full use of shell command
|
2021-05-11 02:29:21 +02:00
|
|
|
|
line editing, file I/O, and job control mechanisms.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Outbound-Connections-1"></span>
|
|
|
|
|
|
|
|
|
|
### 22.25.1 Outbound Connections
|
|
|
|
|
|
|
|
|
|
<span id="index-sockets_002c-outbound-Unix-domain"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsocket \[ -v \] \[ -d `fd` \] `filename`
|
|
|
|
|
Open a new Unix domain connection to `filename`. The shell parameter
|
|
|
|
|
REPLY will be set to the file descriptor associated with that
|
|
|
|
|
connection. Currently, only stream connections are supported.
|
|
|
|
|
|
|
|
|
|
If -d is specified, its argument will be taken as the target file
|
|
|
|
|
descriptor for the connection.
|
|
|
|
|
|
|
|
|
|
In order to elicit more verbose output, use -v.
|
|
|
|
|
|
|
|
|
|
File descriptors can be closed with normal shell syntax when no longer
|
|
|
|
|
needed, for example:
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
|
|
|
|
```zsh
|
|
|
|
|
exec {REPLY}>&-
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Inbound-Connections"></span>
|
|
|
|
|
|
|
|
|
|
### 22.25.2 Inbound Connections
|
|
|
|
|
|
|
|
|
|
<span id="index-sockets_002c-inbound-Unix-domain"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsocket -l \[ -v \] \[ -d `fd` \] `filename`
|
|
|
|
|
zsocket -l will open a socket listening on `filename`. The shell
|
|
|
|
|
parameter REPLY will be set to the file descriptor associated with that
|
|
|
|
|
listener. The file descriptor remains open in subshells
|
|
|
|
|
|
|
|
|
|
If -d is specified, its argument will be taken as the target file
|
|
|
|
|
descriptor for the connection.
|
|
|
|
|
|
|
|
|
|
In order to elicit more verbose output, use -v.
|
|
|
|
|
|
|
|
|
|
zsocket -a \[ -tv \] \[ -d `targetfd` \] `listenfd`
|
|
|
|
|
zsocket -a will accept an incoming connection to the socket associated
|
|
|
|
|
with `listenfd`. The shell parameter REPLY will be set to the file
|
|
|
|
|
descriptor associated with the inbound connection. The file descriptor
|
|
|
|
|
remains open in subshells
|
|
|
|
|
|
|
|
|
|
If -d is specified, its argument will be taken as the target file
|
|
|
|
|
descriptor for the connection.
|
|
|
|
|
|
|
|
|
|
If -t is specified, zsocket will return if no incoming connection is
|
|
|
|
|
pending. Otherwise it will wait for one.
|
|
|
|
|
|
|
|
|
|
In order to elicit more verbose output, use -v.
|
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
<span id="The-zsh_002fstat-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fstat-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.26 The zsh/stat Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/stat module makes available one builtin command under two
|
2021-05-11 02:29:21 +02:00
|
|
|
|
possible names:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-zstat"></span> <span id="index-stat"></span> <span
|
|
|
|
|
id="index-files_002c-listing"></span> <span
|
|
|
|
|
id="index-files_002c-examining"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zstat \[ -gnNolLtTrs \] \[ -f `fd` \] \[ -H `hash` \] \[ -A `array` \]
|
|
|
|
|
\[ -F `fmt` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
\[ +`element` \] \[ `file` ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
stat `...`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The command acts as a front end to the stat system call (see stat(2)).
|
|
|
|
|
The same command is provided with two names; as the name stat is often
|
|
|
|
|
used by an external command it is recommended that only the zstat form
|
|
|
|
|
of the command is used. This can be arranged by loading the module with
|
|
|
|
|
the command ‘zmodload -F zsh/stat b:zstat’.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If the stat call fails, the appropriate system error message printed and
|
|
|
|
|
status 1 is returned. The fields of struct stat give information about
|
|
|
|
|
the files provided as arguments to the command. In addition to those
|
|
|
|
|
available from the stat call, an extra element ‘link’ is provided. These
|
|
|
|
|
elements are:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
device
|
|
|
|
|
The number of the device on which the file resides.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
inode
|
|
|
|
|
The unique number of the file on this device (‘*inode*’ number).
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
mode
|
|
|
|
|
The mode of the file; that is, the file’s type and access permissions.
|
|
|
|
|
With the -s option, this will be returned as a string corresponding to
|
|
|
|
|
the first column in the display of the ls -l command.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
nlink
|
|
|
|
|
The number of hard links to the file.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
uid
|
|
|
|
|
The user ID of the owner of the file. With the -s option, this is
|
|
|
|
|
displayed as a user name.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
gid
|
|
|
|
|
The group ID of the file. With the -s option, this is displayed as a
|
|
|
|
|
group name.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
rdev
|
|
|
|
|
The raw device number. This is only useful for special devices.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
size
|
|
|
|
|
The size of the file in bytes.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
atime
|
|
|
|
|
mtime
|
|
|
|
|
ctime
|
|
|
|
|
The last access, modification and inode change times of the file,
|
|
|
|
|
respectively, as the number of seconds since midnight GMT on 1st
|
|
|
|
|
January, 1970. With the -s option, these are printed as strings for the
|
|
|
|
|
local time zone; the format can be altered with the -F option, and with
|
|
|
|
|
the -g option the times are in GMT.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
blksize
|
|
|
|
|
The number of bytes in one allocation block on the device on which the
|
|
|
|
|
file resides.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
block
|
|
|
|
|
The number of disk blocks used by the file.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
link
|
|
|
|
|
If the file is a link and the -L option is in effect, this contains the
|
|
|
|
|
name of the file linked to, otherwise it is empty. Note that if this
|
|
|
|
|
element is selected (‘‘zstat +link’’) then the -L option is
|
|
|
|
|
automatically used.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
A particular element may be selected by including its name preceded by a
|
2022-08-24 15:13:36 +02:00
|
|
|
|
‘+’ in the option list; only one element is allowed. The element may be
|
|
|
|
|
shortened to any unique set of leading characters. Otherwise, all
|
2021-05-11 02:29:21 +02:00
|
|
|
|
elements will be shown for all files.
|
|
|
|
|
|
|
|
|
|
Options:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
-A `array`
|
|
|
|
|
Instead of displaying the results on standard output, assign them to an
|
|
|
|
|
`array`, one struct stat element per array element for each file in
|
|
|
|
|
order. In this case neither the name of the element nor the name of the
|
|
|
|
|
files appears in `array` unless the -t or -n options were given,
|
|
|
|
|
respectively. If -t is given, the element name appears as a prefix to
|
|
|
|
|
the appropriate array element; if -n is given, the file name appears as
|
|
|
|
|
a separate array element preceding all the others. Other formatting
|
|
|
|
|
options are respected.
|
|
|
|
|
|
|
|
|
|
-H `hash`
|
|
|
|
|
Similar to -A, but instead assign the values to `hash`. The keys are the
|
|
|
|
|
elements listed above. If the -n option is provided then the name of the
|
|
|
|
|
file is included in the hash with key name.
|
|
|
|
|
|
|
|
|
|
-f `fd`
|
|
|
|
|
Use the file on file descriptor `fd` instead of named files; no list of
|
|
|
|
|
file names is allowed in this case.
|
|
|
|
|
|
|
|
|
|
-F `fmt`
|
|
|
|
|
Supplies a strftime (see strftime(3)) string for the formatting of the
|
|
|
|
|
time elements. The format string supports all of the zsh extensions
|
|
|
|
|
described in [Prompt Expansion](Prompt-Expansion.html#Prompt-Expansion).
|
|
|
|
|
In particular, -F %s.%N can be used to show timestamps with nanosecond
|
|
|
|
|
precision if supported by the system. The -s option is implied.
|
|
|
|
|
|
|
|
|
|
-g
|
|
|
|
|
Show the time elements in the GMT time zone. The -s option is implied.
|
|
|
|
|
|
|
|
|
|
-l
|
|
|
|
|
List the names of the type elements (to standard output or an array as
|
|
|
|
|
appropriate) and return immediately; arguments, and options other than
|
|
|
|
|
-A, are ignored.
|
|
|
|
|
|
|
|
|
|
-L
|
|
|
|
|
Perform an lstat (see lstat(2)) rather than a stat system call. In this
|
|
|
|
|
case, if the file is a link, information about the link itself rather
|
|
|
|
|
than the target file is returned. This option is required to make the
|
|
|
|
|
link element useful. It’s important to note that this is the exact
|
|
|
|
|
opposite from ls(1), etc.
|
|
|
|
|
|
|
|
|
|
-n
|
|
|
|
|
Always show the names of files. Usually these are only shown when output
|
|
|
|
|
is to standard output and there is more than one file in the list.
|
|
|
|
|
|
|
|
|
|
-N
|
|
|
|
|
Never show the names of files.
|
|
|
|
|
|
|
|
|
|
-o
|
|
|
|
|
If a raw file mode is printed, show it in octal, which is more useful
|
|
|
|
|
for human consumption than the default of decimal. A leading zero will
|
|
|
|
|
be printed in this case. Note that this does not affect whether a raw or
|
|
|
|
|
formatted file mode is shown, which is controlled by the -r and -s
|
|
|
|
|
options, nor whether a mode is shown at all.
|
|
|
|
|
|
|
|
|
|
-r
|
|
|
|
|
Print raw data (the default format) alongside string data (the -s
|
|
|
|
|
format); the string data appears in parentheses after the raw data.
|
|
|
|
|
|
|
|
|
|
-s
|
|
|
|
|
Print mode, uid, gid and the three time elements as strings instead of
|
|
|
|
|
numbers. In each case the format is like that of ls -l.
|
|
|
|
|
|
|
|
|
|
-t
|
|
|
|
|
Always show the type names for the elements of struct stat. Usually
|
|
|
|
|
these are only shown when output is to standard output and no individual
|
|
|
|
|
element has been selected.
|
|
|
|
|
|
|
|
|
|
-T
|
|
|
|
|
Never show the type names of the struct stat elements.
|
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
<span id="The-zsh_002fsystem-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fsystem-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.27 The zsh/system Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/system module makes available various builtin commands and
|
2021-05-11 02:29:21 +02:00
|
|
|
|
parameters.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Builtins"></span>
|
|
|
|
|
|
|
|
|
|
### 22.27.1 Builtins
|
|
|
|
|
|
|
|
|
|
<span id="index-syserror"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
syserror \[ -e `errvar` \] \[ -p `prefix` \] \[ `errno` \| `errname` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This command prints out the error message associated with `errno`, a
|
|
|
|
|
system error number, followed by a newline to standard error.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Instead of the error number, a name `errname`, for example ENOENT, may
|
2021-05-11 02:29:21 +02:00
|
|
|
|
be used. The set of names is the same as the contents of the array
|
2022-08-24 15:13:36 +02:00
|
|
|
|
errnos, see below.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
If the string `prefix` is given, it is printed in front of the error
|
|
|
|
|
message, with no intervening space.
|
|
|
|
|
|
|
|
|
|
If `errvar` is supplied, the entire message, without a newline, is
|
|
|
|
|
assigned to the parameter names `errvar` and nothing is output.
|
|
|
|
|
|
|
|
|
|
A return status of 0 indicates the message was successfully printed
|
|
|
|
|
(although it may not be useful if the error number was out of the
|
|
|
|
|
system’s range), a return status of 1 indicates an error in the
|
|
|
|
|
parameters, and a return status of 2 indicates the error name was not
|
|
|
|
|
recognised (no message is printed for this).
|
|
|
|
|
|
|
|
|
|
<span id="index-sysopen"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sysopen \[ -arw \] \[ -m `permissions` \] \[ -o `options` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
-u `fd` `file`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
This command opens a file. The -r, -w and -a flags indicate whether the
|
|
|
|
|
file should be opened for reading, writing and appending, respectively.
|
|
|
|
|
The -m option allows the initial permissions to use when creating a file
|
|
|
|
|
to be specified in octal form. The file descriptor is specified with -u.
|
|
|
|
|
Either an explicit file descriptor in the range 0 to 9 can be specified
|
|
|
|
|
or a variable name can be given to which the file descriptor number will
|
|
|
|
|
be assigned.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -o option allows various system specific options to be specified as
|
|
|
|
|
a comma-separated list. The following is a list of possible options.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Note that, depending on the system, some may not be available.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
cloexec
|
|
|
|
|
mark file to be closed when other programs are executed (else the file
|
|
|
|
|
descriptor remains open in subshells and forked external
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
create
|
|
|
|
|
creat
|
|
|
|
|
create file if it does not exist
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
excl
|
|
|
|
|
create file, error if it already exists
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
noatime
|
|
|
|
|
suppress updating of the file atime
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
nofollow
|
|
|
|
|
fail if `file` is a symbolic link
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
nonblock
|
|
|
|
|
the file is opened in nonblocking mode
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sync
|
|
|
|
|
request that writes wait until data has been physically written
|
|
|
|
|
|
|
|
|
|
truncate
|
|
|
|
|
trunc
|
|
|
|
|
truncate file to size 0
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
To close the file, use one of the following:
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
exec {fd}<&-
|
|
|
|
|
exec {fd}>&-
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<span id="index-sysread"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sysread \[ -c `countvar` \] \[ -i `infd` \] \[ -o `outfd` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
\[ -s `bufsize` \] \[ -t `timeout` \] \[ `param` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Perform a single system read from file descriptor `infd`, or zero if
|
2022-08-24 15:13:36 +02:00
|
|
|
|
that is not given. The result of the read is stored in `param` or REPLY
|
|
|
|
|
if that is not given. If `countvar` is given, the number of bytes read
|
|
|
|
|
is assigned to the parameter named by `countvar`.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The maximum number of bytes read is `bufsize` or 8192 if that is not
|
|
|
|
|
given, however the command returns as soon as any number of bytes was
|
|
|
|
|
successfully read.
|
|
|
|
|
|
|
|
|
|
If `timeout` is given, it specifies a timeout in seconds, which may be
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zero to poll the file descriptor. This is handled by the poll system
|
|
|
|
|
call if available, otherwise the select system call if available.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
If `outfd` is given, an attempt is made to write all the bytes just read
|
|
|
|
|
to the file descriptor `outfd`. If this fails, because of a system error
|
2022-08-24 15:13:36 +02:00
|
|
|
|
other than EINTR or because of an internal zsh error during an
|
2021-05-11 02:29:21 +02:00
|
|
|
|
interrupt, the bytes read but not written are stored in the parameter
|
|
|
|
|
named by `param` if supplied (no default is used in this case), and the
|
|
|
|
|
number of bytes read but not written is stored in the parameter named by
|
|
|
|
|
`countvar` if that is supplied. If it was successful, `countvar`
|
|
|
|
|
contains the full number of bytes transferred, as usual, and `param` is
|
|
|
|
|
not set.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The error EINTR (interrupted system call) is handled internally so that
|
|
|
|
|
shell interrupts are transparent to the caller. Any other error causes a
|
|
|
|
|
return.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The possible return statuses are
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
0
|
|
|
|
|
At least one byte of data was successfully read and, if appropriate,
|
|
|
|
|
written.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
1
|
|
|
|
|
There was an error in the parameters to the command. This is the only
|
|
|
|
|
error for which a message is printed to standard error.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
2
|
|
|
|
|
There was an error on the read, or on polling the input file descriptor
|
|
|
|
|
for a timeout. The parameter ERRNO gives the error.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
3
|
|
|
|
|
Data were successfully read, but there was an error writing them to
|
|
|
|
|
`outfd`. The parameter ERRNO gives the error.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
4
|
|
|
|
|
The attempt to read timed out. Note this does not set ERRNO as this is
|
|
|
|
|
not a system error.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
5
|
|
|
|
|
No system error occurred, but zero bytes were read. This usually
|
|
|
|
|
indicates end of file. The parameters are set according to the usual
|
|
|
|
|
rules; no write to `outfd` is attempted.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sysseek \[ -u `fd` \] \[ -w start\|end\|current \] `offset`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The current file position at which future reads and writes will take
|
|
|
|
|
place is adjusted to the specified byte offset. The `offset` is
|
2022-08-24 15:13:36 +02:00
|
|
|
|
evaluated as a math expression. The -u option allows the file descriptor
|
|
|
|
|
to be specified. By default the offset is specified relative to the
|
|
|
|
|
start or the file but, with the -w option, it is possible to specify
|
|
|
|
|
that the offset should be relative to the current position or the end of
|
|
|
|
|
the file.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
syswrite \[ -c `countvar` \] \[ -o `outfd` \] `data`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The data (a single string of bytes) are written to the file descriptor
|
2022-08-24 15:13:36 +02:00
|
|
|
|
`outfd`, or 1 if that is not given, using the write system call.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Multiple write operations may be used if the first does not write all
|
|
|
|
|
the data.
|
|
|
|
|
|
|
|
|
|
If `countvar` is given, the number of byte written is stored in the
|
|
|
|
|
parameter named by `countvar`; this may not be the full length of `data`
|
|
|
|
|
if an error occurred.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The error EINTR (interrupted system call) is handled internally by
|
2021-05-11 02:29:21 +02:00
|
|
|
|
retrying; otherwise an error causes the command to return. For example,
|
2022-08-24 15:13:36 +02:00
|
|
|
|
if the file descriptor is set to non-blocking output, an error EAGAIN
|
|
|
|
|
(on some systems, EWOULDBLOCK) may result in the command returning
|
2021-05-11 02:29:21 +02:00
|
|
|
|
early.
|
|
|
|
|
|
|
|
|
|
The return status may be 0 for success, 1 for an error in the parameters
|
|
|
|
|
to the command, or 2 for an error on the write; no error message is
|
2022-08-24 15:13:36 +02:00
|
|
|
|
printed in the last case, but the parameter ERRNO will reflect the error
|
|
|
|
|
that occurred.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsystem flock \[ -t `timeout` \] \[ -i `interval` \] \[ -f `var` \]
|
|
|
|
|
\[-er\] `file`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsystem flock -u `fd_expr`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The builtin zsystem’s subcommand flock performs advisory file locking
|
|
|
|
|
(via the fcntl(2) system call) over the entire contents of the given
|
|
|
|
|
file. This form of locking requires the processes accessing the file to
|
|
|
|
|
cooperate; its most obvious use is between two instances of the shell
|
|
|
|
|
itself.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
In the first form the named `file`, which must already exist, is locked
|
|
|
|
|
by opening a file descriptor to the file and applying a lock to the file
|
|
|
|
|
descriptor. The lock terminates when the shell process that created the
|
|
|
|
|
lock exits; it is therefore often convenient to create file locks within
|
|
|
|
|
subshells, since the lock is automatically released when the subshell
|
2022-08-24 15:13:36 +02:00
|
|
|
|
exits. Note that use of the print builtin with the -u option will, as a
|
|
|
|
|
side effect, release the lock, as will redirection to the file in the
|
|
|
|
|
shell holding the lock. To work around this use a subshell, e.g. ‘(print
|
|
|
|
|
message) \>\> `file`’. Status 0 is returned if the lock succeeds, else
|
|
|
|
|
status 1.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
In the second form the file descriptor given by the arithmetic
|
|
|
|
|
expression `fd_expr` is closed, releasing a lock. The file descriptor
|
2022-08-24 15:13:36 +02:00
|
|
|
|
can be queried by using the ‘-f `var`’ form during the lock; on a
|
2021-05-11 02:29:21 +02:00
|
|
|
|
successful lock, the shell variable `var` is set to the file descriptor
|
|
|
|
|
used for locking. The lock will be released if the file descriptor is
|
2022-08-24 15:13:36 +02:00
|
|
|
|
closed by any other means, for example using ‘exec {`var`}>&-’; however,
|
|
|
|
|
the form described here performs a safety check that the file descriptor
|
|
|
|
|
is in use for file locking.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
By default the shell waits indefinitely for the lock to succeed. The
|
2022-08-24 15:13:36 +02:00
|
|
|
|
option -t `timeout` specifies a timeout for the lock in seconds;
|
|
|
|
|
fractional seconds are allowed. During this period, the shell will
|
|
|
|
|
attempt to lock the file every `interval` seconds if the -i `interval`
|
|
|
|
|
option is given, otherwise once a second. (This `interval` is shortened
|
|
|
|
|
before the last attempt if needed, so that the shell waits only until
|
|
|
|
|
the `timeout` and not longer.) If the attempt times out, status 2 is
|
|
|
|
|
returned.
|
|
|
|
|
|
|
|
|
|
(Note: `timeout` is limited to 2^30-1 seconds (about 34 years), and
|
|
|
|
|
`interval` to 0.999 \* LONG_MAX microseconds (only about 35 minutes on
|
|
|
|
|
32-bit systems).)
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If the option -e is given, the file descriptor for the lock is preserved
|
|
|
|
|
when the shell uses exec to start a new process; otherwise it is closed
|
|
|
|
|
at that point and the lock released.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If the option -r is given, the lock is only for reading, otherwise it is
|
|
|
|
|
for reading and writing. The file descriptor is opened accordingly.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zsystem supports `subcommand`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The builtin zsystem’s subcommand supports tests whether a given
|
2021-05-11 02:29:21 +02:00
|
|
|
|
subcommand is supported. It returns status 0 if so, else status 1. It
|
|
|
|
|
operates silently unless there was a syntax error (i.e. the wrong number
|
|
|
|
|
of arguments), in which case status 255 is returned. Status 1 can
|
|
|
|
|
indicate one of two things: `subcommand` is known but not supported by
|
|
|
|
|
the current operating system, or `subcommand` is not known (possibly
|
|
|
|
|
because this is an older version of the shell before it was
|
|
|
|
|
implemented).
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Math-Functions"></span>
|
|
|
|
|
|
|
|
|
|
### 22.27.2 Math Functions
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
systell(`fd`)
|
|
|
|
|
The systell math function returns the current file position for the file
|
|
|
|
|
descriptor passed as an argument.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="Parameters-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
### 22.27.3 Parameters
|
|
|
|
|
|
|
|
|
|
<span id="index-errnos"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
errnos
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
A readonly array of the names of errors defined on the system. These are
|
|
|
|
|
typically macros defined in C by including the system header file
|
2022-08-24 15:13:36 +02:00
|
|
|
|
errno.h. The index of each name (assuming the option KSH_ARRAYS is
|
2021-05-11 02:29:21 +02:00
|
|
|
|
unset) corresponds to the error number. Error numbers `num` before the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
last known error which have no name are given the name E`num` in the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
array.
|
|
|
|
|
|
|
|
|
|
Note that aliases for errors are not handled; only the canonical name is
|
|
|
|
|
used.
|
|
|
|
|
|
|
|
|
|
<span id="index-sysparams"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sysparams
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
A readonly associative array. The keys are:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
pid
|
|
|
|
|
<span id="index-pid_002c-sysparams"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Returns the process ID of the current process, even in subshells.
|
|
|
|
|
Compare $$, which returns the process ID of the main shell process.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ppid
|
|
|
|
|
<span id="index-ppid_002c-sysparams"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Returns the current process ID of the parent of the current process,
|
|
|
|
|
even in subshells. Compare $PPID, which returns the process ID of the
|
|
|
|
|
initial parent of the main shell process.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
procsubstpid
|
|
|
|
|
Returns the process ID of the last process started for process
|
|
|
|
|
substitution, i.e. the \<(`...`) and >(`...`) expansions.
|
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
<span id="The-zsh_002fnet_002ftcp-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fnet_002ftcp-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.28 The zsh/net/tcp Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/net/tcp module makes available one builtin command:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-ztcp"></span> <span id="index-TCP"></span> <span
|
|
|
|
|
id="index-sockets_002c-TCP"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ztcp \[ -acflLtv \] \[ -d `fd` \] \[ `args` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ztcp is implemented as a builtin to allow full use of shell command line
|
|
|
|
|
editing, file I/O, and job control mechanisms.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If ztcp is run with no options, it will output
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If it is run with only the option -L, it will output the contents of is
|
|
|
|
|
ignored if given with a command to open or close a session. The output
|
|
|
|
|
consists of a set of lines, one per session, each containing the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
following elements separated by spaces:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
File descriptor
|
|
|
|
|
The file descriptor in use for the connection. For normal inbound (I)
|
|
|
|
|
and outbound (O) connections this may be read and written by the usual
|
|
|
|
|
shell mechanisms. However, it should only be close with ‘ztcp -c’.
|
|
|
|
|
|
|
|
|
|
Connection type
|
|
|
|
|
A letter indicating how the session was created:
|
|
|
|
|
|
|
|
|
|
Z
|
|
|
|
|
A session created with the zftp command.
|
|
|
|
|
|
|
|
|
|
L
|
|
|
|
|
A connection opened for listening with ‘ztcp -l’.
|
|
|
|
|
|
|
|
|
|
I
|
|
|
|
|
An inbound connection accepted with ‘ztcp -a’.
|
|
|
|
|
|
|
|
|
|
O
|
|
|
|
|
An outbound connection created with ‘ztcp `host` `...`’.
|
|
|
|
|
|
|
|
|
|
The local host
|
|
|
|
|
This is usually set to an all-zero IP address as the address of the
|
|
|
|
|
localhost is irrelevant.
|
|
|
|
|
|
|
|
|
|
The local port
|
|
|
|
|
This is likely to be zero unless the connection is for listening.
|
|
|
|
|
|
|
|
|
|
The remote host
|
|
|
|
|
This is the fully qualified domain name of the peer, if available, else
|
|
|
|
|
an IP address. It is an all-zero IP address for a session opened for
|
|
|
|
|
listening.
|
|
|
|
|
|
|
|
|
|
The remote port
|
|
|
|
|
This is zero for a connection opened for listening.
|
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Outbound-Connections"></span>
|
|
|
|
|
|
|
|
|
|
### 22.28.1 Outbound Connections
|
|
|
|
|
|
|
|
|
|
<span id="index-sockets_002c-outbound-TCP"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ztcp \[ -v \] \[ -d `fd` \] `host` \[ `port` \]
|
|
|
|
|
Open a new TCP connection to `host`. If the `port` is omitted, it will
|
|
|
|
|
default to port 23. The connection will REPLY will be set to the file
|
|
|
|
|
descriptor associated with that connection.
|
|
|
|
|
|
|
|
|
|
If -d is specified, its argument will be taken as the target file
|
|
|
|
|
descriptor for the connection.
|
|
|
|
|
|
|
|
|
|
In order to elicit more verbose output, use -v.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Inbound-Connections-1"></span>
|
|
|
|
|
|
|
|
|
|
### 22.28.2 Inbound Connections
|
|
|
|
|
|
|
|
|
|
<span id="index-sockets_002c-inbound-TCP"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ztcp -l \[ -v \] \[ -d `fd` \] `port`
|
|
|
|
|
ztcp -l will open a socket listening on TCP `port`. The socket will be
|
|
|
|
|
added to the will be set to the file descriptor associated with that
|
|
|
|
|
listener.
|
|
|
|
|
|
|
|
|
|
If -d is specified, its argument will be taken as the target file
|
|
|
|
|
descriptor for the connection.
|
|
|
|
|
|
|
|
|
|
In order to elicit more verbose output, use -v.
|
|
|
|
|
|
|
|
|
|
ztcp -a \[ -tv \] \[ -d `targetfd` \] `listenfd`
|
|
|
|
|
ztcp -a will accept an incoming connection to the port associated with
|
|
|
|
|
`listenfd`. The connection will be added to the session be set to the
|
|
|
|
|
file descriptor associated with the inbound connection.
|
|
|
|
|
|
|
|
|
|
If -d is specified, its argument will be taken as the target file
|
|
|
|
|
descriptor for the connection.
|
|
|
|
|
|
|
|
|
|
If -t is specified, ztcp will return if no incoming connection is
|
|
|
|
|
pending. Otherwise it will wait for one.
|
|
|
|
|
|
|
|
|
|
In order to elicit more verbose output, use -v.
|
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Closing-Connections"></span>
|
|
|
|
|
|
|
|
|
|
### 22.28.3 Closing Connections
|
|
|
|
|
|
|
|
|
|
<span id="index-sockets_002c-closing-TCP"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ztcp -cf \[ -v \] \[ `fd` \]
|
|
|
|
|
ztcp -c \[ -v \] \[ `fd` \]
|
|
|
|
|
ztcp -c will close the socket associated with `fd`. The socket will be
|
|
|
|
|
removed from the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Normally, sockets registered by zftp (see [The zsh/zftp
|
|
|
|
|
Module](#The-zsh_002fzftp-Module) ) cannot be closed this way. In order
|
|
|
|
|
to force such a socket closed, use -f.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
In order to elicit more verbose output, use -v.
|
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
<span id="Example-2"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
### 22.28.4 Example
|
|
|
|
|
|
|
|
|
|
<span id="index-TCP_002c-example"></span>
|
|
|
|
|
|
|
|
|
|
Here is how to create a TCP connection between two instances of zsh. We
|
|
|
|
|
need to pick an unassigned port; here we use the randomly chosen 5123.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
On host1,
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
zmodload zsh/net/tcp
|
|
|
|
|
ztcp -l 5123
|
|
|
|
|
listenfd=$REPLY
|
|
|
|
|
ztcp -a $listenfd
|
|
|
|
|
fd=$REPLY
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
The second from last command blocks until there is an incoming
|
|
|
|
|
connection.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Now create a connection from host2 (which may, of course, be the same
|
2021-05-11 02:29:21 +02:00
|
|
|
|
machine):
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
zmodload zsh/net/tcp
|
|
|
|
|
ztcp host1 5123
|
|
|
|
|
fd=$REPLY
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Now on each host, $fd contains a file descriptor for talking to the
|
|
|
|
|
other. For example, on host1:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
print This is a message >&$fd
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
and on host2:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
read -r line <&$fd; print -r - $line
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
prints ‘This is a message’.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
To tidy up, on host1:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
ztcp -c $listenfd
|
|
|
|
|
ztcp -c $fd
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
and on host2
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
ztcp -c $fd
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002ftermcap-Module"></span> <span
|
|
|
|
|
id="The-zsh_002ftermcap-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.29 The zsh/termcap Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/termcap module makes available one builtin command:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-echotc"></span> <span
|
|
|
|
|
id="index-termcap-value_002c-printing"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
echotc `cap` \[ `arg` ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Output the termcap value corresponding to the capability `cap`, with
|
|
|
|
|
optional arguments.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/termcap module makes available one parameter:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-termcap"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
termcap
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
An associative array that maps termcap capability codes to their values.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fterminfo-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fterminfo-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
## 22.30 The zsh/terminfo Module
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/terminfo module makes available one builtin command:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-echoti"></span> <span
|
|
|
|
|
id="index-terminfo-value_002c-printing"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
echoti `cap` \[ `arg` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Output the terminfo value corresponding to the capability `cap`,
|
|
|
|
|
instantiated with `arg` if applicable.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/terminfo module makes available one parameter:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-terminfo"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
terminfo
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
An associative array that maps terminfo capability names to their
|
|
|
|
|
values.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
<span id="The-zsh_002fwatch-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fwatch-Module-1"></span>
|
|
|
|
|
|
|
|
|
|
## 22.31 The zsh/watch Module
|
|
|
|
|
|
|
|
|
|
The zsh/watch module can be used to report when specific users log in or
|
|
|
|
|
out. This is controlled via the following parameters.
|
|
|
|
|
|
|
|
|
|
<span id="index-LOGCHECK"></span>
|
|
|
|
|
|
|
|
|
|
LOGCHECK
|
|
|
|
|
|
|
|
|
|
The interval in seconds between checks for login/logout activity using
|
|
|
|
|
the watch parameter.
|
|
|
|
|
|
|
|
|
|
<span id="index-watch"></span> <span id="index-WATCH"></span>
|
|
|
|
|
|
|
|
|
|
watch \<S> \<Z> (WATCH \<S>)
|
|
|
|
|
|
|
|
|
|
An array (colon-separated list) of login/logout events to report.
|
|
|
|
|
|
|
|
|
|
If it contains the single word ‘all’, then all login/logout events are
|
|
|
|
|
reported. If it contains the single word ‘notme’, then all events are
|
|
|
|
|
reported as with ‘all’ except $USERNAME.
|
|
|
|
|
|
|
|
|
|
An entry in this list may consist of a username, an ‘@’ followed by a
|
|
|
|
|
remote hostname, and a ‘%’ followed by a line (tty). Any of these may be
|
|
|
|
|
a pattern (be sure to quote this during the assignment to watch so that
|
|
|
|
|
it does not immediately perform file generation); the setting of the
|
|
|
|
|
EXTENDED_GLOB option is respected. Any or all of these components may be
|
|
|
|
|
present in an entry; if a login/logout event matches all of them, it is
|
|
|
|
|
reported.
|
|
|
|
|
|
|
|
|
|
For example, with the EXTENDED_GLOB option set, the following:
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
|
|
|
|
```zsh
|
|
|
|
|
watch=('^(pws|barts)')
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
causes reports for activity associated with any user other than pws or
|
|
|
|
|
barts.
|
|
|
|
|
|
|
|
|
|
<span id="index-WATCHFMT"></span>
|
|
|
|
|
|
|
|
|
|
WATCHFMT
|
|
|
|
|
|
|
|
|
|
The format of login/logout reports if the watch parameter is set.
|
|
|
|
|
Default is ‘%n has %a %l from %m’. Recognizes the following escape
|
|
|
|
|
sequences:
|
|
|
|
|
|
|
|
|
|
%n
|
|
|
|
|
The name of the user that logged in/out.
|
|
|
|
|
|
|
|
|
|
%a
|
|
|
|
|
The observed action, i.e. "logged on" or "logged off".
|
|
|
|
|
|
|
|
|
|
%l
|
|
|
|
|
The line (tty) the user is logged in on.
|
|
|
|
|
|
|
|
|
|
%M
|
|
|
|
|
The full hostname of the remote host.
|
|
|
|
|
|
|
|
|
|
%m
|
|
|
|
|
The hostname up to the first ‘.’. If only the IP address is available or
|
|
|
|
|
the utmp field contains the name of an X-windows display, the whole name
|
|
|
|
|
is printed.
|
|
|
|
|
|
|
|
|
|
*NOTE:* The ‘%m’ and ‘%M’ escapes will work only if there is a host name
|
|
|
|
|
field in the utmp on your machine. Otherwise they are treated as
|
|
|
|
|
ordinary strings.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
%F{`color`} (%f)
|
|
|
|
|
Start (stop) using a different foreground color.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
%K{`color`} (%k)
|
|
|
|
|
Start (stop) using a different background color.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
%S (%s)
|
|
|
|
|
Start (stop) standout mode.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
%U (%u)
|
|
|
|
|
Start (stop) underline mode.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
%B (%b)
|
|
|
|
|
Start (stop) boldface mode.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
%t
|
|
|
|
|
%@
|
|
|
|
|
The time, in 12-hour, am/pm format.
|
|
|
|
|
|
|
|
|
|
%T
|
|
|
|
|
The time, in 24-hour format.
|
|
|
|
|
|
|
|
|
|
%w
|
|
|
|
|
The date in ‘`day`-`dd`’ format.
|
|
|
|
|
|
|
|
|
|
%W
|
|
|
|
|
The date in ‘`mm`/`dd`/`yy`’ format.
|
|
|
|
|
|
|
|
|
|
%D
|
|
|
|
|
The date in ‘`yy`-`mm`-`dd`’ format.
|
|
|
|
|
|
|
|
|
|
%D{`string`}
|
|
|
|
|
The date formatted as `string` using the strftime function, with zsh
|
|
|
|
|
extensions as described by [Prompt
|
|
|
|
|
Expansion](Prompt-Expansion.html#Prompt-Expansion).
|
|
|
|
|
|
|
|
|
|
%(`x`:`true-text`:`false-text`)
|
|
|
|
|
Specifies a ternary expression. The character following the `x` is
|
|
|
|
|
arbitrary; the same character is used to separate the text for the
|
|
|
|
|
"true" result from that for the "false" result. Both the separator and
|
|
|
|
|
the right parenthesis may be escaped with a backslash. Ternary
|
|
|
|
|
expressions may be nested.
|
|
|
|
|
|
|
|
|
|
The test character `x` may be any one of ‘l’, ‘n’, ‘m’ or ‘M’, which
|
|
|
|
|
indicate a ‘true’ result if the corresponding escape sequence would
|
|
|
|
|
return a non-empty value; or it may be ‘a’, which indicates a ‘true’
|
|
|
|
|
result if the watched user has logged in, or ‘false’ if he has logged
|
|
|
|
|
out. Other characters evaluate to neither true nor false; the entire
|
|
|
|
|
expression is omitted in this case.
|
|
|
|
|
|
|
|
|
|
If the result is ‘true’, then the `true-text` is formatted according to
|
|
|
|
|
the rules above and printed, and the `false-text` is skipped. If
|
|
|
|
|
‘false’, the `true-text` is skipped and the `false-text` is formatted
|
|
|
|
|
and printed. Either or both of the branches may be empty, but both
|
|
|
|
|
separators must be present in any case.
|
|
|
|
|
|
|
|
|
|
Furthermore, the zsh/watch module makes available one builtin command:
|
|
|
|
|
|
|
|
|
|
<span id="index-log"></span> <span id="index-watch_002c-use-of"></span>
|
|
|
|
|
<span id="index-watching-users"></span> <span
|
|
|
|
|
id="index-users_002c-watching"></span>
|
|
|
|
|
|
|
|
|
|
log
|
|
|
|
|
|
|
|
|
|
List all users currently logged in who are affected by the current
|
|
|
|
|
setting of the watch parameter.
|
|
|
|
|
|
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
<span id="The-zsh_002fzftp-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fzftp-Module-1"></span>
|
|
|
|
|
|
|
|
|
|
## 22.32 The zsh/zftp Module
|
|
|
|
|
|
|
|
|
|
The zsh/zftp module makes available one builtin command:
|
|
|
|
|
|
|
|
|
|
<span id="index-zftp"></span> <span id="index-FTP"></span> <span
|
|
|
|
|
id="index-files_002c-transferring"></span>
|
|
|
|
|
|
|
|
|
|
zftp `subcommand` \[ `args` \]
|
|
|
|
|
|
|
|
|
|
The zsh/zftp module is a client for FTP (file transfer protocol). It is
|
|
|
|
|
implemented as a builtin to allow full use of shell command line
|
2021-05-11 02:29:21 +02:00
|
|
|
|
editing, file I/O, and job control mechanisms. Often, users will access
|
|
|
|
|
it via shell functions providing a more powerful interface; a set is
|
2022-08-24 15:13:36 +02:00
|
|
|
|
provided with the zsh distribution and is described in [Zftp Function
|
2021-05-11 02:29:21 +02:00
|
|
|
|
System](Zftp-Function-System.html#Zftp-Function-System). However, the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zftp command is entirely usable in its own right.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
All commands consist of the command name zftp followed by the name of a
|
|
|
|
|
subcommand. These are listed below. The return status of each subcommand
|
|
|
|
|
is supposed to reflect the success or failure of the remote operation.
|
|
|
|
|
See a description of the variable ZFTP_VERBOSE for more information on
|
|
|
|
|
how responses from the server may be printed.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Subcommands"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
### 22.32.1 Subcommands
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zftp_002c-subcommands"></span>
|
|
|
|
|
|
|
|
|
|
<span id="index-FTP_002c-starting-a-session"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
open `host`\[:`port`\] \[ `user` \[ `password` \[ `account` \] \] \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Open a new FTP session to `host`, which may be the name of a TCP/IP
|
|
|
|
|
connected host or an IP number in the standard dot notation. If the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
argument is in the form `host`:`port`, open a connection to TCP port
|
2021-05-11 02:29:21 +02:00
|
|
|
|
`port` instead of the standard FTP port 21. This may be the name of a
|
2022-08-24 15:13:36 +02:00
|
|
|
|
TCP service or a number: see the description of ZFTP_PORT below for more
|
|
|
|
|
information.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
If IPv6 addresses in colon format are used, the `host` should be
|
|
|
|
|
surrounded by quoted square brackets to distinguish it from the `port`,
|
2022-08-24 15:13:36 +02:00
|
|
|
|
for example ’\[fe80::203:baff:fe02:8b56\]’. For consistency this is
|
2021-05-11 02:29:21 +02:00
|
|
|
|
allowed with all forms of `host`.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Remaining arguments are passed to the login subcommand. Note that if no
|
|
|
|
|
arguments beyond `host` are supplied, open will *not* automatically call
|
|
|
|
|
login. If no arguments at all are supplied, open will use the parameters
|
|
|
|
|
set by the params subcommand.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
After a successful open, the shell variables ZFTP_HOST, ZFTP_PORT,
|
|
|
|
|
ZFTP_IP and ZFTP_SYSTEM are available; see ‘Variables’ below.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
login \[ `name` \[ `password` \[ `account` \] \] \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
user \[ `name` \[ `password` \[ `account` \] \] \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Login the user `name` with parameters `password` and `account`. Any of
|
|
|
|
|
the parameters can be omitted, and will be read from standard input if
|
|
|
|
|
needed (`name` is always needed). If standard input is a terminal, a
|
|
|
|
|
prompt for each one will be printed on standard error and `password`
|
|
|
|
|
will not be echoed. If any of the parameters are not used, a warning
|
|
|
|
|
message is printed.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
After a successful login, the shell variables ZFTP_USER, ZFTP_ACCOUNT
|
|
|
|
|
and ZFTP_PWD are available; see ‘Variables’ below.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This command may be re-issued when a user is already logged in, and the
|
|
|
|
|
server will first be reinitialized for a new user.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
params \[ `host` \[ `user` \[ `password` \[ `account` \] \] \] \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
params -
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Store the given parameters for a later open command with no arguments.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Only those given on the command line will be remembered. If no arguments
|
|
|
|
|
are given, the parameters currently set are printed, although the
|
|
|
|
|
password will appear as a line of stars; the return status is one if no
|
|
|
|
|
parameters were set, zero otherwise.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Any of the parameters may be specified as a ‘?’, which may need to be
|
2021-05-11 02:29:21 +02:00
|
|
|
|
quoted to protect it from shell expansion. In this case, the appropriate
|
2022-08-24 15:13:36 +02:00
|
|
|
|
parameter will be read from stdin as with the login subcommand,
|
|
|
|
|
including special handling of `password`. If the ‘?’ is followed by a
|
2021-05-11 02:29:21 +02:00
|
|
|
|
string, that is used as the prompt for reading the parameter instead of
|
|
|
|
|
the default message (any necessary punctuation and whitespace should be
|
|
|
|
|
included at the end of the prompt). The first letter of the parameter
|
2022-08-24 15:13:36 +02:00
|
|
|
|
(only) may be quoted with a ‘\\’; hence an argument "\\\\$word"
|
|
|
|
|
guarantees that the string from the shell parameter $word will be
|
|
|
|
|
treated literally, whether or not it begins with a ‘?’.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If instead a single ‘-’ is given, the existing parameters, if any, are
|
|
|
|
|
deleted. In that case, calling open with no arguments will cause an
|
2021-05-11 02:29:21 +02:00
|
|
|
|
error.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The list of parameters is not deleted after a close, however it will be
|
|
|
|
|
deleted if the zsh/zftp module is unloaded.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
For example,
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
zftp params ftp.elsewhere.xx juser '?Password for juser: '
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
will store the host ftp.elsewhere.xx and the user juser and then prompt
|
|
|
|
|
the user for the corresponding password with the given prompt.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
test
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Test the connection; if the server has reported that it has closed the
|
|
|
|
|
connection (maybe due to a timeout), return status 2; if no connection
|
2022-08-24 15:13:36 +02:00
|
|
|
|
was open anyway, return status 1; else return status 0. The test
|
|
|
|
|
subcommand is silent, apart from messages printed by the $ZFTP_VERBOSE
|
2021-05-11 02:29:21 +02:00
|
|
|
|
mechanism, or error messages if the connection closes. There is no
|
|
|
|
|
network overhead for this test.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The test is only supported on systems with either the select(2) or
|
|
|
|
|
poll(2) system calls; otherwise the message ‘not supported on this
|
|
|
|
|
system’ is printed instead.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The test subcommand will automatically be called at the start of any
|
2021-05-11 02:29:21 +02:00
|
|
|
|
other subcommand for the current session when a connection is open.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
cd `directory`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Change the remote directory to `directory`. Also alters the shell
|
2022-08-24 15:13:36 +02:00
|
|
|
|
variable ZFTP_PWD.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
cdup
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Change the remote directory to the one higher in the directory tree.
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Note that cd .. will also work correctly on non-UNIX systems.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
dir \[ `arg` ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Give a (verbose) listing of the remote directory. The `arg`s are passed
|
|
|
|
|
directly to the server. The command’s behaviour is implementation
|
|
|
|
|
dependent, but a UNIX server will typically interpret `arg`s as
|
2022-08-24 15:13:36 +02:00
|
|
|
|
arguments to the ls command and with no arguments return the result of
|
|
|
|
|
‘ls -l’. The directory is listed to standard output.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ls \[ `arg` ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Give a (short) listing of the remote directory. With no `arg`, produces
|
|
|
|
|
a raw list of the files in the directory, one per line. Otherwise, up to
|
2022-08-24 15:13:36 +02:00
|
|
|
|
vagaries of the server implementation, behaves similar to dir.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
type \[ `type` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Change the type for the transfer to `type`, or print the current type if
|
2022-08-24 15:13:36 +02:00
|
|
|
|
`type` is absent. The allowed values are ‘A’ (ASCII), ‘I’ (Image, i.e.
|
|
|
|
|
binary), or ‘B’ (a synonym for ‘I’).
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The FTP default for a transfer is ASCII. However, if zftp finds that the
|
|
|
|
|
remote host is a UNIX machine with 8-bit byes, it will automatically
|
|
|
|
|
switch to using binary for file transfers upon open. This can
|
2021-05-11 02:29:21 +02:00
|
|
|
|
subsequently be overridden.
|
|
|
|
|
|
|
|
|
|
The transfer type is only passed to the remote host when a data
|
|
|
|
|
connection is established; this command involves no network overhead.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ascii
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The same as type A.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
binary
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The same as type I.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
mode \[ S \| B \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Set the mode type to stream (S) or block (B). Stream mode is the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
default; block mode is not widely supported.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
remote `file` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
local \[ `file` ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Print the size and last modification time of the remote or local files.
|
|
|
|
|
If there is more than one item on the list, the name of the file is
|
|
|
|
|
printed first. The first number is the file size, the second is the last
|
2022-08-24 15:13:36 +02:00
|
|
|
|
modification time of the file in the format CCYYMMDDhhmmSS consisting of
|
|
|
|
|
year, month, date, hour, minutes and seconds in GMT. Note that this
|
2021-05-11 02:29:21 +02:00
|
|
|
|
format, including the length, is guaranteed, so that time strings can be
|
2022-08-24 15:13:36 +02:00
|
|
|
|
directly compared via the \[\[ builtin’s \< and \> operators, even if
|
2021-05-11 02:29:21 +02:00
|
|
|
|
they are too long to be represented as integers.
|
|
|
|
|
|
|
|
|
|
Not all servers support the commands for retrieving this information. In
|
2022-08-24 15:13:36 +02:00
|
|
|
|
that case, the remote command will print nothing and return status 2,
|
2021-05-11 02:29:21 +02:00
|
|
|
|
compared with status 1 for a file not found.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The local command (but not remote) may be used with no arguments, in
|
2021-05-11 02:29:21 +02:00
|
|
|
|
which case the information comes from examining file descriptor zero.
|
2022-08-24 15:13:36 +02:00
|
|
|
|
This is the same file as seen by a put command with no further
|
2021-05-11 02:29:21 +02:00
|
|
|
|
redirection.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
get `file` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Retrieve all `file`s from the server, concatenating them and sending
|
|
|
|
|
them to standard output.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
put `file` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
For each `file`, read a file from standard input and send that to the
|
|
|
|
|
remote host with the given name.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
append `file` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
As put, but if the remote `file` already exists, data is appended to it
|
|
|
|
|
instead of overwriting it.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
getat `file` `point`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
putat `file` `point`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
appendat `file` `point`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Versions of get, put and append which will start the transfer at the
|
|
|
|
|
given `point` in the remote `file`. This is useful for appending to an
|
|
|
|
|
incomplete local file. However, note that this ability is not
|
2021-05-11 02:29:21 +02:00
|
|
|
|
universally supported by servers (and is not quite the behaviour
|
|
|
|
|
specified by the standard).
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
delete `file` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Delete the list of files on the server.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
mkdir `directory`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Create a new directory `directory` on the server.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
rmdir `directory`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Delete the directory `directory` on the server.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
rename `old-name` `new-name`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Rename file `old-name` to `new-name` on the server.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
site `arg` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Send a host-specific command to the server. You will probably only need
|
|
|
|
|
this if instructed by the server to use it.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
quote `arg` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Send the raw FTP command sequence to the server. You should be familiar
|
|
|
|
|
with the FTP command set as defined in RFC959 before doing this. Useful
|
2022-08-24 15:13:36 +02:00
|
|
|
|
commands may include STAT and HELP. Note also the mechanism for
|
|
|
|
|
returning messages as described for the variable ZFTP_VERBOSE below, in
|
|
|
|
|
particular that all messages from the control connection are sent to
|
2021-05-11 02:29:21 +02:00
|
|
|
|
standard error.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
close
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
quit
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Close the current data connection. This unsets the shell parameters
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_HOST, ZFTP_PORT, ZFTP_IP, ZFTP_SYSTEM, ZFTP_USER, ZFTP_ACCOUNT,
|
|
|
|
|
ZFTP_PWD, ZFTP_TYPE and ZFTP_MODE.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
session \[ `sessname` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Allows multiple FTP sessions to be used at once. The name of the session
|
|
|
|
|
is an arbitrary string of characters; the default session is called
|
2022-08-24 15:13:36 +02:00
|
|
|
|
‘default’. If this command is called without an argument, it will list
|
|
|
|
|
all the current sessions; with an argument, it will either switch to the
|
|
|
|
|
existing session called `sessname`, or create a new session of that
|
|
|
|
|
name.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Each session remembers the status of the connection, the set of
|
|
|
|
|
connection-specific shell parameters (the same set as are unset when a
|
2022-08-24 15:13:36 +02:00
|
|
|
|
connection closes, as given in the description of close), and any user
|
|
|
|
|
parameters specified with the params subcommand. Changing to a previous
|
|
|
|
|
session restores those values; changing to a new session initialises
|
|
|
|
|
them in the same way as if zftp had just been loaded. The name of the
|
|
|
|
|
current session is given by the parameter ZFTP_SESSION.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
rmsession \[ `sessname` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Delete a session; if a name is not given, the current session is
|
|
|
|
|
deleted. If the current session is deleted, the earliest existing
|
|
|
|
|
session becomes the new current session, otherwise the current session
|
|
|
|
|
is not changed. If the session being deleted is the only one, a new
|
2022-08-24 15:13:36 +02:00
|
|
|
|
session called ‘default’ is created and becomes the current session;
|
2021-05-11 02:29:21 +02:00
|
|
|
|
note that this is a new session even if the session being deleted is
|
2022-08-24 15:13:36 +02:00
|
|
|
|
also called ‘default’. It is recommended that sessions not be deleted
|
|
|
|
|
while background commands which use zftp are still active.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="Parameters-4"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
### 22.32.2 Parameters
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zftp_002c-parameters"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The following shell parameters are used by zftp. Currently none of them
|
|
|
|
|
are special.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fTMOUT"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_TMOUT
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Integer. The time in seconds to wait for a network operation to complete
|
|
|
|
|
before returning an error. If this is not set when the module is loaded,
|
|
|
|
|
it will be given the default value 60. A value of zero turns off
|
|
|
|
|
timeouts. If a timeout occurs on the control connection it will be
|
|
|
|
|
closed. Use a larger value if this occurs too frequently.
|
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fIP"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_IP
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly. The IP address of the current connection in dot notation.
|
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fHOST"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_HOST
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly. The hostname of the current remote server. If the host was
|
2022-08-24 15:13:36 +02:00
|
|
|
|
opened as an IP number, ZFTP_HOST contains that instead; this saves the
|
|
|
|
|
overhead for a name lookup, as IP numbers are most commonly used when a
|
|
|
|
|
nameserver is unavailable.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fPORT"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_PORT
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly. The number of the remote TCP port to which the connection is
|
|
|
|
|
open (even if the port was originally specified as a named service).
|
|
|
|
|
Usually this is the standard FTP port, 21.
|
|
|
|
|
|
|
|
|
|
In the unlikely event that your system does not have the appropriate
|
|
|
|
|
conversion functions, this appears in network byte order. If your system
|
|
|
|
|
is little-endian, the port then consists of two swapped bytes and the
|
|
|
|
|
standard port will be reported as 5376. In that case, numeric ports
|
2022-08-24 15:13:36 +02:00
|
|
|
|
passed to zftp open will also need to be in this format.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fSYSTEM"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_SYSTEM
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly. The system type string returned by the server in response to
|
2022-08-24 15:13:36 +02:00
|
|
|
|
an FTP SYST request. The most interesting case is a string beginning
|
|
|
|
|
"UNIX Type: L8", which ensures maximum compatibility with a local UNIX
|
2021-05-11 02:29:21 +02:00
|
|
|
|
host.
|
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fTYPE"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_TYPE
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Readonly. The type to be used for data transfers , either ‘A’ or ‘I’.
|
|
|
|
|
Use the type subcommand to change this.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fUSER"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_USER
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly. The username currently logged in, if any.
|
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fACCOUNT"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_ACCOUNT
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly. The account name of the current user, if any. Most servers do
|
|
|
|
|
not require an account name.
|
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fPWD"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_PWD
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly. The current directory on the server.
|
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fCODE"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_CODE
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly. The three digit code of the last FTP reply from the server as
|
|
|
|
|
a string. This can still be read after the connection is closed, and is
|
|
|
|
|
not changed when the current session changes.
|
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fREPLY"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_REPLY
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly. The last line of the last reply sent by the server. This can
|
|
|
|
|
still be read after the connection is closed, and is not changed when
|
|
|
|
|
the current session changes.
|
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fSESSION"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_SESSION
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Readonly. The name of the current FTP session; see the description of
|
2022-08-24 15:13:36 +02:00
|
|
|
|
the session subcommand.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fPREFS"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_PREFS
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
A string of preferences for altering aspects of zftp’s behaviour. Each
|
2021-05-11 02:29:21 +02:00
|
|
|
|
preference is a single character. The following are defined:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
P
|
|
|
|
|
Passive: attempt to make the remote server initiate data transfers. This
|
|
|
|
|
is slightly more efficient than sendport mode. If the letter S occurs
|
|
|
|
|
later in the string, zftp will use sendport mode if passive mode is not
|
|
|
|
|
available.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
S
|
|
|
|
|
Sendport: initiate transfers by the FTP PORT command. If this occurs
|
|
|
|
|
before any P in the string, passive mode will never be attempted.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
D
|
|
|
|
|
Dumb: use only the bare minimum of FTP commands. This prevents the
|
|
|
|
|
variables ZFTP_SYSTEM and ZFTP_PWD from being set, and will mean all
|
|
|
|
|
connections default to ASCII type. It may prevent ZFTP_SIZE from being
|
|
|
|
|
set during a transfer if the server does not send it anyway (many
|
|
|
|
|
servers do).
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If ZFTP_PREFS is not set when zftp is loaded, it will be set to a
|
|
|
|
|
default of ‘PS’, i.e. use passive mode if available, otherwise fall back
|
|
|
|
|
to sendport mode.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fVERBOSE"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_VERBOSE
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
A string of digits between 0 and 5 inclusive, specifying which responses
|
|
|
|
|
from the server should be printed. All responses go to standard error.
|
|
|
|
|
If any of the numbers 1 to 5 appear in the string, raw responses from
|
|
|
|
|
the server with reply codes beginning with that digit will be printed to
|
|
|
|
|
standard error. The first digit of the three digit reply code is defined
|
|
|
|
|
by RFC959 to correspond to:
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
1\.
|
|
|
|
|
A positive preliminary reply.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
2\.
|
|
|
|
|
A positive completion reply.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
3\.
|
|
|
|
|
A positive intermediate reply.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
4\.
|
|
|
|
|
A transient negative completion reply.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
5\.
|
|
|
|
|
A permanent negative completion reply.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
It should be noted that, for unknown reasons, the reply ‘Service not
|
|
|
|
|
available’, which forces termination of a connection, is classified as
|
|
|
|
|
421, i.e. ‘transient negative’, an interesting interpretation of the
|
|
|
|
|
word ‘transient’.
|
|
|
|
|
|
|
|
|
|
The code 0 is special: it indicates that all but the last line of
|
|
|
|
|
multiline replies read from the server will be printed to standard error
|
|
|
|
|
in a processed format. By convention, servers use this mechanism for
|
|
|
|
|
sending information for the user to read. The appropriate reply code, if
|
|
|
|
|
it matches the same response, takes priority.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If ZFTP_VERBOSE is not set when zftp is loaded, it will be set to the
|
|
|
|
|
default value 450, i.e., messages destined for the user and all errors
|
|
|
|
|
will be printed. A null string is valid and specifies that no messages
|
|
|
|
|
should be printed.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Functions-1"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
### 22.32.3 Functions
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zftp_002c-functions"></span>
|
|
|
|
|
|
|
|
|
|
<span id="index-zftp_005fchpwd_002c-specification"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zftp_chpwd
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
If this function is set by the user, it is called every time the
|
|
|
|
|
directory changes on the server, including when a user is logged in, or
|
2022-08-24 15:13:36 +02:00
|
|
|
|
when a connection is closed. In the last case, $ZFTP_PWD will be unset;
|
|
|
|
|
otherwise it will reflect the new directory.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zftp_005fprogress_002c-specification"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zftp_progress
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If this function is set by the user, it will be called during a get, put
|
|
|
|
|
or append operation each time sufficient data has been received from the
|
|
|
|
|
host. During a get, the data is sent to standard output, so it is vital
|
|
|
|
|
that this function should write to standard error or directly to the
|
|
|
|
|
terminal, *not* to standard output.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
When it is called with a transfer in progress, the following additional
|
|
|
|
|
shell parameters are set:
|
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fFILE"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_FILE
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The name of the remote file being transferred from or to.
|
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fTRANSFER"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_TRANSFER
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
A G for a get operation and a P for a put operation.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fSIZE"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_SIZE
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The total size of the complete file being transferred: the same as the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
first value provided by the remote and local subcommands for a
|
2021-05-11 02:29:21 +02:00
|
|
|
|
particular file. If the server cannot supply this value for a remote
|
|
|
|
|
file being retrieved, it will not be set. If input is from a pipe the
|
|
|
|
|
value may be incorrect and correspond simply to a full pipe buffer.
|
|
|
|
|
|
|
|
|
|
<span id="index-ZFTP_005fCOUNT"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
ZFTP_COUNT
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The amount of data so far transferred; a number between zero and
|
2022-08-24 15:13:36 +02:00
|
|
|
|
$ZFTP_SIZE, if that is set. This number is always available.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The function is initially called with ZFTP_TRANSFER set appropriately
|
|
|
|
|
and ZFTP_COUNT set to zero. After the transfer is finished, the function
|
|
|
|
|
will be called one more time with ZFTP_TRANSFER set to GF or PF, in case
|
|
|
|
|
it wishes to tidy up. It is otherwise never called twice with the same
|
|
|
|
|
value of ZFTP_COUNT.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Sometimes the progress meter may cause disruption. It is up to the user
|
2022-08-24 15:13:36 +02:00
|
|
|
|
to decide whether the function should be defined and to use unfunction
|
2021-05-11 02:29:21 +02:00
|
|
|
|
when necessary.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="Problems"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
### 22.32.4 Problems
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zftp_002c-problems"></span>
|
|
|
|
|
|
|
|
|
|
A connection may not be opened in the left hand side of a pipe as this
|
|
|
|
|
occurs in a subshell and the file information is not updated in the main
|
|
|
|
|
shell. In the case of type or mode changes or closing the connection in
|
|
|
|
|
a subshell, the information is returned but variables are not updated
|
2022-08-24 15:13:36 +02:00
|
|
|
|
until the next call to zftp. Other status changes in subshells will not
|
|
|
|
|
be reflected by changes to the variables (but should be otherwise
|
2021-05-11 02:29:21 +02:00
|
|
|
|
harmless).
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Deleting sessions while a zftp command is active in the background can
|
2021-05-11 02:29:21 +02:00
|
|
|
|
have unexpected effects, even if it does not use the session being
|
|
|
|
|
deleted. This is because all shell subprocesses share information on the
|
|
|
|
|
state of all connections, and deleting a session changes the ordering of
|
|
|
|
|
that information.
|
|
|
|
|
|
|
|
|
|
On some operating systems, the control connection is not valid after a
|
|
|
|
|
fork(), so that operations in subshells, on the left hand side of a
|
|
|
|
|
pipeline, or in the background are not possible, as they should be. This
|
|
|
|
|
is presumably a bug in the operating system.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fzle-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fzle-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
## 22.33 The zsh/zle Module
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/zle module contains the Zsh Line Editor. See [Zsh Line
|
2021-05-11 02:29:21 +02:00
|
|
|
|
Editor](Zsh-Line-Editor.html#Zsh-Line-Editor).
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fzleparameter-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fzleparameter-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
## 22.34 The zsh/zleparameter Module
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-parameters_002c-special-2"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/zleparameter module defines two special parameters that can be
|
2021-05-11 02:29:21 +02:00
|
|
|
|
used to access internal information of the Zsh Line Editor (see [Zsh
|
|
|
|
|
Line Editor](Zsh-Line-Editor.html#Zsh-Line-Editor)).
|
|
|
|
|
|
|
|
|
|
<span id="index-keymaps-2"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
keymaps
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This array contains the names of the keymaps currently defined.
|
|
|
|
|
|
|
|
|
|
<span id="index-widgets-1"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
widgets
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This associative array contains one entry per widget. The name of the
|
|
|
|
|
widget is the key and the value gives information about the widget. It
|
2022-08-24 15:13:36 +02:00
|
|
|
|
is either the string ‘builtin’ for builtin widgets, a string of the form
|
|
|
|
|
‘user:`name`’ for user-defined widgets, where `name` is the name of the
|
|
|
|
|
shell function implementing the widget, a string of the form
|
|
|
|
|
‘completion:`type`:`name`’ for completion widgets, or a null value if
|
|
|
|
|
the widget is not yet fully defined. In the penultimate case, `type` is
|
|
|
|
|
the name of the builtin widget the completion widget imitates in its
|
2021-05-11 02:29:21 +02:00
|
|
|
|
behavior and `name` is the name of the shell function implementing the
|
|
|
|
|
completion widget.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fzprof-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fzprof-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
## 22.35 The zsh/zprof Module
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-functions_002c-profiling"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
When loaded, the zsh/zprof causes shell functions to be profiled. The
|
|
|
|
|
profiling results can be obtained with the zprof builtin command made
|
2021-05-11 02:29:21 +02:00
|
|
|
|
available by this module. There is no way to turn profiling off other
|
|
|
|
|
than unloading the module.
|
|
|
|
|
|
|
|
|
|
<span id="index-zprof"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zprof \[ -c \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Without the -c option, zprof lists profiling results to standard output.
|
|
|
|
|
The format is comparable to that of commands like gprof.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
At the top there is a summary listing all functions that were called at
|
|
|
|
|
least once. This summary is sorted in decreasing order of the amount of
|
|
|
|
|
time spent in each. The lines contain the number of the function in
|
|
|
|
|
order, which is used in other parts of the list in suffixes of the form
|
2022-08-24 15:13:36 +02:00
|
|
|
|
‘\[`num`\]’, then the number of calls made to the function. The next
|
2021-05-11 02:29:21 +02:00
|
|
|
|
three columns list the time in milliseconds spent in the function and
|
|
|
|
|
its descendants, the average time in milliseconds spent in the function
|
|
|
|
|
and its descendants per call and the percentage of time spent in all
|
|
|
|
|
shell functions used in this function and its descendants. The following
|
|
|
|
|
three columns give the same information, but counting only the time
|
|
|
|
|
spent in the function itself. The final column shows the name of the
|
|
|
|
|
function.
|
|
|
|
|
|
|
|
|
|
After the summary, detailed information about every function that was
|
|
|
|
|
invoked is listed, sorted in decreasing order of the amount of time
|
|
|
|
|
spent in each function and its descendants. Each of these entries
|
|
|
|
|
consists of descriptions for the functions that called the function
|
|
|
|
|
described, the function itself, and the functions that were called from
|
|
|
|
|
it. The description for the function itself has the same format as in
|
|
|
|
|
the summary (and shows the same information). The other lines don’t show
|
|
|
|
|
the number of the function at the beginning and have their function
|
|
|
|
|
named indented to make it easier to distinguish the line showing the
|
|
|
|
|
function described in the section from the surrounding lines.
|
|
|
|
|
|
|
|
|
|
The information shown in this case is almost the same as in the summary,
|
|
|
|
|
but only refers to the call hierarchy being displayed. For example, for
|
|
|
|
|
a calling function the column showing the total running time lists the
|
|
|
|
|
time spent in the described function and its descendants only for the
|
|
|
|
|
times when it was called from that particular calling function.
|
|
|
|
|
Likewise, for a called function, this columns lists the total time spent
|
|
|
|
|
in the called function and its descendants only for the times when it
|
|
|
|
|
was called from the function described.
|
|
|
|
|
|
|
|
|
|
Also in this case, the column showing the number of calls to a function
|
|
|
|
|
also shows a slash and then the total number of invocations made to the
|
|
|
|
|
called function.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
As long as the zsh/zprof module is loaded, profiling will be done and
|
|
|
|
|
multiple invocations of the zprof builtin command will show the times
|
|
|
|
|
and numbers of calls since the module was loaded. With the -c option,
|
|
|
|
|
the zprof builtin command will reset its internal counters and will not
|
|
|
|
|
show the listing.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fzpty-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fzpty-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
## 22.36 The zsh/zpty Module
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/zpty module offers one builtin:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zpty"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zpty \[ -e \] \[ -b \] `name` \[ `arg` ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The arguments following `name` are concatenated with spaces between,
|
2022-08-24 15:13:36 +02:00
|
|
|
|
then executed as a command, as if passed to the eval builtin. The
|
2021-05-11 02:29:21 +02:00
|
|
|
|
command runs under a newly assigned pseudo-terminal; this is useful for
|
|
|
|
|
running commands non-interactively which expect an interactive
|
|
|
|
|
environment. The `name` is not part of the command, but is used to refer
|
2022-08-24 15:13:36 +02:00
|
|
|
|
to this command in later calls to zpty.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
With the -e option, the pseudo-terminal is set up so that input
|
2021-05-11 02:29:21 +02:00
|
|
|
|
characters are echoed.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
With the -b option, input to and output from the pseudo-terminal are
|
2021-05-11 02:29:21 +02:00
|
|
|
|
made non-blocking.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The shell parameter REPLY is set to the file descriptor assigned to the
|
|
|
|
|
master side of the pseudo-terminal. This allows the terminal to be
|
2021-05-11 02:29:21 +02:00
|
|
|
|
monitored with ZLE descriptor handlers (see [Zle
|
|
|
|
|
Builtins](Zsh-Line-Editor.html#Zle-Builtins)) or manipulated with
|
2022-08-24 15:13:36 +02:00
|
|
|
|
sysread and syswrite (see [The zsh/system
|
|
|
|
|
Module](#The-zsh_002fsystem-Module)). *Warning*: Use of sysread and
|
|
|
|
|
syswrite is *not* recommended; use zpty -r and zpty -w unless you know
|
|
|
|
|
exactly what you are doing.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zpty -d \[ `name` ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The second form, with the -d option, is used to delete commands
|
2021-05-11 02:29:21 +02:00
|
|
|
|
previously started, by supplying a list of their `name`s. If no `name`
|
|
|
|
|
is given, all commands are deleted. Deleting a command causes the HUP
|
|
|
|
|
signal to be sent to the corresponding process.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zpty -w \[ -n \] `name` \[ `string` ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -w option can be used to send the to command `name` the given
|
|
|
|
|
`string`s as input (separated by spaces). If the -n option is *not*
|
2021-05-11 02:29:21 +02:00
|
|
|
|
given, a newline is added at the end.
|
|
|
|
|
|
|
|
|
|
If no `string` is provided, the standard input is copied to the
|
|
|
|
|
pseudo-terminal; this may stop before copying the full input if the
|
|
|
|
|
pseudo-terminal is non-blocking. The exact input is always copied: the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
-n option is not applied.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Note that the command under the pseudo-terminal sees this input as if it
|
|
|
|
|
were typed, so beware when sending special tty driver characters such as
|
|
|
|
|
word-erase, line-kill, and end-of-file.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zpty -r \[ -mt \] `name` \[ `param` \[ `pattern` \] \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -r option can be used to read the output of the command `name`. With
|
|
|
|
|
only a `name` argument, the output read is copied to the standard
|
2021-05-11 02:29:21 +02:00
|
|
|
|
output. Unless the pseudo-terminal is non-blocking, copying continues
|
|
|
|
|
until the command under the pseudo-terminal exits; when non-blocking,
|
|
|
|
|
only as much output as is immediately available is copied. The return
|
|
|
|
|
status is zero if any output is copied.
|
|
|
|
|
|
|
|
|
|
When also given a `param` argument, at most one line is read and stored
|
|
|
|
|
in the parameter named `param`. Less than a full line may be read if the
|
|
|
|
|
pseudo-terminal is non-blocking. The return status is zero if at least
|
|
|
|
|
one character is stored in `param`.
|
|
|
|
|
|
|
|
|
|
If a `pattern` is given as well, output is read until the whole string
|
|
|
|
|
read matches the `pattern`, even in the non-blocking case. The return
|
|
|
|
|
status is zero if the string read matches the pattern, or if the command
|
|
|
|
|
has exited but at least one character could still be read. If the option
|
2022-08-24 15:13:36 +02:00
|
|
|
|
-m is present, the return status is zero only if the pattern matches. As
|
|
|
|
|
of this writing, a maximum of one megabyte of output can be consumed
|
2021-05-11 02:29:21 +02:00
|
|
|
|
this way; if a full megabyte is read without matching the pattern, the
|
|
|
|
|
return status is non-zero.
|
|
|
|
|
|
|
|
|
|
In all cases, the return status is non-zero if nothing could be read,
|
2022-08-24 15:13:36 +02:00
|
|
|
|
and is 2 if this is because the command has finished.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
If the -r option is combined with the -t option, zpty tests whether
|
|
|
|
|
output is available before trying to read. If no output is available,
|
|
|
|
|
zpty immediately returns the status 1. When used with a `pattern`, the
|
|
|
|
|
behaviour on a failed poll is similar to when the command has exited:
|
|
|
|
|
the return value is zero if at least one character could still be read
|
|
|
|
|
even if the pattern failed to match.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zpty -t `name`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -t option without the -r option can be used to test whether the
|
2021-05-11 02:29:21 +02:00
|
|
|
|
command `name` is still running. It returns a zero status if the command
|
|
|
|
|
is running and a non-zero value otherwise.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zpty \[ -L \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The last form, without any arguments, is used to list the commands
|
2022-08-24 15:13:36 +02:00
|
|
|
|
currently defined. If the -L option is given, this is done in the form
|
|
|
|
|
of calls to the zpty builtin.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fzselect-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fzselect-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
## 22.37 The zsh/zselect Module
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/zselect module makes available one builtin command:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="index-zselect"></span> <span
|
|
|
|
|
id="index-select_002c-system-call"></span> <span
|
|
|
|
|
id="index-file-descriptors_002c-waiting-for"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zselect \[ -rwe \] \[ -t `timeout` \] \[ -a `array` \] \[ -A `assoc` \]
|
|
|
|
|
\[ `fd` ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zselect builtin is a front-end to the ‘select’ system call, which
|
2021-05-11 02:29:21 +02:00
|
|
|
|
blocks until a file descriptor is ready for reading or writing, or has
|
|
|
|
|
an error condition, with an optional timeout. If this is not available
|
|
|
|
|
on your system, the command prints an error message and returns status 2
|
2022-08-24 15:13:36 +02:00
|
|
|
|
(normal errors return status 1). For more information, see your system’s
|
|
|
|
|
documentation for select(3). Note there is no connection with the shell
|
|
|
|
|
builtin of the same name.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
Arguments and options may be intermingled in any order. Non-option
|
|
|
|
|
arguments are file descriptors, which must be decimal integers. By
|
2022-08-24 15:13:36 +02:00
|
|
|
|
default, file descriptors are to be tested for reading, i.e. zselect
|
2021-05-11 02:29:21 +02:00
|
|
|
|
will return when data is available to be read from the file descriptor,
|
|
|
|
|
or more precisely, when a read operation from the file descriptor will
|
2022-08-24 15:13:36 +02:00
|
|
|
|
not block. After a -r, -w and -e, the given file descriptors are to be
|
|
|
|
|
tested for reading, writing, or error conditions. These options and an
|
|
|
|
|
arbitrary list of file descriptors may be given in any order.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
(The presence of an ‘error condition’ is not well defined in the
|
|
|
|
|
documentation for many implementations of the select system call.
|
|
|
|
|
According to recent versions of the POSIX specification, it is really an
|
|
|
|
|
*exception* condition, of which the only standard example is out-of-band
|
2022-08-24 15:13:36 +02:00
|
|
|
|
data received on a socket. So zsh users are unlikely to find the -e
|
2021-05-11 02:29:21 +02:00
|
|
|
|
option useful.)
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The option ‘-t `timeout`’ specifies a timeout in hundredths of a second.
|
|
|
|
|
This may be zero, in which case the file descriptors will simply be
|
|
|
|
|
polled and zselect will return immediately. It is possible to call
|
2021-05-11 02:29:21 +02:00
|
|
|
|
zselect with no file descriptors and a non-zero timeout for use as a
|
|
|
|
|
finer-grained replacement for ‘sleep’; note, however, the return status
|
|
|
|
|
is always 1 for a timeout.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The option ‘-a `array`’ indicates that `array` should be set to indicate
|
|
|
|
|
the file descriptor(s) which are ready. If the option is not given, the
|
|
|
|
|
array reply will be used for this purpose. The array will contain a
|
|
|
|
|
string similar to the arguments for zselect. For example,
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
zselect -t 0 -r 0 -w 1
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
might return immediately with status 0 and $reply containing ‘-r 0 -w 1’
|
|
|
|
|
to show that both file descriptors are ready for the requested
|
2021-05-11 02:29:21 +02:00
|
|
|
|
operations.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The option ‘-A `assoc`’ indicates that the associative array `assoc`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
should be set to indicate the file descriptor(s) which are ready. This
|
2022-08-24 15:13:36 +02:00
|
|
|
|
option overrides the option -a, nor will reply be modified. The keys of
|
|
|
|
|
assoc are the file descriptors, and the corresponding values are any of
|
|
|
|
|
the characters ‘rwe’ to indicate the condition.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The command returns status 0 if some file descriptors are ready for
|
|
|
|
|
reading. If the operation timed out, or a timeout of 0 was given and no
|
|
|
|
|
file descriptors were ready, or there was an error, it returns status 1
|
|
|
|
|
and the array will not be set (nor modified in any way). If there was an
|
|
|
|
|
error in the select operation the appropriate error message is printed.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
<span id="The-zsh_002fzutil-Module"></span> <span
|
|
|
|
|
id="The-zsh_002fzutil-Module-1"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
## 22.38 The zsh/zutil Module
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-builtins_002c-utility"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The zsh/zutil module only adds some builtins:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zstyle"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zstyle \[ -L \[ `metapattern` \[ `style` \] \] \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zstyle \[ -e \| - \| -- \] `pattern` `style` `string` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zstyle -d \[ `pattern` \[ `style` ... \] \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zstyle -g `name` \[ `pattern` \[ `style` \] \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zstyle -{a\|b\|s} `context` `style` `name` \[ `sep` \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zstyle -{T\|t} `context` `style` \[ `string` ... \]
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zstyle -m `context` `style` `pattern`
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This builtin command is used to define and lookup styles. Styles are
|
|
|
|
|
pairs of names and values, where the values consist of any number of
|
|
|
|
|
strings. They are stored together with patterns and lookup is done by
|
|
|
|
|
giving a string, called the ‘*context*’, which is matched against the
|
|
|
|
|
patterns. The definition stored for the most specific pattern that
|
|
|
|
|
matches will be returned.
|
|
|
|
|
|
|
|
|
|
A pattern is considered to be more specific than another if it contains
|
|
|
|
|
more components (substrings separated by colons) or if the patterns for
|
|
|
|
|
the components are more specific, where simple strings are considered to
|
|
|
|
|
be more specific than patterns and complex patterns are considered to be
|
2022-08-24 15:13:36 +02:00
|
|
|
|
more specific than the pattern ‘\*’. A ‘\*’ in the pattern will match
|
2021-05-11 02:29:21 +02:00
|
|
|
|
zero or more characters in the context; colons are not treated specially
|
|
|
|
|
in this regard. If two patterns are equally specific, the tie is broken
|
|
|
|
|
in favour of the pattern that was defined first.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
*Example* <span
|
|
|
|
|
id="index-preferred_002dprecipitation_002c-example-style"></span> <span
|
|
|
|
|
id="index-weather_002c-example-function"></span>
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
For example, a fictional ‘weather’ plugin might state in its
|
|
|
|
|
documentation that it looks up the preferred-precipitation style under
|
|
|
|
|
the ‘:weather:`continent`:`day-of-the-week`:`phase-of-the-moon`’
|
|
|
|
|
context. According to this, you might set the following in your zshrc:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
zstyle ':weather:europe:*' preferred-precipitation rain
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zstyle ':weather:*:Sunday:*' preferred-precipitation snow
|
2021-05-11 02:29:21 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Then the plugin would run under the hood a command such as
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
|
|
|
|
zstyle -s ":weather:${continent}:${day_of_week}:${moon_phase}" preferred-precipitation REPLY
|
2021-05-11 02:29:21 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
in order to retrieve your preference into the scalar variable $REPLY. On
|
|
|
|
|
Sundays $REPLY would be set to ‘snow’; in Europe it would be set to
|
|
|
|
|
‘rain’; and on Sundays in Europe it would be set to ‘snow’ again,
|
|
|
|
|
because the patterns ‘:weather:europe:\*’ and ‘:weather:\*:Sunday:\*’
|
|
|
|
|
both match the `context` argument to zstyle -s, are equally specific,
|
|
|
|
|
and the latter is more specific (because it has more colon-separated
|
|
|
|
|
components).
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
*Usage*
|
|
|
|
|
|
|
|
|
|
The forms that operate on patterns are the following.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zstyle \[ -L \[ `metapattern` \[ `style` \] \] \]
|
|
|
|
|
Without arguments, lists style definitions. Styles are shown in
|
|
|
|
|
alphabetic order and patterns are shown in the order zstyle will test
|
|
|
|
|
them.
|
|
|
|
|
|
|
|
|
|
If the -L option is given, listing is done in the form of calls to
|
|
|
|
|
zstyle. The optional first argument, `metapattern`, is a pattern which
|
|
|
|
|
will be matched against the string supplied as `pattern` when the style
|
|
|
|
|
was defined. Note: this means, for example, ‘zstyle -L ":completion:\*"’
|
|
|
|
|
will match any supplied pattern beginning ‘:completion:’, not just
|
|
|
|
|
":completion:\*": use ’:completion:\\\*’ to match that. The optional
|
|
|
|
|
second argument limits the output to a specific `style` (not a pattern).
|
|
|
|
|
-L is not compatible with any other options.
|
|
|
|
|
|
|
|
|
|
zstyle \[ - \| -- \| -e \] `pattern` `style` `string` ...
|
|
|
|
|
<span id="index-reply_002c-use-of-4"></span>
|
|
|
|
|
|
|
|
|
|
Defines the given `style` for the `pattern` with the `string`s as the
|
|
|
|
|
value. If the -e option is given, the `string`s will be concatenated
|
|
|
|
|
(separated by spaces) and the resulting string will be evaluated (in the
|
|
|
|
|
same way as it is done by the eval builtin command) when the style is
|
|
|
|
|
looked up. In this case the parameter ‘reply’ must be assigned to set
|
|
|
|
|
the strings returned after the evaluation. Before evaluating the value,
|
|
|
|
|
reply is unset, and if it is still unset after the evaluation, the style
|
|
|
|
|
is treated as if it were not set.
|
|
|
|
|
|
|
|
|
|
zstyle -d \[ `pattern` \[ `style` ... \] \]
|
|
|
|
|
Delete style definitions. Without arguments all definitions are deleted,
|
|
|
|
|
with a `pattern` all definitions for that pattern are deleted and if any
|
|
|
|
|
`style`s are given, then only those styles are deleted for the
|
|
|
|
|
`pattern`.
|
|
|
|
|
|
|
|
|
|
zstyle -g `name` \[ `pattern` \[ `style` \] \]
|
|
|
|
|
Retrieve a style definition. The `name` is used as the name of an array
|
|
|
|
|
in which the results are stored. Without any further arguments, all
|
|
|
|
|
patterns defined are returned. With a `pattern` the styles defined for
|
|
|
|
|
that pattern are returned and with both a `pattern` and a `style`, the
|
|
|
|
|
value strings of that combination is returned.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The other forms can be used to look up or test styles for a given
|
|
|
|
|
context.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zstyle -s `context` `style` `name` \[ `sep` \]
|
|
|
|
|
The parameter `name` is set to the value of the style interpreted as a
|
|
|
|
|
string. If the value contains several strings they are concatenated with
|
|
|
|
|
spaces (or with the `sep` string if that is given) between them.
|
|
|
|
|
|
|
|
|
|
Return 0 if the style is set, 1 otherwise.
|
|
|
|
|
|
|
|
|
|
zstyle -b `context` `style` `name`
|
|
|
|
|
The value is stored in `name` as a boolean, i.e. as the string ‘yes’ if
|
|
|
|
|
the value has only one string and that string is equal to one of ‘yes’,
|
|
|
|
|
‘true’, ‘on’, or ‘1’. If the value is any other string or has more than
|
|
|
|
|
one string, the parameter is set to ‘no’.
|
|
|
|
|
|
|
|
|
|
Return 0 if `name` is set to ‘yes’, 1 otherwise.
|
|
|
|
|
|
|
|
|
|
zstyle -a `context` `style` `name`
|
|
|
|
|
The value is stored in `name` as an array. If `name` is declared as an
|
|
|
|
|
associative array, the first, third, etc. strings are used as the keys
|
|
|
|
|
and the other strings are used as the values.
|
|
|
|
|
|
|
|
|
|
Return 0 if the style is set, 1 otherwise.
|
|
|
|
|
|
|
|
|
|
zstyle -t `context` `style` \[ `string` ... \]
|
|
|
|
|
zstyle -T `context` `style` \[ `string` ... \]
|
|
|
|
|
Test the value of a style, i.e. the -t option only returns a status
|
|
|
|
|
(sets $?). Without any `string` the return status is zero if the style
|
|
|
|
|
is defined for at least one matching pattern, has only one string in its
|
|
|
|
|
value, and that is equal to one of ‘true’, ‘yes’, ‘on’ or ‘1’. If any
|
|
|
|
|
`string`s are given the status is zero if and only if at least one of
|
|
|
|
|
the `string`s is equal to at least one of the strings in the value. If
|
|
|
|
|
the style is defined but doesn’t match, the return status is 1. If the
|
|
|
|
|
style is not defined, the status is 2.
|
|
|
|
|
|
|
|
|
|
The -T option tests the values of the style like -t, but it returns
|
|
|
|
|
status zero (rather than 2) if the style is not defined for any matching
|
|
|
|
|
pattern.
|
|
|
|
|
|
|
|
|
|
zstyle -m `context` `style` `pattern`
|
|
|
|
|
Match a value. Returns status zero if the `pattern` matches at least one
|
|
|
|
|
of the strings in the value.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zformat"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zformat -f `param` `format` `spec` ...
|
|
|
|
|
|
|
|
|
|
zformat -F `param` `format` `spec` ...
|
|
|
|
|
|
|
|
|
|
zformat -a `array` `sep` `spec` ...
|
|
|
|
|
|
|
|
|
|
This builtin provides different forms of formatting. The first form is
|
|
|
|
|
selected with the -f option. In this case the `format` string will be
|
|
|
|
|
modified by replacing sequences starting with a percent sign in it with
|
|
|
|
|
strings from the `spec`s. Each `spec` should be of the form
|
|
|
|
|
‘`char`:`string`’ which will cause every appearance of the sequence
|
|
|
|
|
‘%`char`’ in `format` to be replaced by the `string`. The ‘%’ sequence
|
|
|
|
|
may also contain optional minimum and maximum field width specifications
|
|
|
|
|
between the ‘%’ and the ‘`char`’ in the form ‘%`min`.`max`c’, i.e. the
|
|
|
|
|
minimum field width is given first and if the maximum field width is
|
|
|
|
|
used, it has to be preceded by a dot. Specifying a minimum field width
|
|
|
|
|
makes the result be padded with spaces to the right if the `string` is
|
|
|
|
|
shorter than the requested width. Padding to the left can be achieved by
|
|
|
|
|
giving a negative minimum field width. If a maximum field width is
|
|
|
|
|
specified, the `string` will be truncated after that many characters.
|
|
|
|
|
After all ‘%’ sequences for the given `spec`s have been processed, the
|
|
|
|
|
resulting string is stored in the parameter `param`.
|
|
|
|
|
|
|
|
|
|
The %-escapes also understand ternary expressions in the form used by
|
|
|
|
|
prompts. The % is followed by a ‘(’ and then an ordinary format
|
2021-05-11 02:29:21 +02:00
|
|
|
|
specifier character as described above. There may be a set of digits
|
2022-08-24 15:13:36 +02:00
|
|
|
|
either before or after the ‘(’; these specify a test number, which
|
2021-05-11 02:29:21 +02:00
|
|
|
|
defaults to zero. Negative numbers are also allowed. An arbitrary
|
|
|
|
|
delimiter character follows the format specifier, which is followed by a
|
|
|
|
|
piece of ‘true’ text, the delimiter character again, a piece of ‘false’
|
|
|
|
|
text, and a closing parenthesis. The complete expression (without the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
digits) thus looks like ‘%(`X`.`text1`.`text2`)’, except that the ‘.’
|
|
|
|
|
character is arbitrary. The value given for the format specifier in the
|
|
|
|
|
`char`:`string` expressions is evaluated as a mathematical expression,
|
|
|
|
|
and compared with the test number. If they are the same, `text1` is
|
|
|
|
|
output, else `text2` is output. A parenthesis may be escaped in `text2`
|
|
|
|
|
as %). Either of `text1` or `text2` may contain nested %-escapes.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
For example:
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
zformat -f REPLY "The answer is '%3(c.yes.no)'." c:3
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
outputs "The answer is ’yes’." to REPLY since the value for the format
|
|
|
|
|
specifier c is 3, agreeing with the digit argument to the ternary
|
2021-05-11 02:29:21 +02:00
|
|
|
|
expression.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
With -F instead of -f, ternary expressions choose between the ‘true’ or
|
|
|
|
|
‘false’ text on the basis of whether the format specifier is present and
|
|
|
|
|
non-empty. A test number indicates a minimum width for the value given
|
|
|
|
|
in the format specifier. Negative numbers reverse this, so the test is
|
|
|
|
|
for whether the value exceeds a maximum width.
|
|
|
|
|
|
|
|
|
|
The form, using the -a option, can be used for aligning strings. Here,
|
|
|
|
|
the `spec`s are of the form ‘`left`:`right`’ where ‘`left`’ and
|
|
|
|
|
‘`right`’ are arbitrary strings. These strings are modified by replacing
|
|
|
|
|
the colons by the `sep` string and padding the `left` strings with
|
|
|
|
|
spaces to the right so that the `sep` strings in the result (and hence
|
|
|
|
|
the `right` strings after them) are all aligned if the strings are
|
|
|
|
|
printed below each other. All strings without a colon are left unchanged
|
|
|
|
|
and all strings with an empty `right` string have the trailing colon
|
|
|
|
|
removed. In both cases the lengths of the strings are not used to
|
|
|
|
|
determine how the other strings are to be aligned. A colon in the `left`
|
|
|
|
|
string can be escaped with a backslash. The resulting strings are stored
|
|
|
|
|
in the `array`.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zregexparse"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zregexparse
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
This implements some internals of the \_regex_arguments function.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<span id="index-zparseopts"></span>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
zparseopts \[ -D -E -F -K -M \] \[ -a `array` \] \[ -A `assoc` \] \[ -
|
|
|
|
|
\] `spec` ...
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
This builtin simplifies the parsing of options in positional parameters,
|
2022-08-24 15:13:36 +02:00
|
|
|
|
i.e. the set of arguments given by $\*. Each `spec` describes one option
|
|
|
|
|
and must be of the form ‘`opt`\[=`array`\]’. If an option described by
|
|
|
|
|
`opt` is found in the positional parameters it is copied into the
|
|
|
|
|
`array` specified with the -a option; if the optional ‘=`array`’ is
|
|
|
|
|
given, it is instead copied into that array, which should be declared as
|
|
|
|
|
a normal array and never as an associative array.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Note that it is an error to give any `spec` without an ‘=`array`’ unless
|
|
|
|
|
one of the -a or -A options is used.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
Unless the -E option is given, parsing stops at the first string that
|
|
|
|
|
isn’t described by one of the `spec`s. Even with -E, parsing always
|
|
|
|
|
stops at a positional parameter equal to ‘-’ or ‘--’. See also -F.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
The `opt` description must be one of the following. Any of the special
|
|
|
|
|
characters can appear in the option name provided it is preceded by a
|
|
|
|
|
backslash.
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
`name`
|
|
|
|
|
`name`+
|
|
|
|
|
The `name` is the name of the option without the leading ‘-’. To specify
|
|
|
|
|
a GNU-style long option, one of the usual two leading ‘-’ must be
|
|
|
|
|
included in `name`; for example, a ‘--file’ option is represented by a
|
|
|
|
|
`name` of ‘-file’.
|
|
|
|
|
|
|
|
|
|
If a ‘+’ appears after `name`, the option is appended to `array` each
|
|
|
|
|
time it is found in the positional parameters; without the ‘+’ only the
|
|
|
|
|
*last* occurrence of the option is preserved.
|
|
|
|
|
|
|
|
|
|
If one of these forms is used, the option takes no argument, so parsing
|
|
|
|
|
stops if the next positional parameter does not also begin with ‘-’
|
|
|
|
|
(unless the -E option is used).
|
|
|
|
|
|
|
|
|
|
`name`:
|
|
|
|
|
`name`:-
|
|
|
|
|
`name`::
|
|
|
|
|
If one or two colons are given, the option takes an argument; with one
|
|
|
|
|
colon, the argument is mandatory and with two colons it is optional. The
|
|
|
|
|
argument is appended to the `array` after the option itself.
|
|
|
|
|
|
|
|
|
|
An optional argument is put into the same array element as the option
|
|
|
|
|
name (note that this makes empty strings as arguments
|
|
|
|
|
indistinguishable). A mandatory argument is added as a separate element
|
|
|
|
|
unless the ‘:-’ form is used, in which case the argument is put into the
|
|
|
|
|
same element.
|
|
|
|
|
|
|
|
|
|
A ‘+’ as described above may appear between the `name` and the first
|
|
|
|
|
colon.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
In all cases, option-arguments must appear either immediately following
|
|
|
|
|
the option in the same positional parameter or in the next one. Even an
|
|
|
|
|
optional argument may appear in the next parameter, unless it begins
|
2022-08-24 15:13:36 +02:00
|
|
|
|
with a ‘-’. There is no special handling of ‘=’ as with GNU-style
|
|
|
|
|
argument parsers; given the `spec` ‘-foo:’, the positional parameter
|
|
|
|
|
‘--foo=bar’ is parsed as ‘--foo’ with an argument of ‘=bar’.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
When the names of two options that take no arguments overlap, the
|
2022-08-24 15:13:36 +02:00
|
|
|
|
longest one wins, so that parsing for the `spec`s ‘-foo -foobar’ (for
|
2021-05-11 02:29:21 +02:00
|
|
|
|
example) is unambiguous. However, due to the aforementioned handling of
|
|
|
|
|
option-arguments, ambiguities may arise when at least one overlapping
|
2022-08-24 15:13:36 +02:00
|
|
|
|
`spec` takes an argument, as in ‘-foo: -foobar’. In that case, the last
|
|
|
|
|
matching `spec` wins.
|
|
|
|
|
|
|
|
|
|
The options of zparseopts itself cannot be stacked because, for example,
|
|
|
|
|
the stack ‘-DEK’ is indistinguishable from a `spec` for the GNU-style
|
|
|
|
|
long option ‘--DEK’. The options of zparseopts itself are:
|
|
|
|
|
|
|
|
|
|
-a `array`
|
|
|
|
|
As described above, this names the default array in which to store the
|
|
|
|
|
recognised options.
|
|
|
|
|
|
|
|
|
|
-A `assoc`
|
|
|
|
|
If this is given, the options and their values are also put into an
|
|
|
|
|
associative array with the option names as keys and the arguments (if
|
|
|
|
|
any) as the values.
|
|
|
|
|
|
|
|
|
|
-D
|
|
|
|
|
If this option is given, all options found are removed from the
|
|
|
|
|
positional parameters of the calling shell or shell function, up to but
|
|
|
|
|
not including any not described by the `spec`s. If the first such
|
|
|
|
|
parameter is ‘-’ or ‘--’, it is removed as well. This is similar to
|
|
|
|
|
using the shift builtin.
|
|
|
|
|
|
|
|
|
|
-E
|
|
|
|
|
This changes the parsing rules to *not* stop at the first string that
|
|
|
|
|
isn’t described by one of the `spec`s. It can be used to test for or (if
|
|
|
|
|
used together with -D) extract options and their arguments, ignoring all
|
|
|
|
|
other options and arguments that may be in the positional parameters. As
|
|
|
|
|
indicated above, parsing still stops at the first ‘-’ or ‘--’ not
|
|
|
|
|
described by a `spec`, but it is not removed when used with -D.
|
|
|
|
|
|
|
|
|
|
-F
|
|
|
|
|
If this option is given, zparseopts immediately stops at the first
|
|
|
|
|
option-like parameter not described by one of the `spec`s, prints an
|
|
|
|
|
error message, and returns status 1. Removal (-D) and extraction (-E)
|
|
|
|
|
are not performed, and option arrays are not updated. This provides
|
|
|
|
|
basic validation for the given options.
|
|
|
|
|
|
|
|
|
|
Note that the appearance in the positional parameters of an option
|
|
|
|
|
without its required argument always aborts parsing and returns an error
|
|
|
|
|
as described above regardless of whether this option is used.
|
|
|
|
|
|
|
|
|
|
-K
|
|
|
|
|
With this option, the arrays specified with the -a option and with the
|
|
|
|
|
‘=`array`’ forms are kept unchanged when none of the `spec`s for them is
|
|
|
|
|
used. Otherwise the entire array is replaced when any of the `spec`s is
|
|
|
|
|
used. Individual elements of associative arrays specified with the -A
|
|
|
|
|
option are preserved by -K. This allows assignment of default values to
|
|
|
|
|
arrays before calling zparseopts.
|
|
|
|
|
|
|
|
|
|
-M
|
|
|
|
|
This changes the assignment rules to implement a map among equivalent
|
|
|
|
|
option names. If any `spec` uses the ‘=`array`’ form, the string `array`
|
|
|
|
|
is interpreted as the name of another `spec`, which is used to choose
|
|
|
|
|
where to store the values. If no other `spec` is found, the values are
|
|
|
|
|
stored as usual. This changes only the way the values are stored, not
|
|
|
|
|
the way $\* is parsed, so results may be
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
For example,
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
set -- -a -bx -c y -cz baz -cend
|
|
|
|
|
zparseopts a=foo b:=bar c+:=bar
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
will have the effect of
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
foo=(-a)
|
|
|
|
|
bar=(-b x -c y -c z)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The arguments from ‘baz’ on will not be used.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
As an example for the -E option, consider:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
set -- -a x -b y -c z arg1 arg2
|
|
|
|
|
zparseopts -E -D b:=bar
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
will have the effect of
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
bar=(-b y)
|
|
|
|
|
set -- -a x -c z arg1 arg2
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
I.e., the option -b and its arguments are taken from the positional
|
|
|
|
|
parameters and put into the array bar.
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
The -M option can be used like this:
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
set -- -a -bx -c y -cz baz -cend
|
|
|
|
|
zparseopts -A bar -M a=foo b+: c:=b
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
to have the effect of
|
|
|
|
|
|
|
|
|
|
<div class="example">
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
```zsh
|
2021-05-11 02:29:21 +02:00
|
|
|
|
foo=(-a)
|
|
|
|
|
bar=(-a '' -b xyz)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
------------------------------------------------------------------------
|
2021-05-11 02:29:21 +02:00
|
|
|
|
|
2022-08-24 15:13:36 +02:00
|
|
|
|
This document was generated on *May 14, 2022* using [*texi2html
|
|
|
|
|
5.0*](http://www.nongnu.org/texi2html/).
|
|
|
|
|
Zsh version 5.9, released on May 14, 2022.
|