cog and vimwiki integration
Continuing on my current note system arrangement, the topic today is active code. Active code is the ability to execute source code and show the result on the same document.
The main inspiration is babel, emacs org-mode package. Babel can deal with multiple programming languages (babel languages), attach headers on how the language is used.
Unfortunately babel is integrated with emacs and orgmode. I’d require to change all my documents to
.org extension and use emacs.
cog in vim
As I don’t need multiple language support I can use something with a single language (python) and that integrates with vim without issue.
The library cogapp offers a lightweight import in python and a binary that performs substitutions in text files, running standard python interpreter.
# text before calendar entries [[[cog from tools import *;print_calendar() ]]] Sat Oct 08 event 1 Wed Oct 12 event 2 [end] # text after
import cog def print_calendar(): import subprocess;cog.outl("") result = subprocess.run("calendar -w -A14".split(), capture_output=True) cog.out(result.stdout.decode());cog.outl("")
In order to execute the code, I added the following line in my
nmap <F10> :!cog -r %:p<CR>:e<CR>
which overwrites the open file and then rereads it in vim.