diff --git a/README.md b/README.md index 2b80c19..8dbe90a 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,10 @@ Any options that are not specified when calling `setup` will take on their defau -- Current options: "iron" for iron.nvim, "toggleterm" for toggleterm.nvim, -- or "auto" which checks which of the above are installed repl_provider = "auto", + -- If `true`, folding will be based on expression for buffers with a valid + -- cell marker and cells will be folded on entering the buffer + -- * NOTE: This will replace any previously set foldmethod for those buffers + cell_folding = true } ``` diff --git a/doc/NotebookNavigator.txt b/doc/NotebookNavigator.txt index 58518db..e1376af 100644 --- a/doc/NotebookNavigator.txt +++ b/doc/NotebookNavigator.txt @@ -120,6 +120,10 @@ Default values: -- Current options: "iron" for iron.nvim, "toggleterm" for toggleterm.nvim, -- or "auto" which checks which of the above are installed repl_provider = "auto", + -- If `true`, folding will be based on expression for buffers with a valid + -- cell marker and cells will be folded on entering the buffer + -- * NOTE: This will replace any previously set foldmethod for those buffers + cell_folding = true } < @@ -138,4 +142,4 @@ Usage~ any config parameter which you not pass will take on its default value. - vim:tw=78:ts=8:noet:ft=help:norl: \ No newline at end of file + vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/lua/notebook-navigator/init.lua b/lua/notebook-navigator/init.lua index 55b01c5..85d77f8 100644 --- a/lua/notebook-navigator/init.lua +++ b/lua/notebook-navigator/init.lua @@ -209,6 +209,10 @@ M.config = { -- Current options: "iron" for iron.nvim, "toggleterm" for toggleterm.nvim, -- or "auto" which checks which of the above are installed repl_provider = "auto", + -- If `true`, folding will be based on expression for buffers with a valid + -- cell marker and cells will be folded on entering the buffer + -- * NOTE: This will replace any previously set foldmethod for those buffers + cell_folding = true } --minidoc_afterlines_end @@ -258,6 +262,24 @@ M.setup = function(config) if (M.config.activate_hydra_keys ~= nil) and got_hydra then activate_hydra(M.config) end + + local cell_group = vim.api.nvim_create_augroup("Cells", {clear=true}) + if M.config.cell_folding then + vim.api.nvim_create_autocmd("BufEnter", { + pattern = {"*"}, + group = cell_group, + callback = function(ev) + local ft = vim.api.nvim_get_option_value("filetype", {buf = ev.buf}) + if M.config.cell_markers[ft] then + local marker = M.config.cell_markers[ft] + local vim_marker = string.gsub(marker, " ", "\\ ") + vim.cmd[[setlocal foldmethod=expr]] + local expr = "setlocal foldexpr=(getline(v:lnum)=~'^"..vim_marker.."')==0" + vim.cmd(expr) + end + end + }) + end end return M