Commit Graph

137 Commits (e0d683b13a315253d23030122190c01af1f3ff71)

Author SHA1 Message Date
Arijit Basu e0f8207900 Improve key bindings
Stay in the current mode when key input is not recognised. It's better
to do nothing than doing something wrong, at least when dealing with
important files and folders.
3 years ago
Arijit Basu 50d6edb168 Fix search 3 years ago
Arijit Basu 3e812045e6
Fix release 3 years ago
Arijit Basu 92545f6387 Fix rename breaking UI 3 years ago
Arijit Basu 7c5468cabe Fix exploring and escaping paths
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`.
3 years ago
Arijit Basu 52fbaef189 Fix displaying global help menu
Also support toggle selection in search mode.
And use a pager to display logs.
3 years ago
Arijit Basu 9e89c6503d Use key `tab` to select files in search mode
Select files fzf style in search mode, without losing the search input.

Also, make background tasks failsafe and measure ui rendering.
3 years ago
Arijit Basu 38812e733b Improve config inheritance for layout UI
With this commit, users will be able to define the common configuration
as super config and inherit from them in each layout.
3 years ago
Arijit Basu fd92d8ee01 Make modifiers more intuitive
It's difficult to calculate the bits for adding and removing modifiers.
With this commit, we be will use words `Bold`, `Italic` instead of `bits: x`.
3 years ago
Arijit Basu 59b55ee192 Add more UI styling options
With this commit, the following can be done:

- Define layout constraints based on screen size and relative panel
  size.
- Define borders.
- Define panel style.
- Define panel title and title style.
3 years ago
Arijit Basu b8df831248 Add `Nothing` layout config inheritance workaround
Any layouts will default to `Nothing` which resembles blank screen.
However, they will be overwritten when there is a more specific layout
available either in the super config or in the sub config.
3 years ago
Arijit Basu b3e6679b50 Add feature dynamic UI
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
3 years ago
Arijit Basu 0584a43c7c Add SwitchModeBuiltin and SwitchModeCustom
Also, use a better prompt symbol.

Ref: https://github.com/sayanarijit/xplr/issues/107
3 years ago
Arijit Basu c0c4f27ef8 Update version 3 years ago
Arijit Basu 1c967cfef6 Update version 3 years ago
Arijit Basu 36af3e8ced Fix pipes not updating properly
Let's not optimize things until we have tests.
3 years ago
Arijit Basu 4dad10815a Fix support for filenames starting with - (hiphen)
Make it possible to create, delete, copy, move, rename filenames starting
with a - (hiphen).
3 years ago
Arijit Basu 2437fd67cf Fix distorted screen when opening files in GUI
Fixes: https://github.com/sayanarijit/xplr/issues/111
3 years ago
Arijit Basu 8ddc000895 Make config private 3 years ago
Arijit Basu 2470827aac Organize tests 3 years ago
Arijit Basu eca35c73a2 Update version 3 years ago
Arijit Basu e9b5dfe478 Fix incompatible config version
Fixes: https://github.com/sayanarijit/xplr/issues/97
3 years ago
Arijit Basu 36c2c9cc2b
Update version 3 years ago
Arijit Basu 1ffa85f30f Do not exit on permission denial
While trying to enter restricted directories, log error instead or
exiting.
3 years ago
Arijit Basu ad3dd8eec2
Update version 3 years ago
Arijit Basu c11099f651 Fix follow symlink behavior.
Use `gf` to follow symlinks instead of `enter`/`l`.

Or use the message `FollowSymlink`.
3 years ago
Arijit Basu 87cd6ff015 Fix global help menu not displaying sort & filter 3 years ago
Arijit Basu 1783834a2e Fix ctrl-l breaking UI
Also improve the filter mode key bindings

Fixes: https://github.com/sayanarijit/xplr/issues/88
3 years ago
Arijit Basu b53f0c21bb Improve read-only mode
Do not include non-read-only actions in the in read-only mode. i.e. do
not display non-read-only actions in help menu.

Ref: https://github.com/sayanarijit/xplr/issues/22
3 years ago
Arijit Basu 21f87d6a08 Add read-only mode
Ref: https://github.com/sayanarijit/xplr/issues/22
3 years ago
Arijit Basu 1546ba0a75 Add filter key binding 3 years ago
Arijit Basu a8896740c8 Add sorting support
Also improve filtering.

Closes: https://github.com/sayanarijit/xplr/issues/58
3 years ago
Arijit Basu 3ab9bcb4c9 Fix UI style priority
Fixes: https://github.com/sayanarijit/xplr/issues/68
3 years ago
Arijit Basu 1dba3d5e8e Fix overwriting of default config.
This fixes the overwriting of default configuration.

Also, add tests to validate the new logic.

Fixes: https://github.com/sayanarijit/xplr/issues/68
3 years ago
Arijit Basu d0342260fe Add support for NO_COLOR
Also, add `general.logs` to the config.

Ref: https://no-color.org/
3 years ago
Arijit Basu ea42b1969a Improve scrolling behaviour
Closes: https://github.com/sayanarijit/xplr/issues/54
3 years ago
Arijit Basu 49ffd8e1f1 Fix exit error codes
Also remove cucumber-rust (will try https://github.com/rust-rspec/rspec)

Fixes: https://github.com/sayanarijit/xplr/issues/33
3 years ago
Arijit Basu f247acf626 Fix remap behaviour and help menu
Remapping a key should overwrite default. Also, remapped keys shouldn't
be redundantly visible in help menu.

Also, display log time.
3 years ago
Arijit Basu 055c1083d6 Support easier key remaps
Also,

- Add key binding `~` to go to homedir.
- Add customizable cursor and prompts.
- Improve the help menus.
3 years ago
Arijit Basu 080e1686f3 Improve version compatibility
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.
3 years ago
Arijit Basu 3598be0f19 Improve config defaults
- 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
3 years ago
Arijit Basu 6aa3df301e Separate config.yml file from rust files
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
3 years ago
Arijit Basu 5030749ab1
Use `cp -vr` instead of `cp -v` 3 years ago
Arijit Basu 9f78a1fcff Ability to call commands silently
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.
3 years ago
Arijit Basu 588a50af7e Add support for custom metadata for table row UI
Example:

```yaml
filetypes:
  directory:
    custom:
      foo: bar
     ...
```

Where `foo` and `bar` can be anything string.

It can be accessed with the `{{{custom.foo}}}` variable.
3 years ago
Arijit Basu ededb49bd4
Fix the help menu
`esc` no longer exits from the `default` mode.
3 years ago
Arijit Basu 832016bb18 Stay in search mode when entering or leaving a directory
This might be a little counter intuitive to the `nnn` users, but I think
this will add to the productivity and should be the default.

Since we have a real-time mode indicator, users shouldn't face much of
an issue switching to the alternate default.
3 years ago
Arijit Basu 1e7e2ecc2f Add `:e` for "open in editor" 3 years ago
Arijit Basu fa4d4168cd Don't quit on esc
Issue:
`esc` is generally used to get back to the `default` mode and mistakenly
pressing `esc` while in `default` mode will annoyingly terminate the
session.

Fix:
Remove `esc` from the `default` mode's key bindings. Use `q` or `crtl-c`
instead.
3 years ago
Arijit Basu fa37cd1c10 Improve search and filter
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.
3 years ago
Arijit Basu e2b49ab4fd Display help menu using $PAGER
Also, use `open` to open files when `xdg-open` is missing.
3 years ago
Arijit Basu 7661019fd9 Make dir colors cyan
Fixes: https://github.com/sayanarijit/xplr/issues/11
3 years ago
Arijit Basu 981ead8c36 Fix large env vars breaking the subprocess
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.
3 years ago
Arijit Basu 9747c8667b Autocomplete the relative path while renaming
By default, while renaming a file, autocomplete the relative path i.e.
the filename instead of the absolute path in the input buffer.
3 years ago
Arijit Basu 67f2094a4c Autorefresh, BashExec and basename
- 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`]
3 years ago
Arijit Basu dba8631911 Add CI/CD gh actions
Mostly stolen from https://github.com/Rigellute/spotify-tui.
3 years ago
Arijit Basu 8dae2fef4d
Add native support for renaming 3 years ago
Arijit Basu 2f409a2117
Add support for `:{number}` like vim 3 years ago
Arijit Basu af8a637030
Logging, testing and other improvements 3 years ago
Arijit Basu 71a23e1f64
Implement native search and filter 3 years ago
Arijit Basu 7cbb9d2baf
Saner key bindings 3 years ago
Arijit Basu c0ca596539
Fix create mode, refactor readers, fix init focus 3 years ago
Arijit Basu 56d63a2316
Move, Copy, Create, Delete 3 years ago
Arijit Basu eb6bc6b6be
Minor buggy improvements 3 years ago
Arijit Basu 107211a69c
Add ctrl-c handler 3 years ago
Arijit Basu f43ba87a2b
Finish Selected -> Selection renaming 3 years ago
Arijit Basu b70682ecb5
Fix term resize handler 3 years ago
Arijit Basu 54b6a8e4da
Minor fix 3 years ago
Arijit Basu 2c56b80fde
Minor fixes 3 years ago
Arijit Basu f176655325
Some improvements and cleanup 3 years ago
Arijit Basu 341d11a0f3
Fix pipes config 3 years ago
Arijit Basu 3572d26b95
Too big of a rewrite 3 years ago
Arijit Basu 98920637f9
Number input 3 years ago
Arijit Basu 53b18ae8f4
Use # instead of ? to debug app 3 years ago
Arijit Basu 21e4a178c7
Fix escaping relative path
Either escape or quote. Don't do both at once.
3 years ago
Arijit Basu d3f88a1fa5
Display mode in help menu title 3 years ago
Arijit Basu 096489dee4
Use "esc" instead of "escape" 3 years ago
Arijit Basu 7beaec1763
Easier key handling 3 years ago
Arijit Basu 8221140756
Refresh after running command 3 years ago
Arijit Basu 044b7860a1
Fixed fzf search added pwd shell option
Now I can finally use it to replace nnn
3 years ago
Arijit Basu 980fb8728a
Editor fix 3 years ago
Arijit Basu 03fffd19e2
Minor fixes 3 years ago
Arijit Basu df8c03ce2d
Add shell words escaper 3 years ago
Arijit Basu 2e551ce38d
Support for command action 3 years ago
Arijit Basu 758f362fee
Lazy programmer hack for key bindings 3 years ago
Arijit Basu 720ba38b4d
Some important fix (don't look) 3 years ago
Arijit Basu f9c3edee06
Not yet doing what it's supposed to 3 years ago