2021-06-22 11:52:46 +00:00
|
|
|
Introduction
|
|
|
|
============
|
|
|
|
|
2021-06-28 05:31:23 +00:00
|
|
|
xplr is a terminal UI based file explorer that aims to increase our terminal
|
2021-06-22 11:52:46 +00:00
|
|
|
productivity by being a flexible, interactive orchestrator for the ever growing
|
|
|
|
awesome command-line utilities that work with the file-system.
|
|
|
|
|
2021-06-28 05:31:23 +00:00
|
|
|
To achieve its goal, xplr strives to be a fast, minimal and more importantly,
|
2021-06-22 11:52:46 +00:00
|
|
|
hackable file explorer.
|
|
|
|
|
2021-06-28 05:31:23 +00:00
|
|
|
xplr is not meant to be a replacement for the standard shell commands or the
|
2021-06-22 11:52:46 +00:00
|
|
|
GUI file managers. Rather, it aims to integrate them all and expose an
|
|
|
|
intuitive, scriptable, keyboard controlled, real-time visual interface, also
|
|
|
|
being an ideal candidate for further integration, enabling the users to achieve
|
|
|
|
insane terminal productivity.
|
2021-06-28 03:58:42 +00:00
|
|
|
|
|
|
|
|
|
|
|
Features
|
|
|
|
--------
|
|
|
|
|
|
|
|
### Hackable
|
|
|
|
|
|
|
|
xplr is built with configurability in mind. So it allows you to perform a vast
|
|
|
|
set of operations and make it behave just the way you want.
|
|
|
|
|
2021-06-28 05:31:23 +00:00
|
|
|
A few things you can do with the xplr configuration
|
2021-06-28 03:58:42 +00:00
|
|
|
|
|
|
|
- [Hack the layout](layouts.md)
|
|
|
|
- [Hack the key bindings](modes.md)
|
|
|
|
- [Extend with plugins](awesome-plugins.md)
|
|
|
|
|
|
|
|
|
|
|
|
## Fast
|
|
|
|
|
2021-06-28 05:31:23 +00:00
|
|
|
Although speed is not the primary concern, xplr is already fast enough so that
|
|
|
|
you can take it out for a walk into your `node_modules` or `/nix/store` any
|
|
|
|
time you want. I currently
|
2021-06-28 03:58:42 +00:00
|
|
|
[measure the most commonly used operations](https://github.com/sayanarijit/xplr/tree/main/benches)
|
|
|
|
and I have seen it improve significantly over time, and it's only the start.
|
|
|
|
|
|
|
|
**Tip:** A quick and easy way to optimize UI rendering is reducing the number
|
|
|
|
of columns in the table.
|
|
|
|
|
2021-06-28 05:31:23 +00:00
|
|
|
**Note:** If you feel xplr is not behaving at its optimal, this is probably
|
|
|
|
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
|
|
|
|
feature sacrifice or both.
|
2021-06-28 03:58:42 +00:00
|
|
|
|
|
|
|
|
|
|
|
## Minimalist
|
|
|
|
|
2021-06-28 05:31:23 +00:00
|
|
|
xplr prefers to stay minimal, both in terms of features and binary size, but
|
|
|
|
just like speed, minimalism isn't as aggressively pursued as configurability.
|
|
|
|
If adding some feature, lines of code, or a dependency allows the users to be a
|
|
|
|
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
|
|
|
|
will also be considered in the decision-making.
|
2021-06-28 03:58:42 +00:00
|
|
|
|
|
|
|
|
|
|
|
## Other features
|
|
|
|
|
|
|
|
- [Embedded LuaJIT](https://github.com/sayanarijit/xplr/discussions/183) for
|
|
|
|
portability and extensibility.
|
|
|
|
- **Switchable recover mode:** Saves you from doing unwanted things when in a
|
|
|
|
hurry.
|
|
|
|
- **Sane (vim-like) defaults:**
|
2021-06-28 06:23:54 +00:00
|
|
|
- Use `h`, `j`, `k`, `l` or arrow keys
|
2021-06-28 03:58:42 +00:00
|
|
|
for basic navigation.
|
2021-06-28 06:23:54 +00:00
|
|
|
- Go to top using `g` `g`, and bottom using `G`.
|
|
|
|
- Travel history using `ctrl-o` and `ctrl-i`.
|
|
|
|
- Go to home directory using `~`.
|
|
|
|
- Enter search mode with `/` or `ctrl-f`.
|
|
|
|
- Go to absolute index (e.g. `4`) using `4` `enter` or
|
|
|
|
`:` `4` `enter`.
|
|
|
|
- Go to relative index (e.g. `4` `down`) using `4` `down` or
|
|
|
|
`:` `4` `down`.
|
|
|
|
- Follow symlink using `g` `f`.
|
|
|
|
- Open in GUI using `g` `x`.
|
|
|
|
- Spawn terminal using `:` `!`.
|
|
|
|
- Toggle selection using `v` or `space`.
|
|
|
|
- Toggle select all using `V` or `ctrl-a`.
|
|
|
|
- Clear selections using `ctrl-u`.
|
2021-06-28 03:58:42 +00:00
|
|
|
- **Separate keys for navigation:** navigation keys are separated from the
|
|
|
|
action keys (e.g. file opening action) to avoid mistakenly performing
|
|
|
|
unwanted actions while navigating.
|
|
|
|
- **Always visible panels** to save you brain cycles:
|
|
|
|
- Selection list.
|
|
|
|
- Help menu.
|
|
|
|
- Input & logs.
|
|
|
|
- Filter and sort pipeline.
|
|
|
|
- **Batch creation:** Create multiple files and directories without repeating
|
|
|
|
keys.
|
|
|
|
- **Batch sort & filter:** Apply sorters and filters in without repeating keys.
|
|
|
|
- **Custom file properties:** Display custom file properties with custom colors
|
|
|
|
in the table using Lua functions.
|
|
|
|
- **Input buffer:** Read user input using the built-in input buffer with
|
|
|
|
customizable behavior.
|
|
|
|
- **Switchable layouts:** Switch layouts dynamically without leaving `xplr`.
|
|
|
|
- **Saved locations:** Never lose context when traveling back and forth
|
|
|
|
directories.
|
|
|
|
- **Auto refresh state:** Auto refresh app state when the `$PWD` changes.
|
|
|
|
- **Manually refresh UI** when other apps mess it up.
|
|
|
|
- **FIFO-based previews:** Easy to manage FIFO file that can be used to
|
|
|
|
[integrate with previewers](https://github.com/sayanarijit/xplr/pull/229).
|
|
|
|
- **Different quit options:**
|
2021-06-28 06:23:54 +00:00
|
|
|
- Quit with success without any output (`q`).
|
|
|
|
- Quit with success and the result printed on stdout (`enter`).
|
2021-06-28 03:58:42 +00:00
|
|
|
- Quit with success and the present working directory printed on stdout
|
2021-06-28 06:23:54 +00:00
|
|
|
(`:` `q` `p`).
|
2021-06-28 03:58:42 +00:00
|
|
|
- Quit with success and the path under focus printed on stdout
|
2021-06-28 06:23:54 +00:00
|
|
|
(`:` `q` `f`).
|
2021-06-28 03:58:42 +00:00
|
|
|
- Quit with success and the selection printed on stdout
|
2021-06-28 06:23:54 +00:00
|
|
|
(`:` `q` `s`).
|
|
|
|
- Quit with failure (`ctrl-c`).
|