Compare commits

...

10 commits

Author SHA1 Message Date
Haoyuan (Bill) Xing
437ddcbc87
fixed tree-sitter iterators. 2025-04-16 21:44:39 -07:00
mrshmllow
cf5c90c079 Auto generate docs 2023-07-23 04:52:10 +00:00
marshmallow
29e1efd20a
fix missing , in lua examples
Co-authored-by: refaelsh <refaelsh@pm.me>
2023-07-23 14:51:34 +10:00
mrshmllow
c1c209c901 Auto generate docs 2023-07-22 02:05:06 +00:00
marshmallow
2f431e8f8e
fix bug in opts setup 2023-07-22 12:04:35 +10:00
mrshmllow
da8c98632c Auto generate docs 2023-07-21 02:07:47 +00:00
marshmallow
b987927c4c
add my best guess to a packer configuration 2023-07-21 12:07:17 +10:00
mrshmllow
f0d8aa0fd7 Auto generate docs 2023-06-30 04:55:19 +00:00
marshmallow
d38c691151
add load_paths 2023-06-30 14:54:59 +10:00
mrshmllow
dd473593d5 Auto generate docs 2023-06-30 03:12:06 +00:00
3 changed files with 140 additions and 46 deletions

View file

@ -30,11 +30,37 @@ you to add anything extra to your ~init.el~.
cmd = { "OrgExecute", "OrgTangle" }, cmd = { "OrgExecute", "OrgTangle" },
opts = { opts = {
-- by default, none are enabled -- by default, none are enabled
langs = { "python", "lua", ... } langs = { "python", "lua", ... },
-- paths to emacs packages to additionally load
load_paths = {}
} }
}, },
#+end_src #+end_src
*** Packer
#+begin_src lua
use {
"mrshmllow/orgmode-babel.nvim",
requires = {
"nvim-orgmode/orgmode",
"nvim-treesitter/nvim-treesitter"
},
cmd = { "OrgExecute", "OrgTangle" },
opt = true,
config = function ()
require("orgmode-babel").setup({
-- by default, none are enabled
langs = { "python", "lua", ... },
-- paths to emacs packages to additionally load
load_paths = {}
})
end
}
#+end_src
** Usage ** Usage
All commands accept a ~!~ to skip confirmation. All commands accept a ~!~ to skip confirmation.
@ -67,3 +93,37 @@ 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 likely only contain the contents of the last block, which is expected
behaviour. behaviour.
** Advanced Configuration
*** Adding extra org-mode languages
Your emacs ~init.el~ will *not* be sourced during execution of ~:OrgExecute~ and
~:OrgTangle~, so packages you install there wont be available.
However, ~orgmode-babel.nvim~ allows us to specify extra load paths, so we can
make packages available that way.
**** Example
As an example, lets add [[https://github.com/arnm/ob-mermaid][ob-mermaid]] for
mermaid functionality in ~orgmode-babel.nvim~!
We have two options to get the package. We could either create an
=~/.emacs.d/init.el= and install it through a package manager, which will likely
have a randomish name, or for the sake of simplicity and this being a neovim
plugin, we can simply manually clone the repo to a known location.
#+begin_example
git clone https://github.com/arnm/ob-mermaid ~/.../clone-location/ob-mermaid
#+end_example
#+begin_src lua
{
"mrshmllow/orgmode-babel.nvim",
...
opts = {
langs = { ..., "mermaid" }
load_paths = { "~/.../clone-location/ob-mermaid" }
}
},
#+end_src

View file

@ -1,4 +1,4 @@
*orgmode-babel.nvim.txt* For NVIM v0.9.0 Last change: 2023 June 27 *orgmode-babel.nvim.txt* For NVIM v0.9.0 Last change: 2023 July 23
============================================================================== ==============================================================================
Table of Contents *orgmode-babel.nvim-table-of-contents* Table of Contents *orgmode-babel.nvim-table-of-contents*
@ -46,12 +46,39 @@ LAZY.NVIM ~
cmd = { "OrgExecute", "OrgTangle" }, cmd = { "OrgExecute", "OrgTangle" },
opts = { opts = {
-- by default, none are enabled -- by default, none are enabled
langs = { "python", "lua", ... } langs = { "python", "lua", ... },
-- paths to emacs packages to additionally load
load_paths = {}
} }
}, },
< <
PACKER ~
>lua
use {
"mrshmllow/orgmode-babel.nvim",
requires = {
"nvim-orgmode/orgmode",
"nvim-treesitter/nvim-treesitter"
},
cmd = { "OrgExecute", "OrgTangle" },
opt = true,
config = function ()
require("orgmode-babel").setup({
-- by default, none are enabled
langs = { "python", "lua", ... },
-- paths to emacs packages to additionally load
load_paths = {}
})
end
}
<
USAGE *orgmode-babel.nvim-orgmode-babel.nvim-usage* USAGE *orgmode-babel.nvim-orgmode-babel.nvim-usage*
All commands accept a `!` to skip confirmation. All commands accept a `!` to skip confirmation.
@ -95,43 +122,33 @@ ADVANCED CONFIGURATION*orgmode-babel.nvim-orgmode-babel.nvim-advanced-configurat
ADDING EXTRA ORG-MODE LANGUAGES ~ ADDING EXTRA ORG-MODE LANGUAGES ~
Your emacs `init.el` will be sourced during execution of `:OrgExecute` and Your emacs `init.el` will **not** be sourced during execution of `:OrgExecute`
`:OrgTangle`, so packages you install there that provide extra babel languages and `:OrgTangle`, so packages you install there wont be available.
will be available!
Follow the package's installation steps, and if they tell you to include it in However, `orgmode-babel.nvim` allows us to specify extra load paths, so we can
`org-babel-load-languages`, additionally make sure that you include it in make packages available that way.
`opts.langs`.
1. Example 1. Example
As an example, lets add ob-mermaid <https://github.com/arnm/ob-mermaid> for As an example, lets add ob-mermaid <https://github.com/arnm/ob-mermaid> for
mermaid functionality in `orgmode-babel.nvim`! mermaid functionality in `orgmode-babel.nvim`!
First, lets create a `~/.emacs.d/init.el`. We have two options to get the package. We could either create an
`~/.emacs.d/init.el` and install it through a package manager, which will
likely have a randomish name, or for the sake of simplicity and this being a
neovim plugin, we can simply manually clone the repo to a known location.
> >example
; ~/.emacs.d/init.el git clone https://github.com/arnm/ob-mermaid ~/.../clone-location/ob-mermaid
; 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))
< <
Then, in our plugin configuration, we can add `mermaid` to our `opts.langs`.
>lua >lua
{ {
"mrshmllow/orgmode-babel.nvim", "mrshmllow/orgmode-babel.nvim",
... ...
opts = { opts = {
langs = { ..., "mermaid" } langs = { ..., "mermaid" }
load_paths = { "~/.../clone-location/ob-mermaid" }
} }
}, },
< <

View file

@ -3,9 +3,10 @@ local M = {
} }
function M.setup(opts) function M.setup(opts)
opts = opts or opts opts = opts or {}
M.langs = opts.langs and opts.langs or {} M.langs = opts.langs and opts.langs or {}
M.load_paths = opts.load_paths and opts.load_paths or {}
M._here = vim.fn.fnamemodify(debug.getinfo(1).source:sub(2), ":p:h") M._here = vim.fn.fnamemodify(debug.getinfo(1).source:sub(2), ":p:h")
M._run_by_name = M._here .. "/run_by_name.el" M._run_by_name = M._here .. "/run_by_name.el"
@ -26,6 +27,17 @@ function M.setup(opts)
"(setq make-backup-files nil)", "(setq make-backup-files nil)",
} }
vim.list_extend(
M._base_cmd,
vim.fn.reduce(M.load_paths, function(acc, value)
vim.list_extend(acc, {
"--eval",
[[(add-to-list 'load-path "]] .. value .. [[")]],
})
return acc
end, {})
)
vim.list_extend(M._base_cmd, { vim.list_extend(M._base_cmd, {
"--eval", "--eval",
"(org-babel-do-load-languages 'org-babel-load-languages '(" .. vim.fn.reduce(M.langs, function(acc, value) "(org-babel-do-load-languages 'org-babel-load-languages '(" .. vim.fn.reduce(M.langs, function(acc, value)
@ -77,8 +89,10 @@ function M.get_names_in_buffer(bufnr, line1, line2)
local passed = not range local passed = not range
local name local name
for id, node in pairs(match) do for id, nodes in pairs(match) do
for _, node in ipairs(nodes) do
local row1, col1, row2, col2 = node:range() local row1, col1, row2, col2 = node:range()
local text = vim.api.nvim_buf_get_text(bufnr, row1, col1, row2, col2, {})[1] local text = vim.api.nvim_buf_get_text(bufnr, row1, col1, row2, col2, {})[1]
if named_blocks_query.captures[id] == "block" and not passed then if named_blocks_query.captures[id] == "block" and not passed then
@ -98,6 +112,7 @@ function M.get_names_in_buffer(bufnr, line1, line2)
table.insert(names, name) table.insert(names, name)
end end
end end
end
return names return names
end end
@ -118,7 +133,8 @@ function M.get_blocks_in_buffer(bufnr, line1, line2)
for _, match in unnamed_blocks_query:iter_matches(root, bufnr, 0, -1) do for _, match in unnamed_blocks_query:iter_matches(root, bufnr, 0, -1) do
local passed = not range local passed = not range
for id, node in pairs(match) do for id, nodes in pairs(match) do
for _, node in ipairs(nodes) do
local row1, _, row2 = node:range() local row1, _, row2 = node:range()
if unnamed_blocks_query.captures[id] == "block" and not passed then if unnamed_blocks_query.captures[id] == "block" and not passed then
@ -129,6 +145,7 @@ function M.get_blocks_in_buffer(bufnr, line1, line2)
end end
end end
end end
end
if passed then if passed then
table.insert(indexes, encountered) table.insert(indexes, encountered)