Filetype plugin for forester, a tool for writing mathematical hypertext
Important
I am currently focusing my efforts on developing the language server for forester. The language server will subsume the vast majority of features of this plugin. After the LSP ships, this plugin will be deprecated/rewritten from scratch.
- Tree-sitter syntax highlighting. Please report any issues with the grammar in the relevant repository
- following links and transclusions with
gf
- Searching for trees by title with telescope
- Creating new trees via autocompletion menu
- Displaying tree titles with virtual text
- Address completion
Available user commands:
Forester build
: Build the currently configured forest. UseForester config
to switch forest.Forester config
: Choose the config file from which to source the tree directoriesForester browse
: Telescope picker, search trees by title. TODO: support browsing by tag/taxon/...Forester new
: Create a new tree by specifying a prefixForester new_random
: Create a new tree with a random adress by specifying a prefixForester transclude_new
: transclude a new tree at cursor positionForester link_new
: link a new tree at cursor position
With lazy:
{
"kentookura/forester.nvim",
event = "VeryLazy",
dependencies = {
{ "nvim-telescope/telescope.nvim" },
{ "nvim-treesitter/nvim-treesitter" },
{ "nvim-lua/plenary.nvim" },
},
},
-- optionally, configure the cmp source:
local foresterCompletionSource = require("forester.completion")
require("cmp").register_source("forester", foresterCompletionSource)
require("cmp").setup.filetype("forester", { sources = { { name = "forester", dup = 0 } } })
You might need to run :TSInstall toml
and :TSInstall forester
.
In your forest.toml
(or any other config) you should add the list of
prefixes:
prefixes = ["foo", "bar"]
When calling :Forester new
, you will then be able to choose the prefix of the
new tree.
{
config = function()
local forester = require("forester")
vim.g.mapleader = " "
vim.keymap.set("n", "<leader>n.", "<cmd>Forester browse<CR>", { silent = true })
vim.keymap.set("n", "<leader>nn", "<cmd>Forester new<CR>", { silent = true })
vim.keymap.set("n", "<leader>nr", "<cmd>Forester new_random<CR>", { silent = true })
vim.keymap.set("i", "<C-t>", "<cmd>Forester transclude<CR>", { silent = true })
vim.keymap.set("i", "<C-l>", "<cmd>Forester link<CR>", { silent = true })
end,
}
require("nvim-web-devicons").setup({ override_by_extension = { ["tree"] = { icon = "🌲" } } })
- Find an ergonomic way to make use of forester's builtin templating feature