Commit Graph

521 Commits

Author SHA1 Message Date
Stefan Holderbach
1553c77e40
Test and fix line buffer utils (#224)
- current line detection was off on the first position of a following
line
- find_current_line_end was not correctly aware of CRLF platforms
- Increase of coverage for some old functions
2021-12-31 08:25:14 +11:00
JT
a8153cf69a
Make StyledText easier to work with (#225)
* Make StyledText easier to work with

Make the contents of StyledText pub to make it easier to work with

* Update styled_text.rs
2021-12-30 22:25:07 +01:00
Leo Kettmeir
b3eec539b8
fix: make traits Send (#223)
* send sync

* fmt

* only Send

* add test
2021-12-31 08:23:22 +11:00
Stefan Holderbach
b242a030aa
Make the editing operations aware of multiline (#219)
- Moves to start and beginning of the line
- Make start and end of buffer available for move via `Ctrl-Home` and
`Ctrl-End`
- Support vi style cutting of whole lines in the cut buffer.
- add vi style `p` after paste in addition to before cursor paste with
`P` or in emacs mode
- Enables vi style `dd` and paste
- Make sure the line to end cut and clear operations work only on the
line
2021-12-29 18:07:27 +11:00
David Lattimore
02e13f1e17
Cargo.toml: Add repository link (#216) 2021-12-28 12:19:00 +01:00
Stefan Holderbach
afa83d9e70
Disable hints during history traversal (#215)
* Disable hints during history traversal

Additional autosuggestion (history) hints are confusing while
navigating through the history.

Example history:
```
hello test
hello
something else
hello world
whatever
```

- Type `h`
- Press up arrow
- Prefix based history search will return `hello world`
- Press up arrow again
- Previously `hello <hint>world</hint>` now just `hello`

* Reduce code duplication before painting
2021-12-27 19:21:18 +01:00
Fernando Herrera
7c75ed6c62
vi insert mode kept after enter (#214) 2021-12-27 12:16:37 +01:00
Fernando Herrera
f9a6806e01
vi insert mode default (#213) 2021-12-27 11:28:07 +01:00
Stefan Holderbach
8895756054
Improve history internals (#212)
* Move history newline escape to the file IO

Avoids potential interference with history search, makes
`History::iter_chronologic` nice again, simplifies it regarding hints
and should address the `history` command in a better way.
+ Extract escape
+ Remove unwrap

* Remove unnecessary optional history allocation

No need to clone if entry is duplicate or empty
2021-12-27 00:05:50 +01:00
Fernando Herrera
fbd7b20e8c
vi mode commands (#211)
* vi mode commands

* added search to left

* reordered files

* clippy corrections

* utf8 character offsets

* check valid input

* test has garbage

* Fix `f<char>` move starting on multibyte char

* Fix formatting

* added append command

* correcting failing tests

* append command doesnt require repaint

* Pedantic fixes

- Terminate statements with ;
- Make char references copies for performance

Co-authored-by: sholderbach <sholderbach@users.noreply.github.com>
2021-12-26 18:13:44 +00:00
JT
3acf7da71a
Minor history fix (#210) 2021-12-23 12:35:39 +11:00
JT
5d0e803b9d
Another multiline decode (#209) 2021-12-23 10:58:20 +11:00
JT
328c86e38d
improve multiline paste (#208) 2021-12-23 09:32:07 +11:00
Stefan Holderbach
adc6b1f649
Attempt at consolidating offset calculations and streamlining the painting (#164)
* Offset setting changes

* Rename `PromptWidget` to `PromptCoordinates`
* Explicit setters
* Set offset implicitly on `full_repaint`

* Rename origin and offset

As suggested by JT

origin -> prompt_start

offset -> input_start

* Move tracking of offsets and size into painter

Relatively basic refactor of all tracking of prompt/input offsets as
well as the terminal size into the painter.

Some cooperative behavior in the engine is still required

Wrapping handler is currently still a crutch in the engine as it is not
`InsertChar` specific and should be handled for every buffer change
instead

* Simplify restore from history stearch

Prompt is simply updated via full repaint

* Fix ansi coloring for history prompt

also ignore reset color in non ansi colored mode

* Make pedantic clippy happier

* Ensure prompt creation is tight and not wrapping

Fix additional line that is created upon prompt creation if the previous
output was printing a new line. Also ensures that line clearing and
regular prompt creation at the bottom of the screen doesn't cause
scrolling issues (Currently a hardcoded solution for the two line
prompt)

Also reduces the API surface for tools only necessary to deal within raw
mode.

* Fix doctests for internals removal

`print_crlf()` was removed from the public API as it should only be used
in raw mode for internal stuff.
As soon as we leave `Reedline.read_line()` raw mode should be disabled
and the regular print macros should work as expected
2021-12-22 23:14:58 +01:00
JT
2ddeb76ff4
Simple multiline history (#207) 2021-12-23 06:59:55 +11:00
JT
fb152af5f4
Adjust prompt position after paste (#206) 2021-12-23 06:27:09 +11:00
Fernando Herrera
792ee12344
defining paste event (#205) 2021-12-23 06:17:18 +11:00
JT
ae7e930119
Complete to the latest history (#204) 2021-12-22 20:18:47 +11:00
JT
c810d65a9d
Add a history-specific completer (#203)
* Add a history-specific completer

* Document api
2021-12-22 19:38:24 +11:00
JT
349f66b7b3
Apply history on tab (#202) 2021-12-22 19:12:45 +11:00
Stefan Holderbach
0f0a557479
Disable raw mode with Drop for panics (#201)
Panicking inside reedline (or bubbling up an Err inside reedline's
critical sections that gets unwrapped/expected by the hosting
application) leaves the terminal in a bad state. Workaround that should
also work without cooperation by the consumer would be to include a call
to `disable_raw_mode` in the `Drop` trait. With standard stack-unwinding
panics will call the drop.

Calling `crossterm::terminal::disable_raw_mode` twice seems to be fine
if the program started in non-raw mode (under linux)
2021-12-20 21:16:28 +11:00
Stefan Holderbach
44826d2f6d
Remove additional line on line clear via Ctrl-C (#200)
Additional line was a crutch introduced to counteract misbehavior fixed
in #77

Similar behavior was already sneaked into engine-q with https://github.com/nushell/engine-q/pull/508
2021-12-19 22:34:32 +01:00
JT
e512512dd4
Crlf fixes (#199)
* Add some wrapping estimate when adjusting prompt

* Add some crlf fixes for Windows multiline
2021-12-15 06:47:53 +11:00
JT
4da6a82ae6
Add some wrapping estimate when adjusting prompt (#198) 2021-12-14 06:34:29 +11:00
Darren Schroeder
6884ec4062
add the ability to optionally turn off ansi coloring (#197)
* add the ability to optionally turn off ansi coloring

* also strip from the hinter
2021-12-09 21:48:08 +01:00
Stefan Holderbach
a44a590b25
Fix clippy style and remove unecessary stuff (#192)
- remove unused members, found after update to Rust 1.57
- semicolon termination in void blocks
- other clippy pedantic prompted fixes (e.g. docstrings, unnecessary borrows)
2021-12-02 23:22:12 +01:00
Stefan Holderbach
2d34d100bd
Improve undo of EditCommands (#191)
* Improve undo of EditCommands

Address #190

Formalize the undo role of different edit commands via exhaustive
matching

Will track every move, but won't cause inconsistent cursor jumps while
undoing
2021-12-02 23:21:09 +01:00
Antonio Natilla
82bc3acb64
Forwarding Prompt's multiline indicator (#185)
* Multiline continuation prompt introduced

* Hardcoded multiline continuation prompt styling

A way to convert `crossterm::style::Color` in `nu_ansi_term::Color` must
be found/implemented. This enables creating a Style from it.
Otherwise, it is necessary that the Style of the prompt is accessible
from everywhere.

* Forward Prompt's multline prompt to rendering func

* Finish #185

Co-authored-by: Antonio Natilla <antonio.natilla@studenti.unimi.it>
Co-authored-by: sholderbach <ho.steve@web.de>
2021-12-01 12:18:49 +01:00
Stefan Holderbach
2bc7046066
Fix busy polling when animation is disabled (#188)
Addresses https://github.com/nushell/engine-q/issues/386

Breaks the API for variable refresh times, standardizes on one second
and simply optionally disables the automatic repaint.
2021-11-30 16:25:06 +01:00
Stefan Holderbach
b19ea8d9b4
Fix cursor flickering for full repaint (#187)
Avoids jumping cursor to the prompt on full repaints of the standard
buffer. Does not completely remove a perceptable flicker at the fixed
position if animation is active.

Partially addresses #174 as other cases still need to be checked for
cursor updates
2021-11-29 23:00:58 +01:00
Antonio Natilla
75d9b4b52d
Simple multiline continuation prompt (#184)
* Multiline continuation prompt introduced

* Hardcoded multiline continuation prompt styling

A way to convert `crossterm::style::Color` in `nu_ansi_term::Color` must
be found/implemented. This enables creating a Style from it.
Otherwise, it is necessary that the Style of the prompt is accessible
from everywhere.

Co-authored-by: Antonio Natilla <antonio.natilla@studenti.unimi.it>
2021-11-24 20:10:55 +13:00
JT
c11aef2d9b
Handle the bottom resize a little better (#182) 2021-11-11 19:00:17 +13:00
JT
730147167c
Handle the bottom resize a little better (#181) 2021-11-11 16:55:38 +13:00
Josh
a16f96863d
fn queue_buffer probably didn't mean to flush; Simplified engine->insert_char and removed the need to create a String at each insert. (#180)
* `fn queue_buffer` probably didn't mean to flush :)

* Simplified insert_char, and removed the need to create a String at each insert

* rust fmt
2021-11-11 08:19:10 +13:00
Stefan Holderbach
1b24499298
Improvements to handling of incoming events (#179)
* Drain crossterm events, prioritize last resize

This attempts to address #166, some slowness is still observed

Co-authored-by: JT <547158+jntrnr@users.noreply.github.com>

* Fix timing of repaint with drained events

* Initial code to coalesce edit commands

Co-authored-by: JT <547158+jntrnr@users.noreply.github.com>
2021-11-10 13:59:17 +13:00
Stefan Holderbach
550ce9b486
Bump dependency versions (#177) 2021-11-08 10:49:30 +13:00
Antonio Natilla
9218158903
Curly braces fix in vim events (#173)
Support for Shift-AltGr is required for several European keyboards (e.g. italian) #169 #136 #139 #171

* Curly braces fix

* Curly braces fix for vim events

Co-authored-by: Antonio Natilla <antonio.natilla@studenti.unimi.it>
2021-11-06 14:20:18 +01:00
Stefan Holderbach
ee0c274600
Fix printing in #170 (#172)
Small printing bug introduced due to raw mode had to be fixed
2021-11-05 23:19:07 +01:00
Antonio Natilla
e159f3fd0d
Curly braces fix (#171)
Co-authored-by: Antonio Natilla <antonio.natilla@studenti.unimi.it>
2021-11-05 22:56:20 +01:00
Stefan Holderbach
d832449a51
Provide more details in the keyevent debugger (#170)
Inform about the character code and the bit pattern of the modifier to
debug more subtle problems with key events
2021-11-06 10:22:42 +13:00
Josh
75a2ca0761
Builder to customize and disable idle animations (#168)
* Introduced 'repaint' flag on struct ReedLine, and associated builder function

* Added builder to configure and disable idle animations

* Ran `cargo fmt` and `cargo clippy`
2021-11-06 07:17:32 +13:00
JT
68a6ab4e5b
Expose line buffer (#165)
* Add list style completions

* Expose the LineBuffer struct
2021-10-16 07:28:53 +13:00
JT
6fedafffb7
Update LICENSE (#163) 2021-10-07 06:49:16 +13:00
JT
88bded3417
Add list style completions (#162) 2021-10-05 10:32:21 +13:00
Marco Zanrosso
de0f399650
[BugFix] undo function (#143)
* [BugFix] undo function

This commit solves the problem that when the undo function is performed,
for some reason the buffer remained with 1 character.

The FIX consists in correcting the logic of the current implementation
by bringing it to the initial design state; Where the vector of the
buffer had been initialized with an empty entry so that when performing
many times the undo brought you back to an initial condition with
the blank buffer rather than show you the first character.

* [Add] doc-test for set_previous_lines

This test was created specifically to check that the insertion
of characters and words in the Editor.edits vector works properly.

* Replace doctest with unittest

This does not require exposing private functionality as pub

* Fix naming according to #160

Co-authored-by: sholderbach <ho.steve@web.de>
2021-10-03 23:01:01 +02:00
Stefan Holderbach
f03c036ba4
Fix links in lib.rs 2021-10-03 22:16:42 +02:00
Stefan Holderbach
8a09f75dee
Clarify method names for undo-interface (#160)
Minimal change to make undo machinery of `Editor` more explicit.
2021-10-04 09:11:59 +13:00
Stefan Holderbach
2ecda6e681
Fix README badges (#161)
Account for the move to the nushell org
2021-10-04 09:07:03 +13:00
Stefan Holderbach
38bf8e469c
Simplify and document history trait (#159)
Inspired by #158
2021-10-04 09:05:58 +13:00
Stefan Holderbach
87ce437d89
Fix CtrlD/CtrlC and reverse-history-search + stuff (#155)
* Fix CtrlD/CtrlC and reverse-history-search + stuff

- `Ctrl+C` and `Ctrl+D` did not work after the changes in #138 and #146
  - Fixed by only registering the `ReedlineEvent` and defering
potentially necessary edits to the `handle_event` stage
  - Defined their behavior for the reverse history search
  - Corrected interactions with undo (as best as I could understand it)
- Reverse history search did not allow for browsing through its results
  - Fixed `handle_history_search_event` and simplified the cases
- Register undo steps for the reverse history search (when entering and
leaving via enter)
- Added comments to similar sounding methods and variants (UPDATE IF
NECESSARY!)
- Moved the repaint stuff closer together in engine.rs for better
readability
- Noncritical stuff that caught my eye

* Test first/last line detection
2021-10-03 19:44:23 +02:00