feat: add open command
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
73
README.md
73
README.md
@@ -1,8 +1,11 @@
|
|||||||
# noil
|
# noil
|
||||||
|
|
||||||
**noil** is a structured, text-buffer-based file operation tool – think of it like [`oil.nvim`](https://github.com/stevearc/oil.nvim), but for any editor, terminal, or automated process.
|
**noil** is a structured, text-buffer-based file operation tool – think of it
|
||||||
|
like [`oil.nvim`](https://github.com/stevearc/oil.nvim), but for any editor,
|
||||||
|
terminal, or automated process.
|
||||||
|
|
||||||
Edit filesystem operations like it's plain text, and then apply them in a controlled, explicit way.
|
Edit filesystem operations like it's plain text, and then apply them in a
|
||||||
|
controlled, explicit way.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -10,17 +13,19 @@ Edit filesystem operations like it's plain text, and then apply them in a contro
|
|||||||
|
|
||||||
## Interactive Mode (TBA)
|
## Interactive Mode (TBA)
|
||||||
|
|
||||||
I am planning an interactive TUI mode, where you don't have to care about tags, like in `oil`. For now the normal editor is quite useful though, and allows all types of editors to easily move, edit files and so on.
|
I am planning an interactive TUI mode, where you don't have to care about tags,
|
||||||
|
like in `oil`. For now the normal editor is quite useful though, and allows all
|
||||||
|
types of editors to easily move, edit files and so on.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ✨ Features
|
## ✨ Features
|
||||||
|
|
||||||
* Edit your file tree like a normal buffer
|
- Edit your file tree like a normal buffer
|
||||||
* Preview, format, and apply changes
|
- Preview, format, and apply changes
|
||||||
* Integrates with `$EDITOR`
|
- Integrates with `$EDITOR`
|
||||||
* CLI first, editor agnostic
|
- CLI first, editor agnostic
|
||||||
* No surprises: nothing is applied until you say so
|
- No surprises: nothing is applied until you say so
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -42,7 +47,7 @@ cat something.noil | noil fmt > something.noil
|
|||||||
cat something.noil | noil apply
|
cat something.noil | noil apply
|
||||||
```
|
```
|
||||||
|
|
||||||
noil will always ask you if you want to apply your changes before doing any operations.
|
noil will ask you if you want to apply your changes before doing any operations.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -56,13 +61,14 @@ Each line follows this format:
|
|||||||
|
|
||||||
### Supported operations:
|
### Supported operations:
|
||||||
|
|
||||||
| Operation | Meaning | Tag Required? |
|
| Operation | Meaning | Tag Required? |
|
||||||
| --------: | --------------------------------- | ------------- |
|
| --------: | ------------------------------------------------------ | ------------- |
|
||||||
| `ADD` | Add new file | ❌ No |
|
| `ADD` | Add new file | ❌ No |
|
||||||
| `COPY` | Copy file with given tag | ✅ Yes |
|
| `COPY` | Copy file with given tag | ✅ Yes |
|
||||||
| `DELETE` | Delete file with given tag | ✅ Yes |
|
| `DELETE` | Delete file with given tag | ✅ Yes |
|
||||||
| `MOVE` | Move file with given tag | ✅ Yes |
|
| `MOVE` | Move file with given tag | ✅ Yes |
|
||||||
| *(blank)* | Reference existing file (default) | ✅ Yes |
|
| `OPEN` | Open a file with a given tag (requires --chooser-file) | ❌ No |
|
||||||
|
| _(blank)_ | Reference existing file (default) | ✅ Yes |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -73,9 +79,11 @@ Each line follows this format:
|
|||||||
COPY abc : /tmp/nginx-copy
|
COPY abc : /tmp/nginx-copy
|
||||||
DELETE 123 : /etc/nginx
|
DELETE 123 : /etc/nginx
|
||||||
ADD : /new/file.txt
|
ADD : /new/file.txt
|
||||||
|
OPEN : /new/file.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
You can use short, unique tags (like `abc`, `ng1`, etc.) to refer to files. `noil` will generate these tags when you run `noil .`.
|
You can use short, unique tags (like `abc`, `ng1`, etc.) to refer to files.
|
||||||
|
`noil` will generate these tags when you run `noil .`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -87,9 +95,11 @@ Want to clean up alignment and spacing?
|
|||||||
cat my-buffer.noil | noil fmt
|
cat my-buffer.noil | noil fmt
|
||||||
```
|
```
|
||||||
|
|
||||||
Or automatically format inside your editor with the following config for [Helix](https://helix-editor.com):
|
Or automatically format inside your editor with the following config for
|
||||||
|
[Helix](https://helix-editor.com):
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
|
# .config/helix/languages.toml
|
||||||
[[language]]
|
[[language]]
|
||||||
name = "noil"
|
name = "noil"
|
||||||
scope = "source.noil"
|
scope = "source.noil"
|
||||||
@@ -102,8 +112,30 @@ formatter = { command = "noil", args = ["fmt"] }
|
|||||||
[[grammar]]
|
[[grammar]]
|
||||||
name = "noil"
|
name = "noil"
|
||||||
source = { git = "https://git.kjuulh.io/kjuulh/tree-sitter-noil.git", rev = "2f295629439881d0b9e89108a1296881d0daf7b9" }
|
source = { git = "https://git.kjuulh.io/kjuulh/tree-sitter-noil.git", rev = "2f295629439881d0b9e89108a1296881d0daf7b9" }
|
||||||
|
|
||||||
|
# .config/helix/config.toml
|
||||||
|
# Optional extra command Space + o will open noil allowing edits and the OPEN command
|
||||||
|
[keys.normal.space]
|
||||||
|
o = [
|
||||||
|
":sh rm -f /tmp/unique-file-kjuulh",
|
||||||
|
# DISCLAIMER: Until noil has a proper interactive mode, we cannot ask for confirmation, as such we always commit changes, you don't get to have a preview unlike the normal cli option
|
||||||
|
":insert-output noil edit '%{buffer_name}' --chooser-file=/tmp/unique-file-kjuulh --commit --quiet < /dev/tty",
|
||||||
|
":insert-output echo \"x1b[?1049h\" > /dev/tty",
|
||||||
|
":open %sh{cat /tmp/unique-file-kjuulh}",
|
||||||
|
":redraw",
|
||||||
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Edit options
|
||||||
|
|
||||||
|
When using `noil edit .` a few additional options are available
|
||||||
|
|
||||||
|
- `--chooser-file`: A chooser file is a newline delimited file where each line
|
||||||
|
corresponds to a relative file to be opened or manipulated by the user. Only
|
||||||
|
items with `OPEN` command will be added to the file
|
||||||
|
- `--commit`: commit files without asking for confirmation
|
||||||
|
- `--quiet`: don't print results
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔒 Safety First
|
## 🔒 Safety First
|
||||||
@@ -123,7 +155,9 @@ You will be prompted before anything is modified.
|
|||||||
|
|
||||||
## 🧠 Philosophy
|
## 🧠 Philosophy
|
||||||
|
|
||||||
noil gives you full control over file operations in a composable and editor-friendly way. Think Git index, but for actual file moves and deletions — human-editable, patchable, and grep-able.
|
noil gives you full control over file operations in a composable and
|
||||||
|
editor-friendly way. Think Git index, but for actual file moves and deletions —
|
||||||
|
human-editable, patchable, and grep-able.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -135,7 +169,6 @@ noil gives you full control over file operations in a composable and editor-frie
|
|||||||
cargo install noil
|
cargo install noil
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
**Build from source**:
|
**Build from source**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
Reference in New Issue
Block a user