Minor fixes and format docs

pull/359/head
Arijit Basu 3 years ago
parent 413430d5f8
commit 947cfeb327
No known key found for this signature in database
GPG Key ID: 0F8EF5258DC38077

@ -1,5 +1,4 @@
A hackable, minimal, fast TUI file explorer # A hackable, minimal, fast TUI file explorer
===========================================
- [Introduction][1] - [Introduction][1]
- [Quickstart][2] - [Quickstart][2]
@ -28,30 +27,29 @@ A hackable, minimal, fast TUI file explorer
- [Community][24] - [Community][24]
- [Contribute][25] - [Contribute][25]
[1]: introduction.md
[1]:introduction.md [2]: quickstart.md
[2]:quickstart.md [3]: install.md
[3]:install.md [4]: post-install.md
[4]:post-install.md [5]: configuration.md
[5]:configuration.md [6]: general-config.md
[6]:general-config.md [7]: modes.md
[7]:modes.md [8]: message.md
[8]:message.md [9]: layouts.md
[9]:layouts.md [10]: node_types.md
[10]:node_types.md [11]: style.md
[11]:style.md [12]: sorting.md
[12]:sorting.md [13]: filtering.md
[13]:filtering.md [14]: default-key-bindings.md
[14]:default-key-bindings.md [15]: plugin.md
[15]:plugin.md [16]: installing-plugins.md
[16]:installing-plugins.md [17]: writing-plugins.md
[17]:writing-plugins.md [18]: awesome-plugins.md
[18]:awesome-plugins.md [19]: integration.md
[19]:integration.md [20]: awesome-integrations.md
[20]:awesome-integrations.md [21]: todo.md
[21]:todo.md [22]: alternatives.md
[22]:alternatives.md [23]: upgrade-guide.md
[23]:upgrade-guide.md [24]: community.md
[24]:community.md [25]: contribute.md
[25]:contribute.md [26]: column-renderer.md
[26]:column-renderer.md

@ -1,5 +1,4 @@
Alternatives # Alternatives
============
These are the alternative TUI/CLI file managers/explorers you might want to check out (in no particular order). These are the alternative TUI/CLI file managers/explorers you might want to check out (in no particular order).
@ -18,17 +17,16 @@ These are the alternative TUI/CLI file managers/explorers you might want to chec
[add more][13] [add more][13]
[1]: https://github.com/jarun/nnn/
[1]:https://github.com/jarun/nnn/ [2]: https://github.com/vifm/vifm
[2]:https://github.com/vifm/vifm [3]: https://github.com/ranger/ranger
[3]:https://github.com/ranger/ranger [4]: https://github.com/gokcehan/lf
[4]:https://github.com/gokcehan/lf [5]: https://github.com/kamiyaa/joshuto
[5]:https://github.com/kamiyaa/joshuto [6]: https://github.com/dylanaraps/fff
[6]:https://github.com/dylanaraps/fff [7]: https://github.com/MidnightCommander/mc
[7]:https://github.com/MidnightCommander/mc [8]: https://github.com/Canop/broot
[8]:https://github.com/Canop/broot [9]: https://github.com/rabite0/hunter
[9]:https://github.com/rabite0/hunter [10]: https://git.2f30.org/noice/
[10]:https://git.2f30.org/noice/ [11]: https://github.com/pasqu4le/clifm
[11]:https://github.com/pasqu4le/clifm [12]: https://github.com/leo-arch/clifm
[12]:https://github.com/leo-arch/clifm [13]: community.md
[13]:community.md

@ -1,46 +1,36 @@
Awesome Integrations # Awesome Integrations
====================
Here's a list of awesome xplr integrations that you might want to check out. Here's a list of awesome xplr integrations that you might want to check out.
If none of the following integrations work for you, you can create your own and If none of the following integrations work for you, you can create your own and
[let us know][1]. [let us know][1].
## Categories
Categories
----------
- [Editor][2] - [Editor][2]
- [Shell][3] - [Shell][3]
- [Security Tools][4] - [Security Tools][4]
## Editor
Editor
------
- [**vim-floaterm**][6] xplr integrated in vim-floaterm (Neo)vim plugin. - [**vim-floaterm**][6] xplr integrated in vim-floaterm (Neo)vim plugin.
- [**xplr.nvim**][9] Opens xplr inside nvim, and hosts a msgpack client inside xplr. - [**xplr.nvim**][9] Opens xplr inside nvim, and hosts a msgpack client inside xplr.
- [**xplr.vim**][5] Pick files in Vim using xplr. - [**xplr.vim**][5] Pick files in Vim using xplr.
## Shell
Shell
-----
- [**powerlevel10k**][7] Powerlevel10k prompt for xplr shell. - [**powerlevel10k**][7] Powerlevel10k prompt for xplr shell.
## Security Tools
Security Tools
--------------
- [**gpg-tui**][8] Import GPG certificates using xplr. - [**gpg-tui**][8] Import GPG certificates using xplr.
[1]: https://github.com/sayanarijit/xplr/discussions/categories/show-and-tell
[1]:https://github.com/sayanarijit/xplr/discussions/categories/show-and-tell [2]: #editor
[2]:#editor [3]: #shell
[3]:#shell [4]: #security-tools
[4]:#security-tools [5]: https://github.com/sayanarijit/xplr.vim
[5]:https://github.com/sayanarijit/xplr.vim [6]: https://github.com/voldikss/vim-floaterm#xplr
[6]:https://github.com/voldikss/vim-floaterm#xplr [7]: https://github.com/romkatv/powerlevel10k/blob/191d1b89e325ee3b6d2d75a394654aaf4f077a7c/internal/p10k.zsh#L4756-L4768
[7]:https://github.com/romkatv/powerlevel10k/blob/191d1b89e325ee3b6d2d75a394654aaf4f077a7c/internal/p10k.zsh#L4756-L4768 [8]: https://github.com/orhun/gpg-tui#importreceive
[8]:https://github.com/orhun/gpg-tui#importreceive [9]: https://github.com/fhill2/xplr.nvim
[9]:https://github.com/fhill2/xplr.nvim

@ -1,21 +1,16 @@
Awesome Plugins # Awesome Plugins
===============
Here's a list of awesome xplr plugins that you might want to check out. If none Here's a list of awesome xplr plugins that you might want to check out. If none
of the following plugins work for you, it's very easy to of the following plugins work for you, it's very easy to
[write your own][1]. [write your own][1].
## Categories
Categories
----------
- [Extension][32] - [Extension][32]
- [Integration][2] - [Integration][2]
- [Theme][3] - [Theme][3]
## Extension
Extension
---------
- [**comex.xplr**][21] One xplr plugin to compress and extract them all. - [**comex.xplr**][21] One xplr plugin to compress and extract them all.
- [**command-mode.xplr**][37] The missing command mode for xplr. - [**command-mode.xplr**][37] The missing command mode for xplr.
@ -23,9 +18,7 @@ Extension
- [**type-to-nav.xplr**][28] Inspired by [nnn's type-to-nav mode][29] for xplr, - [**type-to-nav.xplr**][28] Inspired by [nnn's type-to-nav mode][29] for xplr,
with some tweaks. with some tweaks.
## Integration
Integration
-----------
- [**alacritty.xplr**][33] [Alacritty][34] integration for xplr. - [**alacritty.xplr**][33] [Alacritty][34] integration for xplr.
- [**dragon.xplr**][4] Drag and drop files using [dragon][5]. - [**dragon.xplr**][4] Drag and drop files using [dragon][5].
@ -46,51 +39,48 @@ Integration
- [**xclip.xplr**][15] Copy and paste with system clipboard using [xclip][16]. - [**xclip.xplr**][15] Copy and paste with system clipboard using [xclip][16].
- [**zoxide.xplr**][17] Change directory using the [zoxide][18] database. - [**zoxide.xplr**][17] Change directory using the [zoxide][18] database.
## Theme
Theme
-----
- [**material-landscape.xplr**][19] Material Landscape - [**material-landscape.xplr**][19] Material Landscape
- [**material-landscape2.xplr**][20] Material Landscape 2 - [**material-landscape2.xplr**][20] Material Landscape 2
- [**zentable.xplr**][31] A clean, distraction free xplr table UI - [**zentable.xplr**][31] A clean, distraction free xplr table UI
- [**icons.xplr**][30] An icon theme for xplr. - [**icons.xplr**][30] An icon theme for xplr.
[1]: ./writing-plugins.md
[1]:./writing-plugins.md [2]: #integration
[2]:#integration [3]: #theme
[3]:#theme [4]: https://github.com/sayanarijit/dragon.xplr
[4]:https://github.com/sayanarijit/dragon.xplr [5]: https://github.com/mwh/dragon
[5]:https://github.com/mwh/dragon [6]: https://github.com/sayanarijit/dua-cli.xplr
[6]:https://github.com/sayanarijit/dua-cli.xplr [7]: https://github.com/Byron/dua-cli
[7]:https://github.com/Byron/dua-cli [8]: https://github.com/sayanarijit/fzf.xplr
[8]:https://github.com/sayanarijit/fzf.xplr [9]: https://github.com/junegunn/fzf
[9]:https://github.com/junegunn/fzf [10]: https://github.com/sayanarijit/preview-tabbed.xplr
[10]:https://github.com/sayanarijit/preview-tabbed.xplr [11]: https://tools.suckless.org/tabbed/
[11]:https://tools.suckless.org/tabbed/ [12]: https://github.com/jarun/nnn/blob/master/plugins/preview-tabbed
[12]:https://github.com/jarun/nnn/blob/master/plugins/preview-tabbed [13]: https://github.com/sayanarijit/trash-cli.xplr
[13]:https://github.com/sayanarijit/trash-cli.xplr [14]: https://github.com/andreafrancia/trash-cli
[14]:https://github.com/andreafrancia/trash-cli [15]: https://github.com/sayanarijit/xclip.xplr
[15]:https://github.com/sayanarijit/xclip.xplr [16]: https://github.com/astrand/xclip
[16]:https://github.com/astrand/xclip [17]: https://github.com/sayanarijit/zoxide.xplr
[17]:https://github.com/sayanarijit/zoxide.xplr [18]: https://github.com/ajeetdsouza/zoxide
[18]:https://github.com/ajeetdsouza/zoxide [19]: https://github.com/sayanarijit/material-landscape.xplr
[19]:https://github.com/sayanarijit/material-landscape.xplr [20]: https://github.com/sayanarijit/material-landscape2.xplr
[20]:https://github.com/sayanarijit/material-landscape2.xplr [21]: https://github.com/sayanarijit/comex.xplr
[21]:https://github.com/sayanarijit/comex.xplr [22]: https://github.com/sayanarijit/xargs.xplr
[22]:https://github.com/sayanarijit/xargs.xplr [23]: https://github.com/dtomvan/paste-rs.xplr
[23]:https://github.com/dtomvan/paste-rs.xplr [24]: https://paste.rs
[24]:https://paste.rs [25]: https://github.com/sayanarijit/completion.xplr
[25]:https://github.com/sayanarijit/completion.xplr [26]: https://github.com/sayanarijit/qrcp.xplr
[26]:https://github.com/sayanarijit/qrcp.xplr [27]: https://github.com/claudiodangelis/qrcp
[27]:https://github.com/claudiodangelis/qrcp [28]: https://github.com/prncss-xyz/type-to-nav.xplr
[28]:https://github.com/prncss-xyz/type-to-nav.xplr [29]: https://github.com/jarun/nnn/wiki/concepts#type-to-nav
[29]:https://github.com/jarun/nnn/wiki/concepts#type-to-nav [30]: https://github.com/prncss-xyz/icons.xplr
[30]:https://github.com/prncss-xyz/icons.xplr [31]: https://github.com/sayanarijit/zentable.xplr
[31]:https://github.com/sayanarijit/zentable.xplr [32]: #extension
[32]:#extension [33]: https://github.com/sayanarijit/alacritty.xplr
[33]:https://github.com/sayanarijit/alacritty.xplr [34]: https://github.com/alacritty/alacritty
[34]:https://github.com/alacritty/alacritty [35]: https://github.com/sayanarijit/nvim-ctrl.xplr
[35]:https://github.com/sayanarijit/nvim-ctrl.xplr [36]: https://github.com/chmln/nvim-ctrl
[36]:https://github.com/chmln/nvim-ctrl [37]: https://github.com/sayanarijit/command-mode.xplr
[37]:https://github.com/sayanarijit/command-mode.xplr [38]: https://github.com/sayanarijit/map.xplr
[38]:https://github.com/sayanarijit/map.xplr

@ -1,5 +1,4 @@
Column Renderer # Column Renderer
==============
A column renderer is a Lua function that receives a [special argument][1] and A column renderer is a Lua function that receives a [special argument][1] and
returns a string that will be displayed in each specific field of the returns a string that will be displayed in each specific field of the
@ -18,9 +17,7 @@ You can either overwrite these functions, or create new functions in
Terminal colors are supported. Terminal colors are supported.
## Table Renderer Argument
Table Renderer Argument
-----------------------
The special argument contains the following fields The special argument contains the following fields
@ -75,21 +72,18 @@ Type: string
The extension of the node. The extension of the node.
### is_symlink ### is_symlink
Type: boolean Type: boolean
`true` if the node is a symlink. `true` if the node is a symlink.
### is_broken ### is_broken
Type: boolean Type: boolean
`true` if the node is a broken symlink. `true` if the node is a broken symlink.
### is_dir ### is_dir
Type: boolean Type: boolean
@ -108,7 +102,6 @@ Type: boolean
`true` if the node is real-only. `true` if the node is real-only.
### mime_essence ### mime_essence
Type: string Type: string
@ -216,9 +209,7 @@ Type: mapping of string and string
The applicable [meta object][33] for the node. The applicable [meta object][33] for the node.
## Permission
Permission
----------
Permission contains the following fields: Permission contains the following fields:
@ -237,9 +228,7 @@ Permission contains the following fields:
Each field holds a boolean value. Each field holds a boolean value.
## Resolved Node Metadata
Resolved Node Metadata
----------------------
It contains the following fields. It contains the following fields.
@ -252,9 +241,7 @@ It contains the following fields.
- [size][13] - [size][13]
- [human_size][14] - [human_size][14]
## Example: Customizing Table Renderer
Example: Customizing Table Renderer
-----------------------------------
```lua ```lua
xplr.fn.custom.fmt_simple_column = function(m) xplr.fn.custom.fmt_simple_column = function(m)
@ -277,37 +264,36 @@ xplr.config.general.table.col_widths = {
-- relative paths. -- relative paths.
``` ```
[1]: #table-renderer-argument
[1]:#table-renderer-argument [2]: layouts.md#table
[2]:layouts.md#table [3]: #parent
[3]:#parent [4]: #relative_path
[4]:#relative_path [5]: #absolute_path
[5]:#absolute_path [6]: #extension
[6]:#extension [7]: #is_symlink
[7]:#is_symlink [8]: #is_broken
[8]:#is_broken [9]: #is_dir
[9]:#is_dir [10]: #is_file
[10]:#is_file [11]: #is_readonly
[11]:#is_readonly [12]: #mime_essence
[12]:#mime_essence [13]: #size
[13]:#size [14]: #human_size
[14]:#human_size [15]: #permissions
[15]:#permissions [16]: #canonical
[16]:#canonical [17]: #symlink
[17]:#symlink [18]: #index
[18]:#index [19]: #relative_index
[19]:#relative_index [20]: #is_before_focus
[20]:#is_before_focus [21]: #is_after_focus
[21]:#is_after_focus [22]: #tree
[22]:#tree [23]: #prefix
[23]:#prefix [24]: #suffix
[24]:#suffix [25]: #is_selected
[25]:#is_selected [26]: #is_focused
[26]:#is_focused [27]: #total
[27]:#total [28]: meta
[28]:meta [29]: #size
[29]:#size [30]: #permission
[30]:#permission [31]: #resolved-node-metadata
[31]:#resolved-node-metadata [32]: general-config.md#tabletree
[32]:general-config.md#tabletree [33]: node_types.md#meta
[33]:node_types.md#meta

@ -1,5 +1,4 @@
Community # Community
=========
Building an active community of awesome people and learning stuff together is Building an active community of awesome people and learning stuff together is
one of my reasons to publish this tool and maintain it. Hence, please feel free one of my reasons to publish this tool and maintain it. Hence, please feel free
@ -8,7 +7,6 @@ to reach out via your preferred way.
- Real-time chat lovers can join our [**matrix room**][3] or [**discord channel**][1]. - Real-time chat lovers can join our [**matrix room**][3] or [**discord channel**][1].
- Forum discussion veterans can [**start a new GitHub discussion**][2]. - Forum discussion veterans can [**start a new GitHub discussion**][2].
[1]: https://discord.gg/JmasSPCcz3
[1]:https://discord.gg/JmasSPCcz3 [2]: https://github.com/sayanarijit/xplr/discussions
[2]:https://github.com/sayanarijit/xplr/discussions [3]: https://matrix.to/#/#xplr-pub:matrix.org
[3]:https://matrix.to/#/#xplr-pub:matrix.org

@ -1,5 +1,4 @@
Configuration # Configuration
=============
xplr can be configured using [Lua][1] via a special file xplr can be configured using [Lua][1] via a special file
named `init.lua` named `init.lua`
@ -15,9 +14,7 @@ the command-line argument `-c` / `--config` to specify its path explicitely. In
that case, both `~/.config/xplr/init.lua` and `/etc/xplr/init.lua` will be that case, both `~/.config/xplr/init.lua` and `/etc/xplr/init.lua` will be
ignored. ignored.
## How Config Is Loaded
How Config Is Loaded
--------------------
When xplr loads, it first executes the built-in When xplr loads, it first executes the built-in
[init.lua][2] to set [init.lua][2] to set
@ -26,9 +23,7 @@ using the following lookup order:
**--config /path/to/init.lua** > **~/.config/xplr/init.lua** > **/etc/xplr/init.lua** **--config /path/to/init.lua** > **~/.config/xplr/init.lua** > **/etc/xplr/init.lua**
## config
config
------
The xplr configuration, exposed as `xplr.config` Lua API contains the The xplr configuration, exposed as `xplr.config` Lua API contains the
following fields: following fields:
@ -38,10 +33,9 @@ following fields:
- [layouts][5] - [layouts][5]
- [node_types][6] - [node_types][6]
[1]: https://www.lua.org/
[1]:https://www.lua.org/ [2]: https://github.com/sayanarijit/xplr/blob/main/src/init.lua
[2]:https://github.com/sayanarijit/xplr/blob/main/src/init.lua [3]: general-config.md
[3]:general-config.md [4]: modes.md
[4]:modes.md [5]: layouts.md
[5]:layouts.md [6]: node_types.md
[6]:node_types.md

@ -3,12 +3,12 @@ If you like xplr, and want to contribute, that would be really awesome.
You can contribute to this project in the following ways You can contribute to this project in the following ways
- Contribute your time and expertise (read [CONTRIBUTING.md][1] for instructions). - Contribute your time and expertise (read [CONTRIBUTING.md][1] for instructions).
- **Developers:** You can help me improve my code, fix things, implement features etc. - **Developers:** You can help me improve my code, fix things, implement features etc.
- **Repository maintainers:** You can save the users from the pain of managing xplr in their system manually. - **Repository maintainers:** You can save the users from the pain of managing xplr in their system manually.
- **Code Reviewers:** Teach me your ways of code. - **Code Reviewers:** Teach me your ways of code.
- **Designers:** You can make the logo even more awesome, donate stickers and blog post worthy pictures. - **Designers:** You can make the logo even more awesome, donate stickers and blog post worthy pictures.
- **Bloggers, YouTubers & broadcasters:** You can help spread the word. - **Bloggers, YouTubers & broadcasters:** You can help spread the word.
- Contribute by donating. - Contribute by donating.
- You can [fuel me with coins of encouragement][2] or [buy me a coffee][3]. - You can [fuel me with coins of encouragement][2] or [buy me a coffee][3].
@ -16,10 +16,10 @@ You can contribute to this project in the following ways
For further queries or concern related to `xplr`, [just ask us][4]. For further queries or concern related to `xplr`, [just ask us][4].
### Backers ### Backers
<a href="https://opencollective.com/xplr#backer"><img src="https://opencollective.com/xplr/tiers/backer.svg?width=890" /></a>
<a href="https://opencollective.com/xplr#backer"><img src="https://opencollective.com/xplr/tiers/backer.svg?width=890" /></a>
[1]:https://github.com/sayanarijit/xplr/blob/main/CONTRIBUTING.md [1]: https://github.com/sayanarijit/xplr/blob/main/CONTRIBUTING.md
[2]:https://opencollective.com/xplr [2]: https://opencollective.com/xplr
[3]:https://ko-fi.com/sayanarijit [3]: https://ko-fi.com/sayanarijit
[4]:community.md [4]: community.md

@ -1,5 +1,4 @@
Default Key Bindings # Default Key Bindings
====================
The default key binding is inspired by [vim][1] and slightly The default key binding is inspired by [vim][1] and slightly
overlaps with [nnn][2], but it's supposed to be overlaps with [nnn][2], but it's supposed to be
@ -8,257 +7,238 @@ customized as per user requirements.
When you press `?` in [default mode][3], you can see the complete list When you press `?` in [default mode][3], you can see the complete list
of [modes][4] and the key mappings for each mode. of [modes][4] and the key mappings for each mode.
### default ### default
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | ------ | ------ | ------------------- |
. | | show hidden | . | | show hidden |
/ | ctrl-f | search | / | ctrl-f | search |
: | | action | : | | action |
? | | global help menu | ? | | global help menu |
G | | go to bottom | G | | go to bottom |
V | ctrl-a | select/unselect all | V | ctrl-a | select/unselect all |
ctrl-c | | terminate | ctrl-c | | terminate |
ctrl-i | tab | next visited path | ctrl-i | tab | next visited path |
ctrl-o | | last visited path | ctrl-o | | last visited path |
ctrl-r | | refresh screen | ctrl-r | | refresh screen |
ctrl-u | | clear selection | ctrl-u | | clear selection |
ctrl-w | | switch layout | ctrl-w | | switch layout |
d | | delete | d | | delete |
down | j | down | down | j | down |
enter | | quit with result | enter | | quit with result |
f | | filter | f | | filter |
g | | go to | g | | go to |
h | left | back | h | left | back |
k | up | up | k | up | up |
l | right | enter | l | right | enter |
q | | quit | q | | quit |
r | | rename | r | | rename |
s | | sort | s | | sort |
space | v | toggle selection | space | v | toggle selection |
~ | | go home | ~ | | go home |
[0-9] | | input | [0-9] | | input |
### recover ### recover
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | ------ | ------ | --------- |
ctrl-c | | terminate | ctrl-c | | terminate |
esc | | escape | esc | | escape |
### filter ### filter
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | --------- | ------ | ------------------------- |
R | | relative does not contain | R | | relative does not contain |
backspace | | remove last filter | backspace | | remove last filter |
ctrl-c | | terminate | ctrl-c | | terminate |
ctrl-r | | reset filters | ctrl-r | | reset filters |
ctrl-u | | clear filters | ctrl-u | | clear filters |
enter | esc | done | enter | esc | done |
r | | relative does contain | r | | relative does contain |
### number ### number
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | --------- | ------ | --------------------- |
backspace | | remove last character | backspace | | remove last character |
ctrl-c | | terminate | ctrl-c | | terminate |
ctrl-u | | remove line | ctrl-u | | remove line |
ctrl-w | | remove last word | ctrl-w | | remove last word |
down | j | to down | down | j | to down |
enter | | to index | enter | | to index |
esc | | cancel | esc | | cancel |
k | up | to up | k | up | to up |
[0-9] | | input | [0-9] | | input |
### go to ### go to
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | ------ | ------ | -------------- |
ctrl-c | | terminate | ctrl-c | | terminate |
esc | | cancel | esc | | cancel |
f | | follow symlink | f | | follow symlink |
g | | top | g | | top |
x | | open in gui | x | | open in gui |
### search ### search
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | --------- | ------ | --------------------- |
backspace | | remove last character | backspace | | remove last character |
ctrl-c | | terminate | ctrl-c | | terminate |
ctrl-n | down | down | ctrl-n | down | down |
ctrl-p | up | up | ctrl-p | up | up |
ctrl-u | | remove line | ctrl-u | | remove line |
ctrl-w | | remove last word | ctrl-w | | remove last word |
enter | esc | focus | enter | esc | focus |
left | | back | left | | back |
right | | enter | right | | enter |
tab | | toggle selection | tab | | toggle selection |
### selection ops ### selection ops
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | ------ | ------ | ----------- |
c | | copy here | c | | copy here |
ctrl-c | | terminate | ctrl-c | | terminate |
esc | | cancel | esc | | cancel |
m | | move here | m | | move here |
x | | open in gui | x | | open in gui |
### action to ### action to
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | ------ | ------ | -------------------- |
! | | shell | ! | | shell |
c | | create | c | | create |
ctrl-c | | terminate | ctrl-c | | terminate |
e | | open in editor | e | | open in editor |
esc | | cancel | esc | | cancel |
l | | logs | l | | logs |
m | | toggle mouse | m | | toggle mouse |
q | | quit options | q | | quit options |
s | | selection operations | s | | selection operations |
[0-9] | | go to index | [0-9] | | go to index |
### create ### create
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | ------ | ------ | ---------------- |
ctrl-c | | terminate | ctrl-c | | terminate |
d | | create directory | d | | create directory |
esc | | cancel | esc | | cancel |
f | | create file | f | | create file |
### create file ### create file
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | --------- | ------ | --------------------- |
backspace | | remove last character | backspace | | remove last character |
ctrl-c | | terminate | ctrl-c | | terminate |
ctrl-u | | remove line | ctrl-u | | remove line |
ctrl-w | | remove last word | ctrl-w | | remove last word |
enter | | create file | enter | | create file |
esc | | cancel | esc | | cancel |
### create directory ### create directory
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | --------- | ------ | --------------------- |
backspace | | remove last character | backspace | | remove last character |
ctrl-c | | terminate | ctrl-c | | terminate |
ctrl-u | | remove line | ctrl-u | | remove line |
ctrl-w | | remove last word | ctrl-w | | remove last word |
enter | | create directory | enter | | create directory |
esc | | cancel | esc | | cancel |
### rename ### rename
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | --------- | ------ | --------------------- |
backspace | | remove last character | backspace | | remove last character |
ctrl-c | | terminate | ctrl-c | | terminate |
ctrl-u | | remove line | ctrl-u | | remove line |
ctrl-w | | remove last word | ctrl-w | | remove last word |
enter | | rename | enter | | rename |
esc | | cancel | esc | | cancel |
### delete ### delete
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | ------ | ------ | ------------ |
D | | force delete | D | | force delete |
ctrl-c | | terminate | ctrl-c | | terminate |
d | | delete | d | | delete |
esc | | cancel | esc | | cancel |
### sort ### sort
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | --------- | ------ | --------------------------------- |
! | | reverse sorters | ! | | reverse sorters |
E | | by canonical extension reverse | E | | by canonical extension reverse |
M | | by canonical mime essence reverse | M | | by canonical mime essence reverse |
N | | by node type reverse | N | | by node type reverse |
R | | by relative path reverse | R | | by relative path reverse |
S | | by size reverse | S | | by size reverse |
backspace | | remove last sorter | backspace | | remove last sorter |
ctrl-c | | terminate | ctrl-c | | terminate |
ctrl-r | | reset sorters | ctrl-r | | reset sorters |
ctrl-u | | clear sorters | ctrl-u | | clear sorters |
e | | by canonical extension | e | | by canonical extension |
enter | esc | done | enter | esc | done |
m | | by canonical mime essence | m | | by canonical mime essence |
n | | by node type | n | | by node type |
r | | by relative path | r | | by relative path |
s | | by size | s | | by size |
### filter ### filter
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | --------- | ------ | ------------------------- |
R | | relative does not contain | R | | relative does not contain |
backspace | | remove last filter | backspace | | remove last filter |
ctrl-c | | terminate | ctrl-c | | terminate |
ctrl-r | | reset filters | ctrl-r | | reset filters |
ctrl-u | | clear filters | ctrl-u | | clear filters |
enter | esc | done | enter | esc | done |
r | | relative does contain | r | | relative does contain |
### relative path does contain ### relative path does contain
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | --------- | ------ | --------------------- |
backspace | | remove last character | backspace | | remove last character |
ctrl-c | | terminate | ctrl-c | | terminate |
ctrl-u | | remove line | ctrl-u | | remove line |
ctrl-w | | remove last word | ctrl-w | | remove last word |
enter | | apply filter | enter | | apply filter |
esc | | cancel | esc | | cancel |
### relative path does not contain ### relative path does not contain
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | --------- | ------ | --------------------- |
backspace | | remove last character | backspace | | remove last character |
ctrl-c | | terminate | ctrl-c | | terminate |
ctrl-u | | remove line | ctrl-u | | remove line |
ctrl-w | | remove last word | ctrl-w | | remove last word |
enter | | apply filter | enter | | apply filter |
esc | | cancel | esc | | cancel |
### switch layout ### switch layout
key | remaps | action | key | remaps | action |
--------------- | ------------------------- | ------ | ------ | ------ | -------------------- |
1 | | default | 1 | | default |
2 | | no help menu | 2 | | no help menu |
3 | | no selection panel | 3 | | no selection panel |
4 | | no help or selection | 4 | | no help or selection |
ctrl-c | | terminate | ctrl-c | | terminate |
esc | | cancel | esc | | cancel |
[1]: https://www.vim.org/
[1]:https://www.vim.org/ [2]: https://github.com/jarun/nnn/
[2]:https://github.com/jarun/nnn/ [3]: #default
[3]:#default [4]: modes.md
[4]:modes.md

@ -1,5 +1,4 @@
Filtering # Filtering
=========
xplr supports filtering paths by different properties. The filtering mechanism xplr supports filtering paths by different properties. The filtering mechanism
works like a pipeline, which in visible in the `Sort & filter` panel. works like a pipeline, which in visible in the `Sort & filter` panel.
@ -11,15 +10,13 @@ rel!^. [i]abs=~abc [i]rel!~xyz
``` ```
This line means that the nodes visible on the table will first be filtered by This line means that the nodes visible on the table will first be filtered by
the condition: *relative path does not start with `.`*, then by the condition: the condition: _relative path does not start with `.`_, then by the condition:
*absolute path contains `abc` (case insensitive)*, and finally by the _absolute path contains `abc` (case insensitive)_, and finally by the
condition: *relative path does not contain `xyz`* (case insensitive). condition: _relative path does not contain `xyz`_ (case insensitive).
Each part of this pipeline is called [Node Filter Applicable][1]. Each part of this pipeline is called [Node Filter Applicable][1].
## Node Filter Applicable
Node Filter Applicable
----------------------
It contains the following information: It contains the following information:
@ -63,7 +60,6 @@ A filter can be one of the following:
- "IAbsolutePathDoesEndWith" - "IAbsolutePathDoesEndWith"
- "IAbsolutePathDoesNotEndWith" - "IAbsolutePathDoesNotEndWith"
TODO: document each TODO: document each
### input ### input
@ -72,9 +68,7 @@ Type: string
The input for the condition. The input for the condition.
## Example:
Example:
--------
```lua ```lua
ToggleNodeFilter = { ToggleNodeFilter = {
@ -86,8 +80,7 @@ ToggleNodeFilter = {
Here, `ToggleNodeFilter` is a [message][4] that adds or removes Here, `ToggleNodeFilter` is a [message][4] that adds or removes
(toggles) the filter applied. (toggles) the filter applied.
[1]: #node-filter-applicable
[1]:#node-filter-applicable [2]: #filter
[2]:#filter [3]: #input
[3]:#input [4]: message.md
[4]:message.md

@ -1,152 +1,117 @@
General Config # General Config
==============
This configuration is exposed via the `xplr.config.general` API. It contains This configuration is exposed via the `xplr.config.general` API. It contains
the following fields: the following fields:
## enable_mouse
enable_mouse
------------
Type: boolean Type: boolean
Set it to `true` enable scrolling using mouse. Set it to `true` enable scrolling using mouse.
## show_hidden
show_hidden
-----------
Type: boolean Type: boolean
Set it to `true` to show hidden files. Set it to `true` to show hidden files.
## read_only
read_only
---------
Type: boolean Type: boolean
Set it to `true` to use only a subset of selected operations that forbids Set it to `true` to use only a subset of selected operations that forbids
executing commands or performing write operations on the file-system. executing commands or performing write operations on the file-system.
## enable_recover_mode
enable_recover_mode
--------------------
Type: boolean Type: boolean
Set it to `true` if you want to enable a safety feature that will save you from Set it to `true` if you want to enable a safety feature that will save you from
yourself when you type recklessly. yourself when you type recklessly.
## cursor.format
cursor.format
-------------
Type: nullable string Type: nullable string
This is the shape of the cursor visible when the input buffer contains some string. This is the shape of the cursor visible when the input buffer contains some
string.
## cursor.style
cursor.style
------------
Type: [Style][1] Type: [Style][1]
Style of the cursor. Style of the cursor.
## initial_layout
initial_layout
--------------
Type: string Type: string
The name of one of the [layout][2] to use when xplr loads. The name of one of the [layout][2] to use when xplr loads.
## initial_mode
initial_mode
------------
Type: string Type: string
The name of one of the [mode][3] to use when xplr loads. The name of one of the [mode][3] to use when xplr loads.
## initial_sorting
initial_sorting
---------------
Type: list of [Node Sorter Applicable][4] Type: list of [Node Sorter Applicable][4]
Initial group if sorters applied to the nodes list in the table. Initial group if sorters applied to the nodes list in the table.
## table.style
table.style
-----------
Type: [Style][1] Type: [Style][1]
Default style of the table. Default style of the table.
## table.col_spacing
table.col_spacing
-----------------
Type: nullable integer Type: nullable integer
Default spacing of the columns in the table. Default spacing of the columns in the table.
## table.col_widths
table.col_widths
----------------
Type: nullable list of [Constraint][5] Type: nullable list of [Constraint][5]
Width of each column in the table. Width of each column in the table.
table.header.height ## table.header.height
----------------
Type: nullable integer Type: nullable integer
Height of the table header. Height of the table header.
## table.header.style
table.header.style
---------------
Type: [Style][1] Type: [Style][1]
Style of table header. Style of table header.
## table.header.cols
table.header.cols Type: list of column configuration
-----------------
Type: List of column configuration
Each column config contains `format` field (string) and `style` field Each column config contains `format` field (string) and `style` field
([Style][1]), that define the content and style of header. ([Style][1]), that define the content and style of header.
## table.row.height
table.row.height
----------------
Type: nullable integer Type: nullable integer
Height of each row in the table. Height of each row in the table.
## table.row.style
table.row.style
---------------
Type: [Style][1] Type: [Style][1]
Style of table rows. Style of table rows.
## table.row.cols
table.row.cols Type: list of column configuration
-----------------
Type: List of column configuration
Each column config contains `format` field (string) and `style` field Each column config contains `format` field (string) and `style` field
([Style][1]). ([Style][1]).
@ -154,11 +119,9 @@ Each column config contains `format` field (string) and `style` field
However, unlike [table.header.cols][6], the `format` field here However, unlike [table.header.cols][6], the `format` field here
points to a [column renderer function][7]. points to a [column renderer function][7].
## table.tree
table.tree Type: list of tree configuration
-----------------
Type: List of tree configuration
It expects a list of three items. The first component of the tree, then the It expects a list of three items. The first component of the tree, then the
middle components, and finally the last component of the tree. middle components, and finally the last component of the tree.
@ -176,298 +139,238 @@ xplr.config.general.table.tree = {
} }
``` ```
## start_fifo
start_fifo
----------
Type: nullable string Type: nullable string
[Description](https://docs.rs/xplr/0.15.0/xplr/config/struct.GeneralConfig.html#structfield.start_fifo) Start a FIFO file when xplr loads. It will track the absolute path of the file
under focus.
## prompt.format
prompt.format
-------------
Type: string Type: string
This is the shape of the prompt for the input buffer. This is the shape of the prompt for the input buffer.
## prompt.style
prompt.style
--------------------------
Type: [Style][1] Type: [Style][1]
Style of the input prompt. Style of the input prompt.
## logs.error.format
logs.error.format
-----------------
Type: string Type: string
The string to indicate an error in logs. The string to indicate an error in logs.
## logs.error.style
logs.error.style
----------------
Type: [Style][1] Type: [Style][1]
Style for errors shown in logs. Style for errors shown in logs.
## logs.info.format
logs.info.format
----------------
Type: string Type: string
The string to indicate an information in logs. The string to indicate an information in logs.
## logs.info.style
logs.info.style
---------------
Type: [Style][1] Type: [Style][1]
Style for infos shown in logs. Style for infos shown in logs.
## logs.success.format
logs.success.format
-------------------
Type: string Type: string
The string to indicate a successful operation in logs. The string to indicate a successful operation in logs.
## logs.success.style
logs.success.style
------------------
Type: [Style][1] Type: [Style][1]
Style for successful operations in logs. Style for successful operations in logs.
## logs.warning.format
logs.warning.format
-------------------
Type: string Type: string
The string that indicates a warning in logs. The string that indicates a warning in logs.
## logs.warning.style
logs.warning.style
------------------
Type: [Style][1] Type: [Style][1]
Style for warnings in logs. Style for warnings in logs.
## default_ui.prefix
default_ui.prefix
-----------------
Type: nullable string Type: nullable string
The content that is placed before the item name for each row. The content that is placed before the item name for each row.
## default_ui.suffix
default_ui.suffix
-----------------
Type: nullable string Type: nullable string
The content which is appended to each item name for each row. The content which is appended to each item name for each row.
## default_ui.style
default_ui.style
----------------
Type: [Style][1] Type: [Style][1]
Style for the default user interface. Style for the default user interface.
## focus_ui.prefix
focus_ui.prefix
---------------
Type: nullable string Type: nullable string
The string placed before the item name for a focused row. The string placed before the item name for a focused row.
## focus_ui.suffix
focus_ui.suffix
---------------
Type: nullable string Type: nullable string
The string placed after the item name for a focused row. The string placed after the item name for a focused row.
## focus_ui.style
focus_ui.style
--------------
Type: [Style][1] Type: [Style][1]
Style for focused elements. Style for focused elements.
## selection_ui.prefix
selection_ui.prefix
-------------------
Type: nullable string Type: nullable string
The string that is placed before the item name for a selected row. The string that is placed before the item name for a selected row.
## selection_ui.suffix
selection_ui.suffix
-------------------
Type: nullable string Type: nullable string
The string placed after the item name for a selected row. The string placed after the item name for a selected row.
## selection_ui.style
selection_ui.style
------------------
Type: [Style][1] Type: [Style][1]
Style for selected rows. Style for selected rows.
## focus_selection_ui.prefix
focus_selection_ui.prefix
-------------------------
Type: nullable string Type: nullable string
The string placed before item name for a selected row that gets the focus. The string placed before item name for a selected row that gets the focus.
## focus_selection_ui.suffix
focus_selection_ui.suffix
-------------------------
Type: nullable string Type: nullable string
The string placed after the item name for a selected row that gets the focus. The string placed after the item name for a selected row that gets the focus.
## focus_selection_ui.style
focus_selection_ui.style
------------------------
Type: [Style][1] Type: [Style][1]
Style for a selected row that gets the focus. Style for a selected row that gets the focus.
## sort_and_filter_ui.separator.format
sort_and_filter_ui.separator.format
-----------------------------------
Type: nullable string Type: nullable string
The shape of the separator for the `Sort & filter` panel. The shape of the separator for the `Sort & filter` panel.
## sort_and_filter_ui.separator.style
sort_and_filter_ui.separator.style
----------------------------------
Type: [Style][1] Type: [Style][1]
Style for `Sort & filter` panel separator. Style for `Sort & filter` panel separator.
sort_and_filter_ui.default_identifier.format ## sort_and_filter_ui.default_identifier.format
--------------------------------------------
Type: nullable string Type: nullable string
The content of the default identifier in `Sort & filter` panel. The content of the default identifier in `Sort & filter` panel.
sort_and_filter_ui.default_identifier.style ## sort_and_filter_ui.default_identifier.style
-------------------------------------------
Type: [Style][1] Type: [Style][1]
Style for the default identifier in `Sort & filter` panel. Style for the default identifier in `Sort & filter` panel.
## sort_and_filter_ui.filter_identifiers
sort_and_filter_ui.filter_identifiers
-------------------------------------
Type: Table with [filter name][8] as key Type: Table with [filter name][8] as key
The value contains format field (string) and style field (Style), that define the content and style for the given filter. The value contains format field (string) and style field (Style), that define
the content and style for the given filter.
Example: Example:
```lua ```lua
xplr.config.general.sort_and_filter_ui.filter_identifiers = { xplr.config.general.sort_and_filter_ui.filter_identifiers.AbsolutePathDoesContain = {
AbsolutePathDoesContain = { format = "abs=~",
format = "abs=~", style = { add_modifiers = { "Bold" }, bg = nil, fg = nil, sub_modifiers = nil },
style = { add_modifiers = { "Bold" }, bg = nil, fg = nil, sub_modifiers = nil },
}
} }
``` ```
## sort_and_filter_ui.sort_direction_identifiers.forward.format
sort_and_filter_ui.sort_direction_identifiers.forward.format
------------------------------------------------------------
Type: nullable string Type: nullable string
The shape of the forward direction indicator for sort identifiers in `Sort & filter` panel. The shape of the forward direction indicator for sort identifiers in
`Sort & filter` panel.
## sort_and_filter_ui.sort_direction_identifiers.forward.style
sort_and_filter_ui.sort_direction_identifiers.forward.style
------------------------------------------------------------
Type: [Style][1] Type: [Style][1]
Style of forward direction indicator. Style of forward direction indicator.
## sort_and_filter_ui.sort_direction_identifiers.reverse.format
sort_and_filter_ui.sort_direction_identifiers.reverse.format
------------------------------------------------------------
Type: nullable string Type: nullable string
The shape of the reverse direction indicator for sort identifiers in `Sort & filter` panel. The shape of the reverse direction indicator for sort identifiers in
`Sort & filter` panel.
## sort_and_filter_ui.sort_direction_identifiers.reverse.style
sort_and_filter_ui.sort_direction_identifiers.reverse.style
-----------------------------------------------------------
Type: [Style][1] Type: [Style][1]
Style of reverse direction indicator. Style of reverse direction indicator.
## sort_and_filter_ui.sorter_identifiers
sort_and_filter_ui.sorter_identifiers
-------------------------------------
Type: Table with [sorter name][9] as key Type: Table with [sorter name][9] as key
The value contains format field (string) and style field (Style), that define the content and style for the given sorter. The value contains format field (string) and style field (Style), that define
the content and style for the given sorter.
Example: Example:
```lua ```lua
sort_and_filter_ui.sorter_identifiers = { sort_and_filter_ui.sorter_identifiers.ByCanonicalAbsolutePath = {
ByCanonicalAbsolutePath = { format = "[c]abs",
format = "[c]abs", style = { add_modifiers = nil, bg = nil, fg = "Yellow", sub_modifiers = nil },
style = { add_modifiers = nil, bg = nil, fg = "Yellow", sub_modifiers = nil }, }
}
}
``` ```
panel_ui.default.borders ## panel_ui.default.borders
------------------------
Type: nullable List of strings Type: nullable list of strings
Defines where to show borders for the panels. Defines where to show borders for the panels.
The possible values are any combination of: "Top", "Bottom", "Left" and "Right". The possible values are any combination of: "Top", "Bottom", "Left" and
"Right".
Example: Example:
```lua ```lua
-- Show Left and Right borders only -- Show Left and Right borders only
xplr.config.general.panel_ui.default.borders = { xplr.config.general.panel_ui.default.borders = {
@ -476,172 +379,138 @@ xplr.config.general.panel_ui.default.borders = {
} }
``` ```
## panel_ui.default.style
panel_ui.default.style
----------------------
Type: [Style][1] Type: [Style][1]
Default style for panels. Default style for panels.
## panel_ui.default.title.format
panel_ui.default.title.format
-----------------------------
Type: nullable string Type: nullable string
The content for panel title. The content for panel title.
## panel_ui.default.title.style
panel_ui.default.title.style
----------------------------
Type: [Style][1] Type: [Style][1]
Style for panel title. Style for panel title.
panel_ui.help_menu.borders ## panel_ui.help_menu.borders
--------------------------
Type: nullable List of strings Type: nullable list of strings
Defines where to show borders for the `Help` panel. Defines where to show borders for the `Help` panel.
The possible values are any combination of: "Top", "Bottom", "Left" and "Right". The possible values are any combination of: "Top", "Bottom", "Left" and
"Right".
panel_ui.help_menu.style ## panel_ui.help_menu.style
------------------------
Type: [Style][1] Type: [Style][1]
Style for `Help` panel. Style for `Help` panel.
## panel_ui.help_menu.title.format
panel_ui.help_menu.title.format
-------------------------------
Type: nullable string Type: nullable string
The content for `Help` panel title. The content for `Help` panel title.
panel_ui.help_menu.title.style ## panel_ui.help_menu.title.style
-------------------------------
Type: [Style][1] Type: [Style][1]
Style for `Help` panel title. Style for `Help` panel title.
## panel_ui.input_and_logs.borders
panel_ui.input_and_logs.borders Type: nullable list of strings
-------------------------------
Type: nullable List of strings
Defines where to show borders for the `Input` & `Logs` panel. Defines where to show borders for the `Input` & `Logs` panel.
The possible values are any combination of: "Top", "Bottom", "Left" and "Right". The possible values are any combination of: "Top", "Bottom", "Left" and
"Right".
## panel_ui.input_and_logs.style
panel_ui.input_and_logs.style
-----------------------------
Type: [Style][1] Type: [Style][1]
Style for `Input` & `Logs` panel. Style for `Input` & `Logs` panel.
## panel_ui.input_and_logs.title.format
panel_ui.input_and_logs.title.format
------------------------------------
Type: nullable string Type: nullable string
The content for the `Input` and `Logs` panel title. The content for the `Input` and `Logs` panel title.
## panel_ui.input_and_logs.title.style
panel_ui.input_and_logs.title.style
-----------------------------------
Type: [Style][1] Type: [Style][1]
Style for `Input` & `Logs` panel title. Style for `Input` & `Logs` panel title.
## panel_ui.selection.borders
panel_ui.selection.borders Type: nullable list of strings
--------------------------
Type: nullable List of strings
Defines where to show borders for the `Selection` panel. Defines where to show borders for the `Selection` panel.
The possible values are any combination of: "Top", "Bottom", "Left" and "Right". The possible values are any combination of: "Top", "Bottom", "Left" and
"Right".
## panel_ui.selection.style
panel_ui.selection.style
------------------------
Type: [Style][1] Type: [Style][1]
Style for `Selection` panel. Style for `Selection` panel.
## panel_ui.selection.title.format
panel_ui.selection.title.format
-------------------------------
Type: nullable string Type: nullable string
The content for `Selection` panel title. The content for `Selection` panel title.
## panel_ui.selection.title.style
panel_ui.selection.title.style
------------------------------
Type: [Style][1] Type: [Style][1]
Style for `Selection` panel title. Style for `Selection` panel title.
## panel_ui.sort_and_filter.borders
panel_ui.sort_and_filter.borders
--------------------------------
Type: nullable list of strings Type: nullable list of strings
Defines where to show borders for the `Sort & filter` panel. Defines where to show borders for the `Sort & filter` panel.
The possible values are any combination of: "Top", "Bottom", "Left" and "Right". The possible values are any combination of: "Top", "Bottom", "Left" and
"Right".
## panel_ui.sort_and_filter.style
panel_ui.sort_and_filter.style
------------------------------
Type: [Style][1] Type: [Style][1]
Style for `Sort & filter` panel. Style for `Sort & filter` panel.
panel_ui.sort_and_filter.title.format ## panel_ui.sort_and_filter.title.format
-------------------------------------
Type: nullable string Type: nullable string
The content for `Sort & filter` panel title. The content for `Sort & filter` panel title.
## panel_ui.sort_and_filter.title.style
panel_ui.sort_and_filter.title.style
------------------------------------
Type: [Style][1] Type: [Style][1]
Style for `Sort & filter` panel title. Style for `Sort & filter` panel title.
[1]: style.md
[2]: layouts.md
[1]:style.md [3]: modes.md
[2]:layouts.md [4]: sorting.md#node-sorter-applicable
[3]:modes.md [5]: layouts.md#constraint
[4]:sorting.md#node-sorter-applicable [6]: #tableheadercols
[5]:layouts.md#constraint [7]: column-renderer.md
[6]:#tableheadercols [8]: filtering.md#filter
[7]:column-renderer.md [9]: sorting.md#sorter
[8]:filtering.md#filter
[9]:sorting.md#sorter

@ -1,5 +1,4 @@
Try in Docker # Try in Docker
=============
If you prefer to try it before installing, here's the snipper for your If you prefer to try it before installing, here's the snipper for your
convenience. convenience.
@ -14,9 +13,7 @@ docker run -w / -it --rm ubuntu sh -uec '
' '
``` ```
# Install
Install
=======
You can install xplr using one of the following ways. Each has their own You can install xplr using one of the following ways. Each has their own
advantages and limitations. advantages and limitations.
@ -30,16 +27,13 @@ available.
One way to keep an eye on the releases is to One way to keep an eye on the releases is to
[watch the repository][4]. [watch the repository][4].
## Community Maintained Repositories
Community Maintained Repositories
---------------------------------
xplr can be installed from one of the following community maintained xplr can be installed from one of the following community maintained
repositories: repositories:
[![packaging status][5]][6] [![packaging status][5]][6]
### Arch Linux ### Arch Linux
#### [Official Community Repo][7] #### [Official Community Repo][7]
@ -127,9 +121,7 @@ cd /usr/pkgsrc/sysutils/xplr
make install make install
``` ```
## Direct Download
Direct Download
---------------
One can directly download the standalone binary from the One can directly download the standalone binary from the
[releases][15]. [releases][15].
@ -154,9 +146,7 @@ tar xzvf xplr-$platform.tar.gz
sudo mv xplr /usr/local/bin/ sudo mv xplr /usr/local/bin/
``` ```
## From [crates.io][18]
From [crates.io][18]
-----------------------------------------------
Prerequisites: Prerequisites:
@ -170,9 +160,7 @@ Command-line instructions:
cargo install --locked --force xplr cargo install --locked --force xplr
``` ```
## Build From Source
Build From Source
-----------------
Prerequisites: Prerequisites:
@ -195,9 +183,7 @@ cargo build --locked --release --bin xplr
sudo cp target/release/xplr /usr/local/bin/ sudo cp target/release/xplr /usr/local/bin/
``` ```
## Android
Android
-------
### [Termux][23] ### [Termux][23]
@ -238,29 +224,28 @@ Android
~/.cargo/bin/xplr ~/.cargo/bin/xplr
``` ```
[1]: #direct-download
[1]:#direct-download [2]: #from-a-hrefhttpscratesiocratesxplrcratesioa
[2]:#from-a-hrefhttpscratesiocratesxplrcratesioa [3]: #build-from-source
[3]:#build-from-source [4]: https://github.com/sayanarijit/xplr/watchers
[4]:https://github.com/sayanarijit/xplr/watchers [5]: https://repology.org/badge/vertical-allrepos/xplr.svg
[5]:https://repology.org/badge/vertical-allrepos/xplr.svg [6]: https://repology.org/project/xplr/versions
[6]:https://repology.org/project/xplr/versions [7]: https://archlinux.org/packages/community/x86_64/xplr
[7]:https://archlinux.org/packages/community/x86_64/xplr [8]: https://aur.archlinux.org/packages/?O=0&SeB=n&K=xplr&outdated=&SB=n&SO=a&PP=50&do_Search=Go
[8]:https://aur.archlinux.org/packages/?O=0&SeB=n&K=xplr&outdated=&SB=n&SO=a&PP=50&do_Search=Go [9]: https://github.com/shubham-cpp/void-pkg-templates
[9]:https://github.com/shubham-cpp/void-pkg-templates [10]: https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/misc/xplr
[10]:https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/misc/xplr [11]: https://ports.macports.org/port/xplr
[11]:https://ports.macports.org/port/xplr [12]: https://formulae.brew.sh/formula/xplr
[12]:https://formulae.brew.sh/formula/xplr [13]: https://cgit.freebsd.org/ports/plain/misc/xplr/
[13]:https://cgit.freebsd.org/ports/plain/misc/xplr/ [14]: https://pkgsrc.se/sysutils/xplr
[14]:https://pkgsrc.se/sysutils/xplr [15]: https://github.com/sayanarijit/xplr/releases
[15]:https://github.com/sayanarijit/xplr/releases [16]: https://github.com/sayanarijit/xplr/releases/latest/download/xplr-linux.tar.gz
[16]:https://github.com/sayanarijit/xplr/releases/latest/download/xplr-linux.tar.gz [17]: https://github.com/sayanarijit/xplr/releases/latest/download/xplr-macos.tar.gz
[17]:https://github.com/sayanarijit/xplr/releases/latest/download/xplr-macos.tar.gz [18]: https://crates.io/crates/xplr
[18]:https://crates.io/crates/xplr [19]: https://www.rust-lang.org/tools/install
[19]:https://www.rust-lang.org/tools/install [20]: https://gcc.gnu.org/
[20]:https://gcc.gnu.org/ [21]: https://www.gnu.org/software/make/
[21]:https://www.gnu.org/software/make/ [22]: https://git-scm.com/
[22]:https://git-scm.com/ [23]: https://termux.com/
[23]:https://termux.com/ [24]: https://s3.gifyu.com/images/xplr-termuxfd3c398d3cf4bcbc.md.jpg
[24]:https://s3.gifyu.com/images/xplr-termuxfd3c398d3cf4bcbc.md.jpg [25]: https://gifyu.com/image/tF2D
[25]:https://gifyu.com/image/tF2D

@ -1,5 +1,4 @@
Installing Plugins # Installing Plugins
==================
Until we get a cool plugin manager, let's install plugins manually using the Until we get a cool plugin manager, let's install plugins manually using the
following procedure: following procedure:
@ -25,4 +24,4 @@ following procedure:
-- The setup arguments might differ for different plugins. -- The setup arguments might differ for different plugins.
-- Visit the project README for setup instructions. -- Visit the project README for setup instructions.
``` ```

@ -1,10 +1,8 @@
Integration # Integration
===========
xplr is designed to integrate well with other tools and commands. It can be xplr is designed to integrate well with other tools and commands. It can be
used as a file picker or a pluggable file manager. used as a file picker or a pluggable file manager.
- [Awesome Integrations][1] - [Awesome Integrations][1]
[1]: awesome-integrations.md
[1]:awesome-integrations.md

@ -1,5 +1,4 @@
Introduction # Introduction
============
xplr is a terminal UI based file explorer that aims to increase our terminal xplr is a terminal UI based file explorer that aims to increase our terminal
productivity by being a flexible, interactive orchestrator for the ever growing productivity by being a flexible, interactive orchestrator for the ever growing
@ -14,9 +13,7 @@ intuitive, scriptable, keyboard controlled, real-time visual interface, also
being an ideal candidate for further integration, enabling the users to achieve being an ideal candidate for further integration, enabling the users to achieve
insane terminal productivity. insane terminal productivity.
## Features
Features
--------
### Hackable ### Hackable
@ -29,7 +26,6 @@ A few things you can do with the xplr configuration
- [Hack the key bindings][2] - [Hack the key bindings][2]
- [Extend with plugins][3] - [Extend with plugins][3]
## Fast ## Fast
Although speed is not the primary concern, xplr is already fast enough so that Although speed is not the primary concern, xplr is already fast enough so that
@ -46,7 +42,6 @@ because I am waiting for someone to complain. I want to avoid optimizing things
I don't need to, because optimization often requires either complexity or I don't need to, because optimization often requires either complexity or
feature sacrifice or both. feature sacrifice or both.
## Minimalist ## Minimalist
xplr prefers to stay minimal, both in terms of features and binary size, but xplr prefers to stay minimal, both in terms of features and binary size, but
@ -56,7 +51,6 @@ little more productive or allows xplr to be a little more configurable, it will
be considered. But of-course, the `bulk vs productivity gain per user` balance be considered. But of-course, the `bulk vs productivity gain per user` balance
will also be considered in the decision-making. will also be considered in the decision-making.
## Other features ## Other features
- [Embedded LuaJIT][5] for - [Embedded LuaJIT][5] for
@ -113,10 +107,9 @@ will also be considered in the decision-making.
(`:` `q` `s`). (`:` `q` `s`).
- Quit with failure (`ctrl-c`). - Quit with failure (`ctrl-c`).
[1]: layouts.md
[1]:layouts.md [2]: modes.md
[2]:modes.md [3]: awesome-plugins.md
[3]:awesome-plugins.md [4]: https://github.com/sayanarijit/xplr/tree/main/benches
[4]:https://github.com/sayanarijit/xplr/tree/main/benches [5]: https://github.com/sayanarijit/xplr/discussions/183
[5]:https://github.com/sayanarijit/xplr/discussions/183 [6]: https://github.com/sayanarijit/xplr/pull/229
[6]:https://github.com/sayanarijit/xplr/pull/229

@ -1 +1 @@
# Key Bindings # Key Bindings

@ -1,5 +1,4 @@
Modes # Modes
=====
xplr is a modal file explorer. That means the users switch between different xplr is a modal file explorer. That means the users switch between different
modes, each containing a different set of key bindings to avoid clashes. Users modes, each containing a different set of key bindings to avoid clashes. Users
@ -12,9 +11,7 @@ It contains the following fields:
- [builtin][1] - [builtin][1]
- [custom][2] - [custom][2]
## builtin
builtin
-------
Type: mapping of string and [Mode][3] Type: mapping of string and [Mode][3]
@ -44,9 +41,7 @@ xplr by default provides the following builtin modes:
Visit the [Default Key Bindings][4] to see what each mode Visit the [Default Key Bindings][4] to see what each mode
does. does.
## custom
custom
------
Type: mapping of string and [Mode][3] Type: mapping of string and [Mode][3]
@ -78,9 +73,7 @@ xplr.config.general.initial_mode = "example"
-- pressing "enter" should take you to the "default" mode. -- pressing "enter" should take you to the "default" mode.
``` ```
## Mode
Mode
----
A mode contains the following information: A mode contains the following information:
@ -122,9 +115,7 @@ Type: nullable [Layout][30]
If specified, this layout will be used to render the UI. If specified, this layout will be used to render the UI.
## Key Bindings
Key Bindings
------------
Key bindings define how each keyboard input will be handled in a specific mode. Key bindings define how each keyboard input will be handled in a specific mode.
@ -173,9 +164,7 @@ Default action to perform in case of a keyboard input not mapped via any of the
[on_key][10], [on_alphabet][11], [on_number][12] or [on_key][10], [on_alphabet][11], [on_number][12] or
[on_special_character][13] field. [on_special_character][13] field.
## Key
Key
---
A key can be one of the following: A key can be one of the following:
@ -203,9 +192,7 @@ A key can be one of the following:
And finally, the special characters - including space (`" "`). And finally, the special characters - including space (`" "`).
## Action
Action
------
An action contains the following information: An action contains the following information:
@ -225,9 +212,7 @@ Type: A list of [Message][18] to send.
The list of messages to send when a key is pressed. The list of messages to send when a key is pressed.
## Tutorial: Adding a New Mode
Tutorial: Adding a New Mode
---------------------------
Assuming xplr is [installed][19] and [setup][20], let's Assuming xplr is [installed][19] and [setup][20], let's
add our own mode to integrate xplr with [fzf][21]. add our own mode to integrate xplr with [fzf][21].
@ -296,38 +281,37 @@ Now let's try out the new `xplr`-`fzf` integration.
[![xplr-fzf.gif][25]][26] [![xplr-fzf.gif][25]][26]
----- ---
Visit [Awesome Plugins][27] for more [integration][28] options. Visit [Awesome Plugins][27] for more [integration][28] options.
[1]: #builtin
[1]:#builtin [2]: #custom
[2]:#custom [3]: #mode
[3]:#mode [4]: default-key-bindings.md
[4]:default-key-bindings.md [5]: #name
[5]:#name [6]: #help
[6]:#help [7]: #extra_help
[7]:#extra_help [8]: #key_bindings
[8]:#key_bindings [9]: #key-bindings
[9]:#key-bindings [10]: #on_key
[10]:#on_key [11]: #on_alphabet
[11]:#on_alphabet [12]: #on_number
[12]:#on_number [13]: #on_special_character
[13]:#on_special_character [14]: #default
[14]:#default [15]: #key
[15]:#key [16]: #action
[16]:#action [17]: #messages
[17]:#messages [18]: message.md
[18]:message.md [19]: install.md
[19]:install.md [20]: post-install.md
[20]:post-install.md [21]: https://github.com/junegunn/fzf
[21]:https://github.com/junegunn/fzf [22]: message.md#environment-variables
[22]:message.md#environment-variables [23]: message.md#input-pipe
[23]:message.md#input-pipe [24]: message.md#output-pipes
[24]:message.md#output-pipes [25]: https://s3.gifyu.com/images/xplr-fzf.gif
[25]:https://s3.gifyu.com/images/xplr-fzf.gif [26]: https://gifyu.com/image/tW86
[26]:https://gifyu.com/image/tW86 [27]: awesome-plugins.md
[27]:awesome-plugins.md [28]: awesome-plugins.md#integration
[28]:awesome-plugins.md#integration [29]: #layout
[29]:#layout [30]: layouts.md#Layout
[30]:layouts.md#Layout

@ -1,5 +1,4 @@
Node Types # Node Types
==========
This configuration defines how to deal with different kinds of nodes (files, This configuration defines how to deal with different kinds of nodes (files,
directories, symlinks etc.) in a directory. directories, symlinks etc.) in a directory.
@ -23,7 +22,6 @@ The priority is:
**special** > **extension** > **mime_essence** > **symlink** > **file** > **directory** **special** > **extension** > **mime_essence** > **symlink** > **file** > **directory**
### directory ### directory
Type: [NodeType Config][7] Type: [NodeType Config][7]
@ -39,7 +37,6 @@ xplr.config.node_types.directory.meta.icon = ""
xplr.config.node_types.directory.style.add_modifiers = { "Bold" } xplr.config.node_types.directory.style.add_modifiers = { "Bold" }
``` ```
### file ### file
Type: [NodeType Config][7] Type: [NodeType Config][7]
@ -55,7 +52,6 @@ xplr.config.node_types.file.meta.icon = ""
xplr.config.node_types.file.style.fg = "White" xplr.config.node_types.file.style.fg = "White"
``` ```
### symlink ### symlink
Type: [NodeType Config][7] Type: [NodeType Config][7]
@ -69,7 +65,6 @@ xplr.config.node_types.symlink.meta.icon = ""
xplr.config.node_types.symlink.style.add_modifiers = { "Italic" } xplr.config.node_types.symlink.style.add_modifiers = { "Italic" }
``` ```
### mime_essence ### mime_essence
Type: mapping of mime-type and mapping of mime-subtype and [NodeType Config][7] Type: mapping of mime-type and mapping of mime-subtype and [NodeType Config][7]
@ -86,7 +81,7 @@ xplr.config.node_types.mime_essence = {
application = { application = {
-- application/* -- application/*
["*"] = { meta = { icon = "a" } } ["*"] = { meta = { icon = "a" } }
-- application/pdf -- application/pdf
pdf = { meta = { icon = "" } }, pdf = { meta = { icon = "" } },
@ -123,9 +118,7 @@ xplr.config.node_types.special["Cargo.toml"] = { meta = { icon = "" } }
xplr.config.node_types.special["Downloads"] = { meta = { icon = "" } } xplr.config.node_types.special["Downloads"] = { meta = { icon = "" } }
``` ```
## NodeType Config
NodeType Config
---------------
A node-type config contains the following fields: A node-type config contains the following fields:
@ -151,13 +144,12 @@ xplr.config.node_types.file = {
} }
``` ```
[1]: #directory
[1]:#directory [2]: #file
[2]:#file [3]: #symlink
[3]:#symlink [4]: #mime_essence
[4]:#mime_essence [5]: #extension
[5]:#extension [6]: #special
[6]:#special [7]: #nodetype-config
[7]:#nodetype-config [8]: #meta
[8]:#meta [9]: style.md
[9]:style.md

@ -1,5 +1,4 @@
Plugin # Plugin
======
xplr supports pluggable Lua modules that can be used to easily configure or xplr supports pluggable Lua modules that can be used to easily configure or
extend xplr UI and functionalities. extend xplr UI and functionalities.
@ -8,7 +7,6 @@ extend xplr UI and functionalities.
- [Writing Plugins][2] - [Writing Plugins][2]
- [Awesome Plugins][3] - [Awesome Plugins][3]
[1]: installing-plugins.md
[1]:installing-plugins.md [2]: writing-plugins.md
[2]:writing-plugins.md [3]: awesome-plugins.md
[3]:awesome-plugins.md

@ -1,10 +1,8 @@
Post Install # Post Install
============
Once [installed][1], use the following steps to setup and run xplr. Once [installed][1], use the following steps to setup and run xplr.
Create the customizable config file ## Create the customizable config file
-----------------------------------
```bash ```bash
mkdir -p ~/.config/xplr mkdir -p ~/.config/xplr
@ -28,15 +26,12 @@ and remove / comment out what you don't want to customize.
> Also, the default configuration is meant to be overwritten to suit your > Also, the default configuration is meant to be overwritten to suit your
> workflow. > workflow.
## Run
Run
---
``` ```
xplr xplr
``` ```
[1]: install.md
[1]:install.md [2]: https://github.com/sayanarijit/xplr/blob/main/src/init.lua
[2]:https://github.com/sayanarijit/xplr/blob/main/src/init.lua [3]: upgrade-guide.md
[3]:upgrade-guide.md

@ -1,5 +1,4 @@
Quickstart # Quickstart
==========
Nice to you have here! Let's quickly start our xplr journey with the Nice to you have here! Let's quickly start our xplr journey with the
following steps: following steps:
@ -7,6 +6,5 @@ following steps:
- [Install][1] - [Install][1]
- [Post Install][2] - [Post Install][2]
[1]: install.md
[1]:install.md [2]: post-install.md
[2]:post-install.md

@ -1,5 +1,4 @@
Sorting # Sorting
=======
xplr supports sorting paths by different properties. The sorting mechanism xplr supports sorting paths by different properties. The sorting mechanism
works like a pipeline, which in visible in the `Sort & filter` panel. works like a pipeline, which in visible in the `Sort & filter` panel.
@ -19,16 +18,13 @@ The arrows denote the order.
Each part of this pipeline is called [Node Sorter Applicable][1]. Each part of this pipeline is called [Node Sorter Applicable][1].
## Node Sorter Applicable
Node Sorter Applicable
----------------------
It contains the following information: It contains the following information:
- [sorter][2] - [sorter][2]
- [reverse][3] - [reverse][3]
### sorter ### sorter
A sorter can be one of the following: A sorter can be one of the following:
@ -62,16 +58,13 @@ A sorter can be one of the following:
TODO: document each TODO: document each
### reverse ### reverse
Type: boolean Type: boolean
It defined the direction of the order. It defined the direction of the order.
## Example
Example
-------
```lua ```lua
xplr.config.general.initial_sorting = { xplr.config.general.initial_sorting = {
@ -82,7 +75,6 @@ xplr.config.general.initial_sorting = {
This snippet defines the initial sorting logic to be applied when xplr loads. This snippet defines the initial sorting logic to be applied when xplr loads.
[1]: #node-sorter-applicable
[1]:#node-sorter-applicable [2]: #sorter
[2]:#sorter [3]: #reverse
[3]:#reverse

@ -1,5 +1,4 @@
Style # Style
=====
A style object contains the following information: A style object contains the following information:
@ -14,30 +13,25 @@ Type: nullable [Color][5]
The foreground color. The foreground color.
### bg ### bg
Type: nullable [Color][5] Type: nullable [Color][5]
The background color. The background color.
### add_modifiers ### add_modifiers
Type: nullable list of [Modifier][6] Type: nullable list of [Modifier][6]
Modifiers to add. Modifiers to add.
### sub_modifiers ### sub_modifiers
Type: nullable list of [Modifier][6] Type: nullable list of [Modifier][6]
Modifiers to remove. Modifiers to remove.
## Color
Color
-----
Color can be one of the following: Color can be one of the following:
@ -61,9 +55,7 @@ Color can be one of the following:
- { Rgb = { int, int, int } } - { Rgb = { int, int, int } }
- { Indexed = int } - { Indexed = int }
## Modifier
Modifier
--------
Modifier can be one of the following: Modifier can be one of the following:
@ -77,9 +69,7 @@ Modifier can be one of the following:
- "Hidden" - "Hidden"
- "CrossedOut" - "CrossedOut"
## Example
Example
-------
```lua ```lua
xplr.config.general.cursor.style.fg = "Red" xplr.config.general.cursor.style.fg = "Red"
@ -88,10 +78,9 @@ xplr.config.general.cursor.style.add_modifiers = { "Bold", "Italic" }
xplr.config.general.cursor.style.sub_modifiers = { "Hidden" } xplr.config.general.cursor.style.sub_modifiers = { "Hidden" }
``` ```
[1]: #fg
[1]:#fg [2]: #bg
[2]:#bg [3]: #add_modifiers
[3]:#add_modifiers [4]: #sub_modifiers
[4]:#sub_modifiers [5]: #color
[5]:#color [6]: #modifier
[6]:#modifier

@ -1,5 +1,4 @@
TODO # TODO
====
- [x] Saner key bindings. - [x] Saner key bindings.
- [x] Pipes. - [x] Pipes.
@ -27,10 +26,9 @@ TODO
Like this project so far? **[Please consider contributing][6].** Like this project so far? **[Please consider contributing][6].**
[1]: https://github.com/sayanarijit/xplr/wiki/Hacks#spawn-multiple-sessions-in-different-windows
[1]:https://github.com/sayanarijit/xplr/wiki/Hacks#spawn-multiple-sessions-in-different-windows [2]: https://github.com/sayanarijit/xplr/discussions/15
[2]:https://github.com/sayanarijit/xplr/discussions/15 [3]: https://github.com/sayanarijit/xplr/wiki/Hacks#bookmark
[3]:https://github.com/sayanarijit/xplr/wiki/Hacks#bookmark [4]: https://github.com/sayanarijit/xplr.vim
[4]:https://github.com/sayanarijit/xplr.vim [5]: https://github.com/sayanarijit/xplr/discussions/2
[5]:https://github.com/sayanarijit/xplr/discussions/2 [6]: contribute.md
[6]:contribute.md

@ -1,20 +1,15 @@
Writing Plugins # Writing Plugins
===============
Anyone who can write [Lua][1] code, can write xplr plugins. Anyone who can write [Lua][1] code, can write xplr plugins.
Just follow the instructions and best practices: Just follow the instructions and best practices:
## Naming
Naming
------
xplr plugins are named using hiphen (`-`) separated words that may also include xplr plugins are named using hiphen (`-`) separated words that may also include
integers. They will be plugged using the `require()` function in Lua. integers. They will be plugged using the `require()` function in Lua.
## Structure
Structure
---------
A minimal plugin should confirm to the following structure: A minimal plugin should confirm to the following structure:
@ -28,7 +23,6 @@ plugin-name
You can also use You can also use
[this template][2]. [this template][2].
### README.md ### README.md
This is where you document what the plugin does, how to use it, etc. This is where you document what the plugin does, how to use it, etc.
@ -49,8 +43,7 @@ end
return { setup = setup } return { setup = setup }
``` ```
Publishing ## Publishing
----------
When publishing plugins on GitHub or other repositories, it's a best practice 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 to append `.xplr` to the name to make them distinguishable. Similar to the
@ -59,15 +52,11 @@ to append `.xplr` to the name to make them distinguishable. Similar to the
Finally, after publishing, don't hesitate to Finally, after publishing, don't hesitate to
[let us know][4]. [let us know][4].
## Examples
Examples
--------
Visit [Awesome Plugins][5] for xplr plugin examples. Visit [Awesome Plugins][5] for xplr plugin examples.
## Also See
Also See
--------
- [Tutorial: Adding a New Mode][6] - [Tutorial: Adding a New Mode][6]
- [Example: Using Environment Variables and Pipes][7] - [Example: Using Environment Variables and Pipes][7]
@ -76,15 +65,14 @@ Also See
- [Example: Customizing Table Renderer][10] - [Example: Customizing Table Renderer][10]
- [Example: Render a custom dynamic table][11] - [Example: Render a custom dynamic table][11]
[1]: https://www.lua.org
[1]:https://www.lua.org [2]: https://github.com/sayanarijit/plugin-template1.xplr
[2]:https://github.com/sayanarijit/plugin-template1.xplr [3]: https://neovim.io
[3]:https://neovim.io [4]: https://github.com/sayanarijit/xplr/discussions/categories/show-and-tell
[4]:https://github.com/sayanarijit/xplr/discussions/categories/show-and-tell [5]: awesome-plugins.md
[5]:awesome-plugins.md [6]: modes.md#tutorial-adding-a-new-mode
[6]:modes.md#tutorial-adding-a-new-mode [7]: message.md#example-using-environment-variables-and-pipes
[7]:message.md#example-using-environment-variables-and-pipes [8]: message.md#example-using-lua-function-calls
[8]:message.md#example-using-lua-function-calls [9]: layouts.md#example-defining-custom-layout
[9]:layouts.md#example-defining-custom-layout [10]: column-renderer.md#example-customizing-table-renderer
[10]:column-renderer.md#example-customizing-table-renderer [11]: layouts.md#example-render-a-custom-dynamic-table
[11]:layouts.md#example-render-a-custom-dynamic-table

Loading…
Cancel
Save