xplr/docs/en/src/writing-plugins.md

86 lines
2.4 KiB
Markdown
Raw Normal View History

2021-10-16 03:03:56 +00:00
# Writing Plugins
Anyone who can write [Lua][1] code, can write xplr plugins.
Just follow the instructions and best practices:
2021-10-16 03:03:56 +00:00
## Naming
xplr plugins are named using hiphen (`-`) separated words that may also include
integers. They will be plugged using the `require()` function in Lua.
2021-10-16 03:03:56 +00:00
## Structure
A minimal plugin should confirm to the following structure:
```
2021-06-28 09:35:48 +00:00
plugin-name
├── README.md
2022-01-19 11:00:42 +00:00
└── init.lua
```
You can also use
[this template][2].
### README.md
This is where you document what the plugin does, how to use it, etc.
2022-01-19 11:00:42 +00:00
### init.lua
This file is executed to load the plugin. It should expose a `setup()`
function, which will be used by the users to setup the plugin.
Example:
```lua
local function setup(args)
local xplr = xplr
-- do stuff with xplr
end
return { setup = setup }
```
2021-10-16 03:03:56 +00:00
## Publishing
2021-06-24 05:09:30 +00:00
When publishing plugins on GitHub or other repositories, it's a best practice
to append `.xplr` to the name to make them distinguishable. Similar to the
`*.nvim` naming convention for [Neovim][3] plugins.
Finally, after publishing, don't hesitate to
[let us know][4].
2021-10-16 03:03:56 +00:00
## Examples
Visit [Awesome Plugins][5] for xplr plugin examples.
2021-10-16 03:03:56 +00:00
## Also See
2021-10-30 02:22:42 +00:00
- [Tip: A list of hacks yet to make it as Lua plugins][15]
- [Tip: Some UI and themeing tips][12]
- [Tip: A list of handy utility functions][13]
- [Tip: Share tips and tricks working with Lua][14]
2021-08-27 03:28:38 +00:00
- [Tutorial: Adding a New Mode][6]
- [Example: Using Environment Variables and Pipes][7]
- [Example: Using Lua Function Calls][8]
- [Example: Defining Custom Layout][9]
- [Example: Customizing Table Renderer][10]
- [Example: Render a custom dynamic table][11]
2021-10-16 03:03:56 +00:00
[1]: https://www.lua.org
[2]: https://github.com/sayanarijit/plugin-template1.xplr
[3]: https://neovim.io
[4]: https://github.com/sayanarijit/xplr/discussions/categories/show-and-tell
[5]: awesome-plugins.md
[6]: configure-key-bindings.md#tutorial-adding-a-new-mode
2021-10-16 03:03:56 +00:00
[7]: message.md#example-using-environment-variables-and-pipes
[8]: message.md#example-using-lua-function-calls
[9]: layouts.md#example-defining-custom-layout
[10]: column-renderer.md#example-customizing-table-renderer
[11]: layouts.md#example-render-a-custom-dynamic-table
2021-10-30 02:22:42 +00:00
[12]: https://github.com/sayanarijit/xplr/discussions/274
[13]: https://github.com/sayanarijit/xplr/discussions/273
[14]: https://github.com/sayanarijit/xplr/discussions/250
[15]: https://github.com/sayanarijit/xplr/wiki/Hacks