zk/docs/external-processing.md
2021-02-26 23:20:03 +01:00

63 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Send notes for processing by other programs
<!--{% raw %}-->
<!-- TODO: --color=none -->
A great way to expand `zk` feature set is to explore a wealth of command-line tools available. You can use `zk`'s powerful [searching and filtering](note-filtering.md) capabilities to select notes before delegating further processing to other programs.
## Process file paths
Many programs expect file paths for input. You can interface with such program using the `path` list format and a space delimiter.
```sh
$ zk list --format path --delimiter " "
```
If the file paths can contain spaces, you may want to quote manually the paths, using the `{{path}}` [template variable](template-format.md) instead:
```sh
$ zk list --format "'{{path}}'" --delimiter " "
```
As always, this is such a useful [command alias](config-alias.md) to have:
```toml
paths = "zk list --format \"'{{path}}'\" --quiet --delimiter ' ' $@"
```
Some programs such as `xargs` work better when file paths are separated by the ASCII NUL character (`\0`). In this case, you can use the `--delimiter0` (or `-0`) option.
For example, this command prints the full Git history of the notes:
```sh
$ zk list --format path --delimiter0 | xargs -0 git log --patch --
```
### Feeding `zk` to itself
Some `zk` options such as `--exclude` also take file paths for parameters. Let's increase their flexibility by nesting `zk` calls. In this case, the delimiter will be `,`.
For example, this command lists the notes which are linked by at least one other note so the notes which are *not* orphans.
```sh
$ zk list --exclude "`zk list -q -f path -d "," --orphan`"
```
And this one finds the notes which are linked by at least one note in `journal/`.
```sh
$ zk list --linked-by "`zk list -q -f path -d "," journal`"
```
## Process the content of a note
If you want to directly transform the content instead, you may use the `raw-content` template variable, which will print the full content of the note file.
In this particular case, we usually want to process only one note at a time. You can make sure that `zk list` will print only the first note from the result with `--limit 1` (or `-n1`).
```sh
$ zk list --format {{raw-content}} --limit 1
```
<!--{% endraw %}-->