notesy::menus

A plugin's script can add items to notesy's own right-click menus. Each menu is named with a Menu, and each hands its items what it was opened on. It takes the ui permission.

rustuse notesy::{menus, notes, notices, Menu};

pub fn ready() {
    menus::add(Menu::Note, "count", #{ title: "Count its words", icon: "number" }, |path| {
        if let Some(note) = notes::read(path) {
            notices::info(`${note.title()}: ${note.words()} words`);
        }
    });
    menus::add(Menu::Editor, "line", "Which line is this?", |at| notices::info(`Line ${at.line}`));
}

#The menus

Menu Where it opens What run gets
Menu::Note On a note in the tree Its path within the vault: "Projects/Plan.md"
Menu::File On any other file in the tree (an image, a PDF …) Its path
Menu::Folder On a folder in the tree Its path
Menu::Tab On a tab #{ title, path }: path only on a note's tab, not a plugin's tab or a plugin's own file
Menu::Editor In the note's text #{ path, line, start, end }: the caret's line, counted from 1 (a right-click puts the caret there, unless it's in the selection), and the selection's start and end in characters. No path on a plugin's own file
Menu::Board On a board's empty canvas #{ path, x, y }: the board's path, and where on it, in the board's units (notesy::boards)
Menu::BoardCard On a card on a board #{ path, id, type, selected }: the card's id and type, and the ids of every card and arrow picked
Menu::BoardArrow On an arrow on a board #{ path, id }

A plugin's own sidebar section has a menu for its items too: section.menu(key, options, run) (notesy::sections), whose run gets the item's id.

#Adding one

Function What it does
menus::add(menu, key, options, run) Adds an item to menu, and returns it. run(target) runs when it's picked.

key names it in that menu: lowercase letters, digits, -, _ and ., starting with a letter. The same key can name an item in each menu, and adding one with a key it has in that menu already changes it. options is its title, or #{ title, icon } (an icon by name, notesy::view).

What run gets is the plugin's because the user picked its item on it; reading what's in a note still takes notes.read (notesy::notes), and changing the text takes editor (notesy::editor).

#An item

Method What it does
remove() Takes it out of its menu.

#Where they show

Plugins' items come after notesy's own: above "Move to Trash" in the tree's menus, at the bottom of a tab's and the editor's. A plugin's one item in a menu is a row of its own; two or more go in a submenu under the plugin's name, which opens as the pointer comes to it. Whatever a script added goes when it stops.

Every page