Release v0.20.0

pull/526/head
Arijit Basu 2 years ago committed by Arijit Basu
parent 49c4729047
commit 15979e4974

2
Cargo.lock generated

@ -1351,7 +1351,7 @@ checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
[[package]]
name = "xplr"
version = "0.20.0-beta.3"
version = "0.20.0"
dependencies = [
"ansi-to-tui",
"anyhow",

@ -8,7 +8,7 @@ path = './benches/criterion.rs'
[package]
name = 'xplr'
version = '0.20.0-beta.3'
version = '0.20.0'
authors = ['Arijit Basu <hi@arijitbasu.in>']
edition = '2021'
description = 'A hackable, minimal, fast TUI file explorer'

@ -34,7 +34,6 @@
- [Awesome Plugins][18]
- [Integration][19]
- [Awesome Integrations][20]
- [TODO][21]
- [Alternatives][22]
- [Upgrade Guide][23]
- [Community][24]
@ -60,7 +59,6 @@
[18]: awesome-plugins.md
[19]: integration.md
[20]: awesome-integrations.md
[21]: todo.md
[22]: alternatives.md
[23]: upgrade-guide.md
[24]: community.md

@ -68,8 +68,6 @@ A filter can be one of the following:
- "IAbsolutePathDoesMatchRegex"
- "IAbsolutePathDoesNotMatchRegex"
TODO: document each
### input
Type: string

@ -53,14 +53,17 @@ to lose some kb if it makes sense.
Some of the coolest features xplr provide beside the basic stuff:
- [Embedded LuaJIT][5] for portability and extensibility.
- [A simple system based on message passing][10] to control xplr session using:
- [A simple modal system based on message passing][10] to control xplr session
using:
- [Keyboard inputs][11]
- [Shell Commands][12]
- [Lua Functions][13]
- [Readline-like input buffer][9] with customizable behaviour to read user
- [Hooks][22]
- Easy, typesafe message passing with `-m MSG` or `-M MSG` subcommands.
- [Readline-like input buffer][9] with customizable behavior to read user
inputs.
- [Switchable recover mode][7] that saves you from doing unwanted things when in a
hurry.
- [Switchable recover mode][7] that saves you from doing unwanted things when
in a hurry.
- [Customizable layouts][1] with built-in panels. For e.g.
- **Selection list** to show you the selected paths in real-time.
- **Help menu** to show you the available keys bindings in each mode.
@ -69,6 +72,7 @@ Some of the coolest features xplr provide beside the basic stuff:
- [Custom file properties][17] with custom colors can be displayed in the table.
- [FIFO manager][19] to manage a FIFO file that can be used to
[integrate with previewers][6].
- [Virtual root][21] with `--vroot` and `:v` key bindings.
- **Different quit options:**
- Quit with success without any output (`q`).
- Quit with success and the result printed on stdout (`enter`).
@ -88,10 +92,10 @@ Some of the coolest features xplr provide beside the basic stuff:
[4]: https://github.com/sayanarijit/xplr/tree/main/benches
[5]: https://github.com/sayanarijit/xplr/discussions/183
[6]: https://github.com/sayanarijit/xplr/pull/229
[7]: general-config.md#enable_recover_mode
[7]: modes.md#xplrconfigmodesbuiltinrecover
[8]: default-key-bindings.md
[9]: https://github.com/sayanarijit/xplr/pull/397
[10]: message.md
[10]: messages.md
[11]: configure-key-bindings.md
[12]: mode.md#input-pipe
[13]: lua-function-calls.md
@ -100,5 +104,7 @@ Some of the coolest features xplr provide beside the basic stuff:
[16]: awesome-hacks.md
[17]: node_types.md
[18]: https://github.com/sayanarijit/xplr/blob/main/src/init.lua
[19]: message.md#startfifo
[19]: messages.md#startfifo
[20]: community.md
[21]: messages.md#virtual-root
[22]: configuration.md#hooks

@ -160,8 +160,6 @@ A constraint can be one of the following:
- { MinLessThanLayoutHeight = int }
- { MinLessThanLayoutWidth = int }
TODO: document each constraint.
## splits
Type: list of [Layout][3]

@ -8,6 +8,34 @@ When called the function receives a [special argument][14] that
contains some useful information. The function can optionally return a list of
messages which will be handled by xplr.
## Example: Using Lua Function Calls
```lua
-- Define the function
xplr.fn.custom.ask_name_and_greet = function(app)
print("What's your name?")
local name = io.read()
local greeting = "Hello " .. name .. "!"
local message = greeting .. " You are inside " .. app.pwd
return {
{ LogSuccess = message },
}
end
-- Map the function to a key (space)
xplr.config.modes.builtin.default.key_bindings.on_key.space = {
help = "ask name and greet",
messages = {
{ CallLua = "custom.ask_name_and_greet" }
}
}
-- Now, when you press "space" in default mode, you will be prompted for your
-- name. Enter your name to receive a nice greeting and to know your location.
```
## Lua Context
This is a special argument passed to the lua functions when called using the
@ -105,7 +133,9 @@ The session path.
### explorer_config
[TODO][66]
Type: [ExplorerConfig][66]
The configuration for exploring paths.
### history
@ -313,33 +343,48 @@ Type: list of string
Visited paths.
## Example: Using Lua Function Calls
## Explorer Config
```lua
-- Define the function
xplr.fn.custom.ask_name_and_greet = function(app)
print("What's your name?")
Explorer config contains the following fields:
local name = io.read()
local greeting = "Hello " .. name .. "!"
local message = greeting .. " You are inside " .. app.pwd
- [filters][77]
- [sorters][78]
- [searchers][79]
return {
{ LogSuccess = message },
}
end
### filters
-- Map the function to a key (space)
xplr.config.modes.builtin.default.key_bindings.on_key.space = {
help = "ask name and greet",
messages = {
{ CallLua = "custom.ask_name_and_greet" }
}
}
List of filters to apply.
-- Now, when you press "space" in default mode, you will be prompted for your
-- name. Enter your name to receive a nice greeting and to know your location.
```
Type: list of [Node Filter Applicable][80]
### sorters
Add list or sorters to the pipeline.
Type: list of [Node Sorter Applicable][81]
### searchers
Type: nullable [Node Searcher][82]
## Node Searcher
Node Searcher contains the following fields:
- [pattern][83]
- [recoverable_focus][84]
### pattern
The patters used to search.
Type: string
### recoverable_focus
Where to focus when search is cancelled.
Type: nullable string
[7]: https://www.json.org
[8]: modes.md#mode
@ -389,7 +434,7 @@ xplr.config.modes.builtin.default.key_bindings.on_key.space = {
[63]: #nodes
[64]: #total
[65]: #focus
[66]: https://docs.rs/xplr/latest/xplr/app/struct.ExplorerConfig.html
[66]: #explorer-config
[67]: #history
[68]: #loc
[69]: #paths
@ -400,3 +445,11 @@ xplr.config.modes.builtin.default.key_bindings.on_key.space = {
[74]: #gid
[75]: #vroot
[76]: #initial_pwd
[77]: #filters
[78]: #sorters
[79]: #searchers
[80]: filtering.md#node-filter-applicable
[81]: sorting.md#node-sorter-applicable
[82]: #node-searcher
[83]: #pattern
[84]: #recoverable_focus

@ -1,6 +1,6 @@
# Full List of Messages
xplr messages categorized based on their purpose.
xplr [messages][1] categorized based on their purpose.
## Categories
@ -1251,4 +1251,6 @@ Example:
## Also See:
- [Message](message.md)
- [Message][1]
[1]: message.md

@ -62,8 +62,6 @@ A sorter can be one of the following:
- "BySymlinkCreated"
- "BySymlinkLastModified"
TODO: document each
### reverse
Type: boolean

@ -1,34 +0,0 @@
# TODO
- [x] Saner key bindings.
- [x] Pipes.
- [x] Native search & filter.
- [x] Create, copy, move, delete files directly.
- [x] logging support.
- [x] Version compatibility instructions.
- [x] Implement CLI arguments.
- ~Add support for tabs and/or panes (non native)~ [hacked][1] | [discussion][2]
- ~Implement bookmarks.~ [hacked][3]
- [x] Add sorting support.
- [x] Add filter support.
- [x] File previews.
- [x] Implement plugins support (or some way to easily share configuration).
- [x] Bigger (and better) help menu.
- [x] Offline docs.
- [ ] Support for background services
- [x] ~Customize~ switch UI at run-time.
- [ ] More tests and benchmarks.
- [ ] Measure code coverage.
- [ ] Improve the [vim plugin][4].
- [ ] Cleanup, refactor, optimize.
[add more][5]
Like this project so far? **[Please consider contributing][6].**
[1]: https://github.com/sayanarijit/xplr/wiki/Hacks#spawn-multiple-sessions-in-different-windows
[2]: https://github.com/sayanarijit/xplr/discussions/15
[3]: https://github.com/sayanarijit/xplr/wiki/Hacks#bookmark
[4]: https://github.com/sayanarijit/xplr.vim
[5]: https://github.com/sayanarijit/xplr/discussions/2
[6]: contribute.md

@ -45,7 +45,7 @@ compatibility.
### Instructions
#### [v0.19.4][47] -> [v0.20.0-beta.3][48]
#### [v0.19.4][47] -> [v0.20.0][48]
- BREAKING: xplr shell (`:!`) will default to null (`\0`) delimited pipes, as
opposed to newline (`\n`) delimited ones (i.e. will use `Call0` instead of
@ -74,6 +74,9 @@ compatibility.
- UnsetVroot
- ToggleVroot
- ResetVroot
- Use `$XPLR_INITIAL_PWD` and Lua equivalent to implement workspace like
features without using virtual root. Use keys `gi` to go to the initial
working directory from anywhere.
#### [v0.18.0][46] -> [v0.19.4][47]
@ -432,4 +435,4 @@ Else do the following:
[45]: https://github.com/sayanarijit/xplr/releases/tag/v0.17.6
[46]: https://github.com/sayanarijit/xplr/releases/tag/v0.18.0
[47]: https://github.com/sayanarijit/xplr/releases/tag/v0.19.4
[48]: https://github.com/sayanarijit/xplr/releases/tag/v0.20.0-beta.3
[48]: https://github.com/sayanarijit/xplr/releases/tag/v0.20.0

@ -9,7 +9,7 @@ from typing import List
MESSAGES_DOC_TEMPLATE = """
# Full List of Messages
xplr messages categorized based on their purpose.
xplr [messages][1] categorized based on their purpose.
## Categories
@ -19,7 +19,9 @@ xplr messages categorized based on their purpose.
## Also See:
- [Message](message.md)
- [Message][1]
[1]: message.md
""".strip()
CONFIGURATION_DOC_TEMPLATE = """

@ -155,24 +155,24 @@ mod tests {
assert!(check_version(VERSION, "foo path").is_ok());
// Current release if OK
assert!(check_version("0.20.0-beta.3", "foo path").is_ok());
assert!(check_version("0.20.0", "foo path").is_ok());
// Prev major release is ERR
// - Not yet
// Prev minor release is ERR (Change when we get to v1)
assert!(check_version("0.19.0-beta.3", "foo path").is_err());
assert!(check_version("0.19.0", "foo path").is_err());
// Prev bugfix release is OK
// assert!(check_version("0.20.-1", "foo path").is_ok());
// Next major release is ERR
assert!(check_version("1.20.0-beta.3", "foo path").is_err());
assert!(check_version("1.20.0", "foo path").is_err());
// Next minor release is ERR
assert!(check_version("0.21.0-beta.3", "foo path").is_err());
assert!(check_version("0.21.0", "foo path").is_err());
// Next bugfix release is ERR (Change when we get to v1)
assert!(check_version("0.20.1-beta.3", "foo path").is_err());
assert!(check_version("0.20.1", "foo path").is_err());
}
}

@ -349,8 +349,6 @@ impl Runner {
match msg {
// NOTE: Do not schedule critical tasks via tx_msg_in in this loop.
// Try handling them immediately.
//
// TODO: Remove boilerplate code.
Enque(task) => {
tx_msg_in.send(task)?;
}

Loading…
Cancel
Save