Public structs enable automatec documentation.
xplr is not (yet) a library. Even it want to become one, making fields
private is probably not the right way.
This works:
```lua
xplr.fn.custom.ping = function(app)
print("What's your name?")
local name = io.read()
os.execute('read -p "Hello ' .. name .. ', you are in ' .. app.pwd .. '"')
return {
{ LogSuccess = "pong" },
}
end
```
Then it can be called via `CallLua: custom.ping`.
This commit begins porting of `config.yml` to `init.lua`.
As of now, it's not be possible to do the complete migration
because of how lua and yaml handles `null`/`nil` value.
So, we will need to completely deprecate `config.yml` in order to do the
complete migration.
Use `remaps: {key: null}` to un-map a key.
Also,
- `gx` will now open only the file under focus.
- `:sx` will open the selected files.
And other minor improvements.
Discussion: https://github.com/sayanarijit/xplr/discussions/146
```
Benchmarking focus next item: Collecting 100 samples in estimated 5.1972 s (126k itera focus next item time: [41.216 us 41.346 us 41.494 us]
change: [-28.669% -28.110% -27.551%] (p = 0.00 < 0.05)
Performance has improved.
Found 9 outliers among 100 measurements (9.00%)
4 (4.00%) high mild
5 (5.00%) high severe
Benchmarking focus previous item: Collecting 100 samples in estimated 5.0576 s (116k i focus previous item time: [43.589 us 43.754 us 43.927 us]
change: [-29.506% -28.748% -28.039%] (p = 0.00 < 0.05)
Performance has improved.
Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) high mild
2 (2.00%) high severe
Benchmarking focus first item: Collecting 100 samples in estimated 5.1765 s (116k iter focus first item time: [44.071 us 44.340 us 44.634 us]
change: [-26.739% -26.314% -25.885%] (p = 0.00 < 0.05)
Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
8 (8.00%) high mild
4 (4.00%) high severe
Benchmarking focus last item: Collecting 100 samples in estimated 5.1522 s (116k itera focus last item time: [43.950 us 44.214 us 44.541 us]
change: [-27.571% -26.953% -26.337%] (p = 0.00 < 0.05)
Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
5 (5.00%) high mild
6 (6.00%) high severe
Benchmarking leave and enter directory: Collecting 100 samples in estimated 5.4863 s ( leave and enter directory
time: [96.645 us 96.915 us 97.234 us]
change: [-28.720% -27.224% -25.666%] (p = 0.00 < 0.05)
Performance has improved.
Found 9 outliers among 100 measurements (9.00%)
6 (6.00%) high mild
3 (3.00%) high severe
```
This PR targets 2 pain points.
1. The `Explore` message was async, which caused some unexpected
behavior. This was fixed by splitting `Explore` into `ExplorePwd`,
`ExplorePwdAsync` and `ExploreParentsAsync`. `ExploreParentsAsync`
is similar to the former `Explore`, which is mainly used when loading
`xplr` for the first time. However, what we'll be using frequently
are `ExplorePwd` and `ExplorePwdAsync` messages.
2. Files with spaces caused some unexpected behavior. This was fixed by
escaping the paths properly. This also fixed focusing of a file after
creating or renaming it.
Anothor breaking change is that `XPLR_PIPE_FOCUS_OUT` has been removed.
`XPLR_FOCUS_PATH` is all we need. So, the rule of thumb is if a variable
contains one liner value, it can be used directly from the env vars.
Variables that can contain multi-line values, will be exposed via the
pipes.
Minor changes are
- Add `switch_mode` mode to the global key binding help menu
- Moved some UI related code from config.rs to ui.rs.
- Fixed compilation issue on `rustc 1.50.0`.
From this commit, the app state will be written to the output pipes only
when invoking a command.
For auto refreshing pipes, we can brainstorm on `service`s concept.
Now, users can change the UI layout via the `SwitchLayout{Builtin|Custom}`
message, or by using key `ctrl-w`.
There are 3 default layout options -
- default
- no_help
- no_selection
- no_help_no_selection
Also, the initial mode and the initial layout can be specified in the
config.
Closes: https://github.com/sayanarijit/xplr/issues/107
From this version, xplr won't annoy the users to visit the upgrade guide
when there is no need.
Also, users will only get upgrade related notification when it is
there is one.
- Rename `custom` field for node metadata to `meta`.
- Move `icon` to `meta.icon`.
- Rename `normal_ui` to `default_ui`.
- Rename `filetypes` to `node_types`.
- Split `modes` into `modes.builtin` and `modes.custom`.
- Add the missing `create file` mode.
- Rename `focused_ui` to `focus_ui`.
- Make `general.table.header` non-nullable.
- Add support for incremental configuration updates.
Ref: https://github.com/sayanarijit/xplr/issues/45
Also be less aggressive for version compatibility.
Use the following logic:
Knowing that we use `{major}.{minor}.{patch}` versioning,
- Major version mismatch are incompatible. Fail with error, suggesting to
visit the Upgrade Guide.
- Minor version updates and patch fixes are compatible. Suggest user to
update the config file version manually. Or visit the Upgrade Guide.
- However, if the config file has greater value for minor version
than the app, also fail with error. Suggesting the user to visit Upgrade
Guide. Though in this case, the user will be downgrading.
Ref: https://github.com/sayanarijit/xplr/issues/45
Some commands doesn't require to capture stdout and stderr.
They can be called without needing to reset the screen.
Add `CallSilently` and `BashExecSilently` to execute those commands
faster.
Also, some optimization.
Concern:
Using `ResetNodeFilters` to clear the filters while searching or exiting
from search unexpectedly resets the `show hidden` mode because the
action not only removes the target filter, it resets all the other
filters as well.
Solution:
Implement `RemoveNodeFilterFromInput` to be able to clear or remove
target filters without having to reset it.
Since users don't need to update config file version for minor app
releases, we have to differentiate between app and config version.
Also, expose them via `$XPLR_CONFIG_VERSION` and `$XPLR_APP_VERSION`.
With this change, `xplr` will only raise version incompatibility error
if the major version changes. Minor version updates are assumed to be
backwards compatible.
If the major version is `v0`, the minor version will be considered as
the major version and the security/patch version will be considered as
minor version and the same logic will apply.
Bug:
When you call some command in a directory with a large number of hosts,
xplr will fail setting the environment vars as the command will become
too large to handle.
Fix:
Port the value of multi-line variables from env vars to pipes and set
the name of the pipe as env var instead. And deprecate the variables
that doesn't make much sense.
In other words,
- `$XPLR_APP_YAML` has been removed.
- `$XPLR_RESULT` has been ported to `$XPLR_PIPE_RESULT_OUT`.
- `$XPLR_GLOBAL_HELP_MENU` has been ported to
`$XPLR_PIPE_GLOBAL_HELP_MENU_OUT`.
- `$XPLR_DIRECTORY_NODES` has been ported to
`$XPLR_PIPE_DIRECTORY_NODES_OUT`.
- `$XPLR_LOGS` has been ported to `$XPLR_PIPE_LOGS_OUT`.
- `$XPLR_PIPE_RESULT` has been ported to `$XPLR_PIPE_RESULT_OUT`.
Hence, instead of `<<< $VAR`, `< $VAR_PIPE_OUT` should be used.
- Auto `Refresh` every second.
- Add alias `BashExec` to message `Call` with args [`-c`, `bash` ...].
Also, Create alias `BashExec` to message `Call` with arguments [`bash`, `-c`]