Commit Graph

380 Commits

Author SHA1 Message Date
Arijit Basu
5c6fd1ef63 Update version 2021-06-16 14:43:40 +05:30
Arijit Basu
329821ca1b Improve FocusNext and FocusPrevious behavior
Closes: https://github.com/sayanarijit/xplr/issues/253
2021-06-16 14:38:54 +05:30
Arijit Basu
4d8f1ef2ef Fix handling of relative paths
Closes: https://github.com/sayanarijit/xplr/issues/255
2021-06-16 14:29:36 +05:30
Arijit Basu
f6d1be61d5 Add quit mode and key bindings
`:q<enter>` -> Just quit.
`:qp` -> quit printing pwd.
`:qf` -> quit printing focus.
`:qs` -> quit printing selection.
`:qr` -> quit printing result.

Ref: https://github.com/sayanarijit/xplr/issues/257
2021-06-16 13:59:33 +05:30
Arijit Basu
6b03598b5d Add more quit options
Adds the following messages.

- PrintPwdAndQuit
- PrintFocusPathAndQuit
- PrintSelectionAndQuit

Closed: https://github.com/sayanarijit/xplr/issues/257
2021-06-16 13:59:33 +05:30
Arijit Basu
6a70b568bf Fix FocusPath issue
Fixes: https://github.com/sayanarijit/xplr/issues/249
2021-06-08 23:42:03 +05:30
Arijit Basu
f1ffc551fc Minor addition 2021-06-06 14:27:10 +05:30
Arijit Basu
844480204c Support specifying read-only mode via CLI argument
Closes: https://github.com/sayanarijit/xplr/issues/22
2021-06-06 14:13:39 +05:30
Arijit Basu
f12e1e5290 Fix config path on macOS
Also, add `-c` / `--config` CLI option to specify custom config file.

Priority is:

`-c <PATH>` > `~/.config/xplr/init.lua` > `/etc/xplr/init.lua`.

Fixes: https://github.com/sayanarijit/xplr/issues/230
2021-06-06 13:50:43 +05:30
Arijit Basu
1513c325d6 Add option to disable recover mode
Use `config.general.disable_recover_mode = true` to disable the recover
mode.

Closes: https://github.com/sayanarijit/xplr/issues/232
2021-06-06 12:40:13 +05:30
Arijit Basu
a2f42ac6fc Add support for FIFO based previewer
Adds basic support for nnn-like FIFO based previewer.

The FIFO can be manager with the following messages:

- StartFifo: /path/to/fifo
- StopFifo
- ToggleFifo: /path/to/fifo

A basic nnn plugin wrapper example:

```lua
-- Usage Example:
--
--   require("nnn_preview_wrapper").setup{
--     plugin_path = os.getenv("HOME") .. "/.config/nnn/plugins/preview-tabbed",
--     fifo_path = "/tmp/xplr.fifo",
--     mode = "action",
--     key = "p",
--   }
--
-- Press `:p` to toggle preview mode.

local function setup(o)

  if o.fifo_path == nil then
    o.fifo_path = os.getenv("NNN_FIFO")
  end

  if o.mode == nil then
    o.mode = "action"
  end

  if o.key == nil then
    o.key = "p"
  end

  local enabled = false
  local message = nil

  os.execute('[ ! -p "' .. o.fifo_path ..'" ] && mkfifo "' .. o.fifo_path .. '"')

  xplr.fn.custom.preview_toggle = function(app)

    if enabled then
      enabled = false
      message = "StopFifo"
    else
      os.execute('NNN_FIFO="' .. o.fifo_path .. '" "'.. o.plugin_path .. '" & ')
      enabled = true
      message = { StartFifo = o.fifo_path }
    end

    return { message }
  end

  xplr.config.modes.builtin[o.mode].key_bindings.on_key[o.key] = {
    help = "search with preview",
    messages = {
      "PopMode",
      { CallLuaSilently = "custom.preview_toggle" },
    },
  }
end

return { setup = setup }
```

Press `:p` to toggle preview mode.

Closes: https://github.com/sayanarijit/xplr/issues/205
2021-06-06 12:29:08 +05:30
Arijit Basu
2962a8d52d Further improve the API.
This improves the compatibility and adds the ability to introduce
non-breaking changes by using a builder pattern.

Example:

```rust
fn main() {
    match xplr::runner(None).and_then(|a| a.run()) {
        Ok(Some(out)) => print!("{}", out),
        Ok(None) => {}
        Err(err) => {
            if !err.to_string().is_empty() {
                eprintln!("error: {}", err);
            };

            std::process::exit(1);
        }
    }
}
```
2021-06-06 10:59:48 +05:30
Arijit Basu
fd3e8a5a9f
fix discord link 2021-06-05 21:33:11 +05:30
Arijit Basu
fabcc8e865 Implement CLI arguments
Going with custom CLI parsing for minimalism and flexibility.

Closes: https://github.com/sayanarijit/xplr/issues/228
2021-06-05 13:11:54 +05:30
Arijit Basu
a1a1dee4af Remove --locked
Many crates are outdated. One is even yanked. IMO failing build is
better than running with insecure/bad dependencies.

Ref: https://github.com/sayanarijit/xplr/issues/212#issuecomment-855175144
2021-06-05 09:03:43 +05:30
Arijit Basu
9a22c8b423 Fix pgp publishing attempt 4 2021-06-05 08:31:50 +05:30
Arijit Basu
7e35ff42fc Fix pgp publishing attempt 3 2021-06-05 08:23:03 +05:30
Arijit Basu
6991db8c33 Fix gpg publishing attempt 2 2021-06-05 08:06:42 +05:30
Arijit Basu
cb13736a9f Fix releasing gpg signature 2021-06-05 07:59:37 +05:30
Arijit Basu
c5e97d5bae Sign releases with pgp
Closes: https://github.com/sayanarijit/xplr/issues/131
2021-06-05 07:42:39 +05:30
Arijit Basu
902f20aa83 Fix focus jumping
Fixes: https://github.com/sayanarijit/xplr/issues/211
2021-06-04 23:02:15 +05:30
Arijit Basu
36ab821d2c Upgrade dependencies
Closes: https://github.com/sayanarijit/xplr/issues/187
2021-06-04 21:52:25 +05:30
Arijit Basu
7496f5bf8f Disable mouse by default and bind :m to toggle
- Make mouse disabled by default.
- Add key binding `:m` to toggle mouse.

Closes: https://github.com/sayanarijit/xplr/issues/206
2021-06-04 19:16:45 +05:30
Arijit Basu
7de0811eaf No need to "Refresh" explicitly
Closes: https://github.com/sayanarijit/xplr/issues/207
2021-06-04 18:12:56 +05:30
Arijit Basu
81854b9323 Use --locked when releasing
Closes: https://github.com/sayanarijit/xplr/issues/212
2021-06-04 17:47:56 +05:30
Arijit Basu
72a86f8e0e Polish xplr library API
Minor improvements to the xplr library API.

Closes: https://github.com/sayanarijit/xplr/issues/213
2021-06-04 17:38:49 +05:30
Arijit Basu
69ac8883ab Check xplr compilation daily
https://github.com/sayanarijit/xplr/issues/208 should never happen
again. This added check will notify me if `xplr` compilation starts
failing.
2021-06-01 19:23:24 +05:30
Arijit Basu
6412856d73 Improve docs 2021-05-28 10:03:22 +05:30
Arijit Basu
b284124022 Optimize rendering speed by serializing less
Serializing to and from Lua value is expensive. Hence, once serialized,
we should reuse the value.
2021-05-28 08:20:24 +05:30
Arijit Basu
fc7d205d92 Improve CallLua and CallLuaSilently
Pass a custom table, optimized for convenience and speed.
2021-05-27 10:35:57 +05:30
Arijit Basu
695acf5c1e Inherit node types config
Inherit `node_types` config instead of overwriting it.

Closes: https://github.com/sayanarijit/xplr/issues/200
2021-05-27 08:51:47 +05:30
Arijit Basu
88aedddf53 Fix rustc 1.50 compatibility 2021-05-25 16:24:37 +05:30
Arijit Basu
b4247a7d03 Improve CallLua, mime_essence, permissions
Refs:
- https://github.com/sayanarijit/xplr/issues/187
- https://github.com/sayanarijit/xplr/issues/194
- https://github.com/sayanarijit/xplr/issues/195
2021-05-25 14:52:04 +05:30
Arijit Basu
9b02ef3429 Fix "ctrl-i" key for history navigation
Unfortunately, "ctrl-i" doesn't work unless "tab" i sremapped to the
key.
2021-05-24 16:23:01 +05:30
Maxim Baz
eef4d92548 Remove extra spaces 2021-05-24 15:34:29 +05:30
Maxim Baz
d51848daf9 Fix typo 2021-05-24 15:18:38 +05:30
Arijit Basu
6663f0851a
Update CONTRIBUTING.md 2021-05-24 14:20:10 +05:30
Arijit Basu
aa7a441751 Make mode visible in input/logs panel
Also, map ":q" to "quit" action.

Ref: https://github.com/sayanarijit/xplr/issues/158
2021-05-24 13:09:22 +05:30
Arijit Basu
db669cdcbf Remove "remaps:"
Remaps has been removed to simplify key bindings. With Lua, it's now
possible to remap using basic assignments.

For e.g.

```Lua
xplr.config.modes.builtin.default.key_bindings.on_key["v"] = xplr.config.modes.builtin.default.key_bindings.on_key.space
```

Help menu will auto detect remapped keys and display after removing the
redundant mappings.

Ref: https://github.com/sayanarijit/xplr/discussions/183#discussioncomment-774159
2021-05-24 12:02:44 +05:30
Arijit Basu
cb695fcaa7 Add colorful permissions
Ref: https://github.com/sayanarijit/xplr/issues/187
2021-05-24 10:26:27 +05:30
Arijit Basu
91838f88ce Fix symlink handling
- Broken symlink should display without error.
- Display the symlink destination.
- Fix deleting symlinks pointing to a directory.

Fixes: https://github.com/sayanarijit/xplr/issues/185
2021-05-23 20:36:14 +05:30
Arijit Basu
b86be16ee3 Make structs public
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.
2021-05-23 10:16:45 +05:30
Arijit Basu
74a0ecb922 Fix icons 2021-05-23 10:16:45 +05:30
Arijit Basu
a80bf2d683 Final touches for v0.10.0 2021-05-23 07:32:30 +05:30
Arijit Basu
b99fa927bf Get out of beta now 2021-05-22 23:35:37 +05:30
Arijit Basu
bfdb7736b9 Simplify pipe reader
Make pipe readers and call lua behave in a similar way.
2021-05-22 21:08:21 +05:30
Arijit Basu
84a50a8fde Add CallLua and CallLuaSilently
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`.
2021-05-22 21:08:21 +05:30
Arijit Basu
cdb3560e12 Read input pipe only once when commands execute
The initial idea was to enable other tools to control `xplr` via the
input pipe. However, so far I didn't feel the need to use this feature.
And even if there is any need, it's much better to implement ad-hoc
services instead of wasting cpu resources.
2021-05-22 19:04:52 +05:30
Arijit Basu
10e874afe7 Fall back to default config when custom config fails
When the custom `init.lua` is corrupt, xplr will fall back to default
configuration, logging the encountered error after load.
2021-05-22 16:17:03 +05:30
Arijit Basu
f9d13e5e4c Fix initial directory sync issue 2021-05-22 14:46:16 +05:30