Commit Graph

193 Commits

Author SHA1 Message Date
Stefan Holderbach
b6f47f020a
Hide hint when finishing line entry (#250)
Fixes #239
2022-01-13 22:39:03 +01:00
Fernando Herrera
9ec02cb738
menu improvements (#249) 2022-01-14 02:48:26 +11:00
Fernando Herrera
63aeeb62e4
menu with tab (#248) 2022-01-12 09:53:15 +00:00
Fernando Herrera
2cb2e40195
Context menu with completer (#247)
* menu filler builder

* context menu with completer
2022-01-11 21:17:15 +00:00
Fernando Herrera
4c75c36e4d
menu filler builder (#246) 2022-01-10 20:39:09 +00:00
Fernando Herrera
af19a7bfc6
Context menu (#243)
* vi keybinding events

* context menu for reedline

* corrected tests

* text style for menu
2022-01-10 20:17:31 +00:00
JT
a5b6cc079b
Right arrow is full hint completion (#244) 2022-01-10 11:06:45 +11:00
Fernando Herrera
eed17392cb
remove position function (#242) 2022-01-07 18:33:18 +11:00
JT
373c76a383
Double prompt (#241)
* support double prompt

* clippy warning

* better cursor position

* Move to estimating the right prompt cutoff

* refactor to use line_width

* refactor to use line_width

Co-authored-by: Fernando Herrera <fernando.j.herrera@gmail.com>
2022-01-06 22:01:47 +11:00
Fernando Herrera
811dde6d03
corrected extra line (#238)
* corrected extra line

* corrected extra line

* calculating remainig lines
2022-01-03 13:30:29 +00:00
Fernando Herrera
4b6055dccf
corrected extra line (#237) 2022-01-03 10:24:23 +00:00
Fernando Herrera
dcf8ff3f7a
Big buffer (#230)
* test big buffer

* clippy error

* more clippy corrections

* extra else for position

* debug cursor

* moving to debug section

* hints in big buffer

* case for prompt one line

* corrected extra line
2022-01-03 10:13:08 +00:00
Stefan Holderbach
a2682b50f9
Improve and highlight history search (#234)
Fixes `history_search_paint`:
- Fix unnecessary clear of single line
- Ensure LF to CRLF in search results

Fixes `Painter`:
- Make sure that Color is cleared after prompt (Currently depends on
Highlighter to provide a new color)
- Remove unnecessary fn

Introduce simple highlighting of the search term in the search result:
- Introduce `SingleMatchHighlighter` that will highlight all matches of
the search string
- Rename `DefaultHighlighter` to `ExampleHightlighter` as the behavior
seems not very useful for default use.
- Extract styling operations into styled text
2022-01-02 20:26:30 +01:00
Stefan Holderbach
aefc2965d1
Add issue templates (#235)
* Add issue templates

As we often have to consider certain platform/terminal editor specific things as potential sources of bugs, let's nudge people to provide this info

* Delete githubs default form
2022-01-02 20:24:47 +01:00
Stefan Holderbach
1da1e848bf
Insert strings directly (#233)
There are latent concerns about unicode correctness, but as long as
crossterm/hints are providing correct chars/strs this is neither a security risk
(no unchecked/unsafe string ops on our side) nor
a DoS risk.
2022-01-02 20:24:17 +01:00
Stefan Holderbach
2c24ff6140
Bump dependency versions (#232)
Make sure we are up to date on unicode crates et al.
2022-01-02 20:19:11 +01:00
Stefan Holderbach
c1021f6f35
Improve correctness of move operations (#231)
- Made move up and move down unicode safe
- Added the option to constrict the char search (vi `f` `F` `t` `T`) to
the current line as usual in vi
- Improved test coverage
2022-01-02 20:17:57 +01:00
JT
07696fe06d
strip ansi before estimate (#229) 2022-01-01 15:50:06 +11:00
JT
b82b6ebd35
Estimate wrapping (#228)
* Add wrap estimates to line counting

* Remove adjust_prompt_position
2022-01-01 11:25:32 +11:00
JT
3292aaa2b4
Let anims handle resize (#227) 2022-01-01 08:33:19 +11:00
Fernando Herrera
5401b4ec58
adjust position to insert in middle (#226) 2021-12-31 21:42:29 +11:00
Fernando Herrera
913e58d4a9
prompt moves based on hint (#217)
* prompt moves based on hint

* checked sub for the prompt

* checked sub for the prompt

* using promplines

* clean flush

* split lines before print

* test with full print

* test with full print

* removed flush

* no split

* drawing function with prompt

* replacing space return to string

* history search in repaint buffer

* using last row

* removed extra required lines
2021-12-31 10:34:11 +11:00
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