orgmode-babel.nvim/README.org
2023-06-25 17:02:05 +10:00

116 lines
2.8 KiB
Org Mode

* orgmode-babel.nvim
An experimental plugin that evaluates and tangles code blocks in
[[https://github.com/nvim-orgmode/orgmode][nvim-orgmode]] using
[[https://orgmode.org/worg/org-contrib/babel/][babel]] itself.
It uses ~emacs~ under the hood for perfect compatibility, but does not require
you to add anything extra to your ~init.el~.
[[https://github.com/mrshmllow/BetterRecipeBook/assets/40532058/b1ca7384-4bb3-47d8-9148-b85f3a2ea54a][Demonstration]]
** Requirements
- [[https://github.com/nvim-orgmode/orgmode][nvim-orgmode]]
- [[https://github.com/nvim-treesitter/nvim-treesitter][nvim-treesitter]]
- Neovim v0.9.0 or later
- A working ~emacs~ installation (does not require configuration)
** Setup
*** lazy.nvim
#+begin_src lua
{
"mrshmllow/orgmode-babel.nvim",
dependencies = {
"nvim-orgmode/orgmode",
"nvim-treesitter/nvim-treesitter"
},
cmd = { "OrgExecute", "OrgTangle" },
opts = {
-- by default, none are enabled
langs = { "python", "lua", ... }
}
},
#+end_src
** Usage
All commands accept a ~!~ to skip confirmation.
*** ~:OrgE[xecute]~
Evaluates every block in buffer.
See [[https://orgmode.org/manual/Working-with-Source-Code.html][Working with
Source Code]] in the org manual.
*** ~:{range}OrgE[xecute]~
Evaluate every block in range.
*** ~:OrgE[xecute] [name]~
Evaluate ~[name]~ block.
*** ~:OrgT[angle]~
Tangles whole file.
See [[https://orgmode.org/manual/Extracting-Source-Code.html][Extracting Source
Code]] in the org manual.
*** ~:{range}OrgT[angle]~
Tangles all blocks in range. If the range is NOT ~%~, the tangled file will
likely only contain the contents of the last block, which is expected
behaviour.
*** ~:OrgT[angle] [name]~
Tangles ~[name]~ block.
** Advanced Configuration
*** Adding extra org-mode languages
Your emacs ~init.el~ will be sourced during execution of ~:OrgExecute~ and
~:OrgTangle~, so packages you install there that provide extra babel
languages will be available!
Follow the package's installation steps, and if they tell you to include it in
~org-babel-load-languages~, additionally make sure that you include it in
~opts.langs~.
**** Example
As an example, lets add [[https://github.com/arnm/ob-mermaid][ob-mermaid]] for
mermaid functionality in ~orgmode-babel.nvim~!
First, lets create a =~/.emacs.d/init.el=.
#+begin_src emacs-lisp init.el
; ~/.emacs.d/init.el
; Add the melpa package manager
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/") t)
(package-initialize)
; Install ob-mermaid
(unless (package-installed-p 'ob-mermaid)
(package-install 'ob-mermaid))
#+end_src
Then, in our plugin configuration, we can add ~mermaid~ to our ~opts.langs~.
#+begin_src lua
{
"mrshmllow/orgmode-babel.nvim",
...
opts = {
langs = { ..., "mermaid" }
}
},
#+end_src