description: APIs to define custom action buttons

tags: meta/api

APIs to more conveniently define action buttons (alternative to setting them via regular ^Library/Std/Config).

API

actionButton.define(spec)

Keys to define:

  • icon: feather icon to use for your button
  • command (optional): command name to invoke when clicked. When set, the command's keyboard shortcut is automatically shown in the tooltip. Replaces run.
  • run (optional): function to invoke once the button is pushed. Use this for custom logic that doesn't map to a single command.
  • description (optional): description of button (appears on hover)
  • priority (optional): determines priority of button (the higher, the earlier in the list)
  • mobile: when set to true this button will only appear on mobile devices
  • standalone: when set to true this button will only appear in standalone/PWA mode; when false, only in browser mode
  • dropdown (optional): when set to false, the button stays visible outside the dropdown menu on mobile (default: true)

Either command or run should be specified.

Examples

-- Bind a button to a command (keyboard shortcut shown on hover)
actionButton.define {
  icon = "pen-tool",
  description = "Start journaling",
  command = "Journal: Today",
}

-- Custom button with a run function
actionButton.define {
  icon = "eye",
  run = function()
    editor.setUiOption("forcedROMode", true)
    editor.rebuildEditorState()
  end
}

Implementation

-- priority: 100

actionButton = actionButton or {}

function actionButton.define(spec)
  local actionButtonConfig = config.get("actionButtons", {})
  table.insert(actionButtonConfig, spec)
end