Keybindings
SCS reuses PlanWil's VisiData keybindings so the same muscle memory works on every board:
| Keys | Name | Action |
|---|---|---|
z then P (zP) | pid-popup | Open the selected row's markdown in an 80%×80% tmux popup (Neovim). |
g then p (gp) | pid-copy-path | Copy the selected row's absolute markdown path to the tmux paste buffer. |
How PlanWil does it
The existing implementation lives in the shared VisiData config:
common-config/visidata/
├── .visidatarc.d/Keybindings/44-pid-popup-nvim.py → features/pid-popup/
├── .visidatarc.d/Keybindings/45-pid-copy-path.py → features/pid-copy-path/
zPreads the row'spid, runsbash -ic '<pid>'(a generated shell alias) in a tmux popup, and the alias opens the markdown in Neovim.gpreads the same alias, validates it against the expectednvim /absolute/path.mdform, and copies the path withtmux load-buffer -.- The aliases are generated per-pid under
~/.bash_aliases/Planwil/pids/<pid>.sh. - The popup targets the tmux client running VisiData (
#{client_tty}) and is requested asynchronously so VisiData stays responsive.
Adaptation for SCS
SCS pids look like FS-0001 (site prefix + 4 digits) rather than PlanWil's
aio-01. The keybindings resolve an SCS pid through its row in the
workspace-prefixed keyword CSV, then open the article in that workspace's md/
folder: data/<workspace>/md/<pid>--….md.
The implementation mirrors PlanWil's alias mechanism:
~/.bash_aliases/Scs/pids/<pid>.sh # alias <pid>='nvim /abs/path/data/<workspace>/md/<pid>--…md'
The SCS CLI (scs aliases --workspace NAME) writes one alias per generated
article Markdown file, and the VisiData feature resolves a pid against SCS before
falling back to PlanWil.
Resolution order
1. Scs alias dir ~/.bash_aliases/Scs/pids/<pid>.sh
2. PlanWil aliases ~/.bash_aliases/Planwil/pids/<pid>.sh
3. EngWil notes (eng- prefix, direct file)
SCS pids are <PREFIX>-<NNNN>; PlanWil pids are <3-char>-<nn>. They do not
collide by width. The resolver still checks for ambiguity rather than guessing.
Install the bindings
The feature file lives in the SCS repo:
integrations/visidata/scs_pid.py
Install it once:
mkdir -p ~/.visidatarc.d/Keybindings
ln -sf ~/github/server-side-program/scs/integrations/visidata/scs_pid.py \
~/.visidatarc.d/Keybindings/46-scs-pid.py
Generate the per-PID aliases:
scs aliases --workspace bs
ls ~/.bash_aliases/Scs/pids | head
The bindings only work after both steps. If ~/.visidatarc.d/Keybindings/ has
no SCS entry, zP and gp fall back to PlanWil aliases and will not find SCS
rows.
Neovim and Yazi
| Tool | Convention |
|---|---|
| Neovim (LazyVim) | The target of zP and of the gp-pasted path. No SCS-specific config required. |
| Yazi | Browse raw/ and named workspace CSVs, notes, and assets under data/<workspace>/. |
Verifying a binding
# Inspect generated aliases
ls ~/.bash_aliases/Scs/pids | head
# Inspect one alias
cat ~/.bash_aliases/Scs/pids/FS-0001.sh
# → alias FS-0001='nvim /home/rezriz/github/server-side-program/scs/data/fundamentalstock/md/FS-0001--….md'
In VisiData, put the cursor on a row whose pid cell holds FS-0001, press zP
to open it, or gp and paste with prefix + ].