Skip to main content

Keybindings

SCS reuses PlanWil's VisiData keybindings so the same muscle memory works on every board:

KeysNameAction
z then P (zP)pid-popupOpen the selected row's markdown in an 80%×80% tmux popup (Neovim).
g then p (gp)pid-copy-pathCopy 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/
  • zP reads the row's pid, runs bash -ic '<pid>' (a generated shell alias) in a tmux popup, and the alias opens the markdown in Neovim.
  • gp reads the same alias, validates it against the expected nvim /absolute/path.md form, and copies the path with tmux 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)
note

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
warning

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​

ToolConvention
Neovim (LazyVim)The target of zP and of the gp-pasted path. No SCS-specific config required.
YaziBrowse 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 + ].