* make multiline prompt color configurable
* remove unnused use statements
* minor comment update
* Clippy fix
new lints from rust 1.67
* Cargo fmt
---------
Co-authored-by: sholderbach <sholderbach@users.noreply.github.com>
* custom validator and prompt
* Split prompt and validator demo into two files
Also add info text when running
Co-authored-by: sholderbach <sholderbach@users.noreply.github.com>
* Fix the additional moves of normal mode `hjkl`
Fixesnushell/nushell#6991
Allows using `l` to complete the history hint in normal mode
Support menu navigation with `hjkl` in vi normal mode
Adjusts tests
* Fix clippy
Parameter only used in recursion
* Split the main example binary into examples
Separate fully featured demo from keybinding listing and event listener
Allows to make `gethostname` dev-dependency
* Clippy fix in examples
Alternative to #503
Using `actions-rust-lang` instead of `actions-rs` for
setup. (nushell uses them for setup with integrated caching)
Remove build stage as this should also be covered by test.
clippy --all to see if this checks the examples as well.
7d721a1 introduced the sqlite-dynlib feature, but using it in places
where sqlite is currently used was not possible, because the cfg gates
weren't adjusted yet. This commit replaces each `feature = "sqlite"`
with `any(feature = "sqlite",feature = "sqlite-dynlib")`, meaning that
it doesn't matter which sqlite feature you use, reedline will expose the
same API.
* On backspace, deactivate menu and do not complete
Fixes#5497
* Make Tab insert (partial) completion instead of select next menu item
* Fix history search filtering
* render right prompt on the last line of the left prompt
Closesnushell/nushell#4909
* make rendering the right prompt on the last line configurable
* calculate width of the line where right prompt will be rendered
* `Submit` is used to return data unconditionally. This is useful for
example if you want compiler to show you where the unclosed paren that
doesn't pass validation actually is.
* `SubmitOrNewline` is similar to `Enter` but inserts a new line if the
cursor is not at the end of the buffer. It's useful to insert newlines
in the middle of the text when editing.
This also removes unconditional `KeyCode::Enter` to
`ReedlineEvent::Enter` event mapping and sets it in the keybindings
normally (so you can rebind to `Submit` or `SubmitOrNewline`)
* Remove flicker on external print
Previously each external print was causing a visible flicker on at least
two terminal emulators I've tested (alacritty, xfce4-terminal).
* Make `Painter.print_external_message()` crate local
* Put external_printer Painter members behind flag
* Add `external_printer` feature to CI
Co-authored-by: Stefan Holderbach <sholderbach@users.noreply.github.com>
This change truly separates the actions and the motions on the parsing
side. Bare motions are parsed by the motion parser instead of the
command parser. (This requires a separate `ParseResult` to distinguish
valid but incomplete motions like `f` from invalid motions.)
Fixes#449 by making `.` its own command. Also introduces the
possibility of multiplying the `.` repeat and resticts its effect to the
action commands and ignores the bare moves.
Simplify and make the `;` and `,` behavior more correct:
- Place info in the `Vi` state instead of complicated in-band signal
- Support using it with `d;` and `c;`
- Store the character search when combined with an action
- Rename `ViToTill` more explictly to `ViCharSearch`
- **Missing:** the old tests were removed as they tested old quirks
The above change also leads to proper separation of concern between
parsing and translation to emacs commands (and subsequent execution).
Add support for combining `d/c` with `h/l`.
**Note:** `j/k` are still omitted as they require new behavior in the
linebuffer/editor. Also `dj` has to add 1 to the multiplier to achieve
the correct behavior as we do not model line ex-/inclusive behavior.
Rename `ParseResult` to `ParsedViSequence`
Simplify validity checking in `mod.rs` and have explicit check methods
on the types. This fixes problems with `r` and `f/t/T/F` in their
partial and complete state and adds a missing test.
Rename `last_to_till` to `last_char_search`
I discovered a limitation in how we handle character searches with a
multiplier in the case the search character appears in a consecutive
sequence.
Fixing this correctly probably requires performing the search with
knowledge of the multiplier.
Take into account that only the product of the `multiplier` and `count`
are relevant to execute motions.
From 140f6d0eda/runtime/doc/motion.txt (L63-L70)
> If the motion includes a count and the operator also had a count before it,
> the two counts are multiplied. For example: "2d3w" deletes six words.
> When doubling the operator it operates on a line. When using a count, before
> or after the first character, that many lines are operated upon. Thus `3dd`
> deletes three lines. A count before and after the first character is
> multiplied, thus `2y3y` yanks six lines.
Necessary to complete nushell/nushell#6590
(Comment: this whole module feels intricately linked to the nushell
implementation as we do not implement the string parsing in reedline)
* change history session_id to a systematically generated number
* added env var, removed comments
* tweak test
* add public function to get the history session id
* switch from reedline commit date to unix_epoch
* Fix vi character search parsing
Fixes#473
The parser has to consume the items from the iterator to be in a
consistent state!
* Move `ViToTill` logically to `motion.rs`
* Add basic regression test for #473
Addresses #320, #236
* Adding External printer
* Made ExternalPrinter as an optional feature. Clippy is happy, test pass, docs added.
* ExternalPrinter: prints multiple messages if available, more on error-handling.
* Bug(s) fixed. Prints messages. Working example in examples folder. Code formatted, clippyed, tests pass.
* Generic ExternalPrinter<T> where T: Display.
* Fixed: Works with buffers larger than a line.
* Fixed: Works with buffers larger than a line, refactored.
* Different approach, seems to look like what is expected. Gives the "illusion" of one line being entered. Needs more testing, could have some off by one errors ;)
Co-authored-by: Gregor Engberding <gregor@meinkopter.de>
This allows nushell to implement a command similar to fish's `commandline`:
https://fishshell.com/docs/current/cmds/commandline.html
that would allow commands run via `executehostcommand` bindings to do interesting
things to the contents of the input buffer.
This is necessary to avoid the problem with running executehostcommand keybindings in nushell
right after launching it (without having run actual user-input commands yet).
Since the error types are not exposed outside of the crate, we have to use a check instead of
matching on the error.