;doc:shell completions: mention zsh; cleanups

This commit is contained in:
Simon Michael 2025-02-21 17:16:40 -10:00
parent afd6540b63
commit d4884def4b
2 changed files with 23 additions and 28 deletions

View File

@ -640,9 +640,8 @@ The config file feature was added in hledger 1.40 and is considered *experimenta
## Shell completions ## Shell completions
If you use the bash shell, you can optionally set up context-sensitive autocompletions when you press TAB in a hledger command line. If you use the bash or zsh shells, you can optionally set up context-sensitive autocompletion for hledger command lines.
At a bash shell prompt, try pressing Try pressing `hledger<SPACE><TAB><TAB>` (should list all hledger commands)
`hledger<SPACE><TAB><TAB>` (should list all hledger commands)
or `hledger reg acct:<TAB><TAB>` (should list your top-level account names). or `hledger reg acct:<TAB><TAB>` (should list your top-level account names).
If completions aren't working, or for more details, see [Install > Shell completions](install.html#shell-completions). If completions aren't working, or for more details, see [Install > Shell completions](install.html#shell-completions).

View File

@ -2,8 +2,13 @@
This code generates shell completion scripts for hledger's command line interface. This code generates shell completion scripts for hledger's command line interface.
Context-sensitive completions are usually triggered by pressing the tab key once or twice after typing the command `hledger ` (or `hledger-ui` or `hledger-web`). Context-sensitive completions are usually triggered by pressing the tab key once or twice after typing the command `hledger ` (or `hledger-ui` or `hledger-web`).
Currently only Bash is supported, but Zsh or Fish could be added.
Currently there are detailed bash completions here in the hledger repo, which this doc is mostly about;
and there are some zsh completions maintained in zsh-completions repo.
## bash completions
An old demo:
[![asciicast](https://asciinema.org/a/227935.svg)](https://asciinema.org/a/227935) [![asciicast](https://asciinema.org/a/227935.svg)](https://asciinema.org/a/227935)
To use hledger's bash shell completions, these must be installed on your system: To use hledger's bash shell completions, these must be installed on your system:
@ -12,24 +17,9 @@ To use hledger's bash shell completions, these must be installed on your system:
- hledger's bash completion script - hledger's bash completion script
- hledger, hledger-ui, and/or hledger-web - hledger, hledger-ui, and/or hledger-web
For user setup and usage instructions, please see [Install > Shell completions](https://hledger.org/install.html#shell-completions). For latest user setup instructions and feature list, please see [Install > Shell completions](https://hledger.org/install.html#shell-completions).
To test the bash completions, at a bash shell prompt, type ### Generating the bash completions
`hledger<SPACE><TAB><TAB>` (should list all hledger commands)
or `hledger reg acct:<TAB><TAB>` (should list your top-level account names).
The bash completion script can handle:
- hledger's command argument
- general flags
- command-specific flags, after the command argument
- flag values, for flags that have standard values
- query prefixes
- account names from the journal, after an account name prefix
- appropriate data from the journal, after these query prefixes: `acct:`, `code:`, `cur:`, `desc:`, `note:`, `payee:`, `real:`, `status:`, `tag:`
- amount comparison operators, after `amt:`.
## Generating hledger shell completions
In the main hledger repo, In the main hledger repo,
first build and install an up-to-date version of hledger in PATH, first build and install an up-to-date version of hledger in PATH,
@ -49,7 +39,7 @@ You can add `-jNUMPROCS` to make it run faster.
Data from the journal (account names, payee names etc.) is not gathered here; Data from the journal (account names, payee names etc.) is not gathered here;
the script detects those dynamically at completion time. the script detects those dynamically at completion time.
## Installing the generated shell completions ### Installing the bash completions
(If you want a released version of the completion script, use the Install page link above instead.) (If you want a released version of the completion script, use the Install page link above instead.)
@ -64,19 +54,20 @@ bash will use it when completing command lines beginning with "hledger" or "hled
You can also just source the script it in your shell startup; this will load completions eagerly, adding a delay to your shell start up time. You can also just source the script it in your shell startup; this will load completions eagerly, adding a delay to your shell start up time.
Or you can source it in your current bash session for testing. Or you can source it in your current bash session for testing.
## Packaging hledger shell completions ### Packaging the bash completions
It's great when hledger packagers can make shell completions just work for users. It's great when hledger packagers can make shell completions just work for users.
Currently there is one completion script: `hledger-completion.bash`. Currently there is one completion script: `hledger-completion.bash`.
It is included in the hledger package's tarball on Hackage. It is included in the hledger package's tarball on Hackage.
For hledger version 1.40, the up-to-date script is at hledger versions before 1.40 don't have up-to-date bash completions.
For hledger 1.40, the up-to-date script is at
https://github.com/simonmichael/hledger/blob/39dfe5702e1b401f1883d814907d242958eec9c1/hledger/shell-completion/hledger-completion.bash. https://github.com/simonmichael/hledger/blob/39dfe5702e1b401f1883d814907d242958eec9c1/hledger/shell-completion/hledger-completion.bash.
From releases after 1.40, it will be included in the bindists provided in Github releases, Since hledger 1.41, this is included in the Github release bindists, and available at urls like
and available at urls like https://github.com/simonmichael/hledger/blob/1.41/hledger/shell-completion/hledger-completion.bash
https://github.com/simonmichael/hledger/blob/1.40/hledger/shell-completion/hledger-completion.bash
After it has been loaded, this script will provide completions for hledger, hledger-ui and hledger-web. After it has been loaded, this script will provide completions for hledger, hledger-ui and hledger-web.
Note if it is installed only as `hledger`, bash-completion will not load it until the user types `hledger<SPACE><TAB>`. Note if it is installed only as `hledger`, bash-completion will not load it until the user types `hledger<SPACE><TAB>`.
@ -88,7 +79,12 @@ Here is a place to track the status of shell completions in hledger packages. As
- Arch Linux AUR: packaging in progress - Arch Linux AUR: packaging in progress
- Others: unknown - Others: unknown
## Completion scripts for other shells ## zsh completions
There are some [zsh completions](https://github.com/zsh-users/zsh-completions/blob/master/src/_hledger) in the zsh-completions repo.
## Completions for other shells
You're welcome to add completion scripts for other shells. It should not be too You're welcome to add completion scripts for other shells. It should not be too
hard! All available hledger options and commands are already there (generated by hard! All available hledger options and commands are already there (generated by