Kapow is a template processor that provides the following directives to support injecting file contents, command output, current date/time, etc in generated files.
It can be used in a few different ways:
kapow path/to/file.ext
.#!/usr/bin/env kapow
as the first line of a (Markdown) file,
make it "executable" via chmod +x path/to/file.ext
, then run via
cd path/to; ./file.ext
(see also note #3 under [block directives]).Kapow is generally designed around the idea of using Markdown output formatting, but the format could be any text format that supports the desired syntax.
NOTE: Installing [bat
] and piping kapow
output to bat -pl md
adds nice
syntax highlighting to Markdown and paging (or add -P
to disable the pager).
Directive | Description
---|---
!inc:path
| Include file contents; path is relative to its containing file
!run:command
| Run command and insert stdout
Notes:
Directive | Example | Description
---|---|---
`!elapsed`
| 0s | Processing time
`!now`
| 2023-05-02T17:20:03Z | Current date/time in UTC / RFC 3339
`!now:local`
| Tue 02 May 2023 13:20:03 EDT | Current date/time in local timezone
`!now:local:%A %H:%M`
| Tuesday 13:20 | Current date/time in local timezone and custom format
`!now:MST7MDT`
| Tue 02 May 2023 11:20:03 MDT | Current date/time in custom timezone
`!now:MST7MDT:%A %H:%M`
| Tuesday 11:20 | Current date/time in custom timezone and format
`!now:US/Hawaii`
| Tue 02 May 2023 07:20:03 HST | Current date/time in custom locale
`!now:US/Hawaii:%A %H:%M`
| Tuesday 07:20 | Current date/time in custom locale and format
`!now:UTC:%A %H:%M`
| Tuesday 17:20 | Current date/time in UTC and custom format
`!now:x`
| Xh41HK3 | Current date/time in "x" format
`!today`
| 2023-05-02 | Current date in UTC / RFC 3339
`!today:local`
| 2023-05-02 | Current date in local timezone
`!today:MST7MDT`
| 2023-05-02 | Current date in custom timezone
`!today:MST7MDT:%v`
| 2-May-2023 | Current date in custom timezone and format
`!today:US/Hawaii`
| 2023-05-02 | Current date in custom locale
`!today:US/Hawaii:%x`
| 05/02/23 | Current date in custom locale and format
`!today:UTC:%A`
| Tuesday | Current date in UTC and custom format
!
with a backslash: \!
.text
$ kapow -V
kapow 2.5.0
```text $ kapow -h KAPOW!
Usage: kapow [OPTIONS] [INPUT_FILES]...
Arguments: [INPUT_FILES]... Input file(s) [default: -]
Options: -r, --readme Print readme -h, --help Print help -V, --version Print version ```
-r
option uses [bat
] for paging and syntax highlighting if you have it
installed (optional).Code | Description ---|--- 101 | Could not read input file 102 | Could not read included file 103 | Could not change directory
See the readme
task in Makefile.toml
:
t/VERSION.md
from t/VERSION.t.md
!run:../target/release/kapow -V
t/USAGE.md
from t/USAGE.t.md
!run:../target/release/kapow -h
README.md
from t/README.md
!inc:VERSION.md
!inc:USAGE.md
`!now`
(all variants)!run:
output;
enable backslash-wrapping long commands;
include whitespace in included files;
process path of included files relative to the containing file instead of the
current directory; input and included file processed more efficiently via
BufReader
instead of read_to_string
; improved error handlingbat -pl md
as readme pager if have it installed;
update dependencies!today
span directive; improved exit macro; change
directory function; where clauses; fix watch task; fix readme-
; update dependencies!elapsed
directive; fix issue when more than 1
different span directives are on a line; improve readme; update dependenciesbash
cargo install bat cargo-edit cargo-make cargo-outdated dtg kapow \
miniserve