clikan/README.md

283 lines
9.2 KiB
Markdown

# `clikan.sh` command line kanban
This shell script provides an interactive command line
interface for manipulating files with Markdown formatted lists.
Each list item corresponds to a card of a simple kanban system.
The three possible list bullets `-*+` are used as indicators of
status "wait/backlog", "doing", and "done/archived".
The script permits displaying and status changes of the items,
addition of new "waiting" items, direct edition of the
lists ("kanban" files) and of the configuration file defining
kanbans and some script parameters.
In addition, it will display as "doing" each list item of the
pattern `- ...(MM-DD)...` where `MM-DD` corresponds to the
current month and day,
and it can also filter for cards containing a filter keyword.
## Installation
Only the script `clikanban.sh` must be installed somewhere,
where it can be executed either directly, or as argument to
`sh` or another reasonable shell. Currently no arguments are
processed.
The script currently requires the standard (POSIX conformal)
tools `sed grep ed cat mktemp cp date` for correct function;
they should be available on any sane UNIX-like system.
## Execution
The script will check for a configuration file and if necessary
create one (see Configuration further below).
It will scan the defined "kanban files" for "doing" items
(with preceding '* ') and display them, then wait for input
after a prompt.
A help screen is displayed if an empty command is given, and
then also the configuration can be displayed by entering `c`.
### Commands
- `q` : quit the program (also CTRL-D should work)
- `d` : display all "doing" entries as selection list
- `a` : display all "archived/done" entries as selection list
- `w` : display all "waiting/backlog" entries as selection list
- `do` N : change card to "doing/active" status
- `done` N : change card to "archive/done" status
and append a timestamp of format "// YY-MM-DD"
- `wait` N : change card to "waiting/backlog" status
- `n` : add a new item/card to the target kanban (only one line of text);
content may be given on the same line, separated by whitespace
- `k` : define target kanban file (for direct edition, and new items)
- `f` F : define filter word F as grep pattern for selection of cards
(empty is changed into `.` which matches all non-empty cards)
- `ek` : directly edit the target kanban file with the text editor
- `ec` : directly edit the configuration file with the text editor
- `!` : execute arguments with shell, `/bin/sh -c` by default
(set `myshell` variable in source to `echo` to deactivate this)
In the list above, "N" is a number from the last displayed selection list;
if none is given, the script asks for one. The numbers are not attributed
to specific "cards" but to the items in the last displayed selection list
(i.e the first "doing" and the first "waiting" card both have number 1,
and it depends on the selection context, which one is referred to).
The commands `do/done/wait` also accept several number arguments
separated by white space.
"F" is a word used for filtering for specific cards. If the filter word is
non-empty, only cards containing this word are displayed. Can be used e.g
to only select cards containing a given "topic". Please note: this filter
word actually is used as a grep string; dots will match any character and
therefore should not be used in "topics" (leading `+` signs and `-_:,`
anywhere are fine, though).
Be careful with the `ek` and the `ec` commands, as the syntax of the
corresponding files must be preserved for the script to correctly work.
Whitespace in general is no problem, though.
Cards/items do not have any kind of ID number; they are just text, and
therefore some strange things may happen if the same entry exists in
more than one "kanban file" -- in particular, they will all change
status (doing/waiting/done) together.
No card may contain TAB characters; they are replaced by SPC at entry.
Do not add TAB charactes manually through the `ek` command, as this
will probably disturb the script's manipulation of such cards.
The `d` command will not only display items with a preceding `*`
but also those with a pattern of `(MM-DD)` anywhere after preceding
`-*+` characters, with `MM` being the current month and `DD` the
current day. This permits to use a "kanban file" as a calendar; in
that case it should be given as last `kanban` entry, to prevent
filling of the screen with calendar entries when using any of the
`d w a` commands (see also example below).
In addition, the `d` command will sort the output cards according
to the configuration variable `sortdir` (see below).
The `!` "shell escape" command will allow you to execute shell commands.
If the command begins with a letter and does not match to an internal
clikan command, you may even omit the leading `!` -- so be careful:
only type `/bin/rm -rf *` at the clikan prompt if you *absolutely*
know what you're doing! You've been warned!
(Also note commands are of course executed in a subshell,
therefore typing `cd ..` is rather pointless.)
## Configuration
The script expects a configuration file named by the environment
variable `$CLIKANCONF` or (if undefined) `$HOME/.clikanconf` by default.
If there isn't any, the script generates a new one, populated
with all possible parameters at reasonable default values, and
also creates an item list ("kanban file") with the name
`$HOME/clikanban.md` containing some dummy entries.
Please see the source or the generated configuration file for
information about possible settings!
*Note: if `$HOME/clikanban.md` already exists, the script will
save a backup copy as `$HOME/clikanban.md.bak` in case
something went wrong with the configuration file.*
In addition, it uses the contents of `$VISUAL` or `$EDITOR`
when needing to launch a text editor, or `ed` as default.
*(Because, what else!?)*
## Example
We assume a first start with no environment variables set.
$ ./clikan.sh
no config found, generating default config file /home/username/.clikanconf
and default kanban file /home/username/clikanban.md
(this should happen only once at first use)
doing
1: learn to use clikan
Default config and kanban files have been generated.
Let's see the waiting, the archived/done, and again the "doing" cards:
|< w
waiting/todo/backlog
1: improve clikan
|< a
archived/done
1: install clikan
|< d
doing
1: learn to use clikan
Now let's assume we know everything, so card 1 is done:
|< done 1
doing
|< w
waiting/todo/backlog
1: improve clikan
Obviously there is work waiting, so let's do it:
|< do 1
doing
1: improve clikan
Now we check for the target kanban ...
|< k
1: /home/username/clikanban.md
choice? (default: /home/username/clikanban.md)
doing
1: improve clikan
... do a manual editing session on it ...
|< ek
calling /bin/ed /home/username/clikanban.md ...
158
1z
# my kanban file
+ learn to use clikan
* improve clikan
+ install clikan
### titles work as comments
# might be a future card you don't yet want in waiting
... change one entry ...
?improve
* improve clikan
s/improve/test/p
* test clikan
... and save it, quit, and we're back at our script:
w
155
q
welcome back
Verifying the entry indeed has been changed:
|< d
doing
1: test clikan
Now let's add a new card:
|< n
enter new card for target /home/username/clikanban.md :
give feedback to clikan developer
doing
1: test clikan
The new card has been added to the waiting/backlog list:
|< w
waiting/todo/backlog
1: give feedback to clikan developer
We could also have given the card content as direct argument, by typing `n give feedback...` at the prompt.
Just hitting RETURN at the prompt shows the help/usage page:
|<
./clikan.sh : command line kanban
(2020-05-11/HB9KNS)
configuration file: /home/username/.clikanconf
for help about commands, just hit RETURN
to show configuration, enter 'c'
We want to see the configuration, then quit:
c
CLIKANCONF=
configfile=/home/username/.clikanconf
editor=/bin/ed
maxshow=15
configfile contents:
# configuration file for ./clikan.sh
# (autogenerated at Tue Dec 17 07:18:26 UTC 2019)
# file name can be defined by env.var CLIKANCONF
#
# prompt is displayed when waiting for command
prompt |<
# maxshow defines the maximum number of cards/lines to be displayed
maxshow 15
# sortdir defines order of non-calendar kanban cards
# and can be one of up, down or none (default)
sortdir none
# kanban defines a kanban file, may be given several times
# kanban /some/path/to/jobkanban.txt
# kanban /another/path/to/privatekanban.md
kanban /home/username/clikanban.md
doing
1: test clikan
|< q
Please note: the `maxshow` variable is not honoured when displaying
the archived/done entries: in that case, the display limit is set
to an arbitrary value of 99999 (i.e reasonably indefinite). It is
up to the user to do some housekeeping now and then in the archive,
by manually removing the entries marked with a `+` flag through the
`ek` command.
---
*2020-05-11/HB9KNS,Y.Bonetti*