Commit Graph

424 Commits

Author SHA1 Message Date
Antoine Büsch
7d08fc8d29
Clipboard graceful handling (#712)
* Gracefully handled lack of system clipboard

If the `system_clipboard` feature is enabled, but we failed to
initialize the `SystemClipboard`, default to `LocalClipboard` instead of
panicking.

* Remove `eprintln!()` when failing to access system clipboard
2024-01-23 11:25:28 +02:00
maxomatic458
cbb56e25d0
get back the ranges of the strings from the completer used for generating completions (#713)
* get correct cursor pos when menu indicator contains newline

* add tests

* fix cursor pos in multiline prompt

* make description mode enum public

* add doc comment

* respect windows newline in update_values

* Revert "respect windows newline in update_values"

This reverts commit 070d600545.

* add complete_with_base_ranges to Completer

* add builder for correct_cursor_pos

* add config options to completion examples
2024-01-22 13:08:52 -08:00
Tastaturtaste
135dd5202f
Remove conflicting keybindings added with https://github.com/nushell/reedline/pull/689#issue-2057714568, to fix https://github.com/nushell/nushell/issues/11600#issue-2092758889 (#715) 2024-01-22 14:17:45 -06:00
andreistan26
d9db6a84b7
Fix panic when history size set to 0 (#653)
* Fix file based history when capacity is set to zero

Signed-off-by: Andrei Stan <andreistan2003@gmail.com>

* Fix CI

Signed-off-by: Andrei Stan <andreistan2003@gmail.com>

---------

Signed-off-by: Andrei Stan <andreistan2003@gmail.com>
2024-01-20 19:25:02 -08:00
maxomatic458
9ca229de32
get correct cursor pos when menu indicator contains newline (#708) 2024-01-20 13:17:29 -06:00
maxomatic458
a3769f9b98
respect windows newline in update_values (#709) 2024-01-20 12:17:53 -06:00
maxomatic458
31eaeeb231
ide style completions (#696)
* ide style completions

* descriptions

* truncate suggestion & description

* border width

* clippy & typos

* run cargo fmt

* add with_description_offset to builder

* fix empty description

* minimize description padding

* rework working details handling + fix CI

* add tests + change split function

* fix multiline prompt cursor pos
2024-01-18 10:37:06 -06:00
Tastaturtaste
2f3eb3e82f
Add ability to select and cut text in the input buffer (#689)
* Add ability to select and cut text in the input buffer

* Add visual selection effect

* Add SelectMoveWord<Left/Right> command on Shift + Ctrl + Arrow

* Add ability to delete selection with EditCommands 'Delete' and 'Backspace'

* Make selection an option on every move EditCommand

* Add display text for optional 'select' parameter to move EditCommands
2024-01-17 12:03:42 -06:00
Tastaturtaste
dc27ed8ff4
Replace clipboard with arboard, which is actively maintained (#705) 2024-01-14 17:59:59 -06:00
Darren Schroeder
ef7b96c157
Revert "Fix move to line start in multi-line history entries" (#704) 2024-01-11 15:41:29 -06:00
Yash Thakur
0c5f981746
Don't slice line in DefaultCompleter (#695)
* Don't slice line in DefaultCompleter

* Revert completions example

* Fix clippy lint

* Treat input as '' if None

* Update values even if string_difference empty

* Rename start to pos in list_menu

* Fix string_diff bug with repeated char

* Trim before completing in DefaultCompleter

* Remove TODO

* Make HistoryCompleter take end as pos
2024-01-11 10:13:20 -06:00
Yash Thakur
3e2c0fef3b
Print after cursor until newline (#700) 2024-01-11 09:29:07 -06:00
Mark Murphy
7404f70bf7
Fix move to line start in multi-line history entries (#584)
* Add move-to-line-start tests

* Fix #582 edit commands jumping to end of buffer after history navigation

* Fix formatting
2024-01-11 08:16:06 -06:00
Clément Nerma
b2f265014d
Make ReedlineErrorVariants public (#679)
* Make `ReedlineErrorVariants` public

* Fix: add missing comments
2024-01-11 08:11:58 -06:00
WindSoilder
b68ce33c75
Try fix prompt_start_row reset to 0 when opening a file without newline in Nushell (#697)
* adjust is_reset

* add a word

* Revert "add a word"

This reverts commit e61be57724.
2024-01-05 16:37:52 -06:00
WindSoilder
aa101f4d69
fix clippy, add typo dict (#698) 2024-01-04 07:44:18 -06:00
Stefan Holderbach
f3962232ba
Fix clippy from the future (#687)
- `get_first`
2023-12-26 17:00:40 +01:00
nibon7
e097b88dab
Fix prompt_start_row reset to 0 after output without CR (#688) 2023-12-23 17:52:40 +01:00
Daniel Somerfield
a4bfaa512b
Better behaviour on resize (#675)
* First shot at resolving the resizing issues with terminals

* Comment for known bug

* Checking the start row repeatedly to see how it affects performance

---------

Co-authored-by: Daniel Somerfield <daniel.somerfield@hatchdata.com>
2023-12-15 11:18:05 -06:00
Stefan Holderbach
ea83904b89
Try to fix the docs.rs build (#682)
* Exclude the clipboard feature for docs.rs builds

The 0.27.0 docs.rs build failed as the `xcb` crate build.rs failed in
the docs.rs sandbox.

Exclude the clipboard feature for now and only enable:
- `bashisms`
- `external_printer`
- `sqlite` (should be pretty similar to `sqlite-dynlib`)

* Fix hyperlink formatting

* Manually mention required features
2023-12-14 18:38:13 +01:00
Steven
ff5fdb0e10
vi mode: map cw/cW to ce/cE by default (#668) 2023-12-06 18:46:29 +01:00
Clément Nerma
43944ee99d
Make history-related items (de-)serializable (#678)
* Make history-related items (de-)serializable

* Fix: remove duplicate derive

* Fix: deserialization bound on generic type parameter

* Comment on the custom deserialize_with attribute
2023-12-06 07:31:54 -06:00
Clément Nerma
ca2f6c8c10
Allow to build HistoryItemId values from the outside (#677)
* Allow to build HistoryItemId values from the outside

* Fix: add missing documentation on HistoryItemId::new
2023-12-06 07:25:50 -06:00
Clément Nerma
07b7f6bb76
Allow to construct ReedlineError values from the outside (#676) 2023-12-06 07:17:18 -06:00
Stefan Holderbach
879272643f
Properly handle optional event modes (#659)
* Properly handle optional event modes

Both bracketed paste and the kitty keyboard enhancement flag are not
always supported.
This goes both for terminals that may not emit events according to their
spec and also applications that will run in the terminal independent of
reedline.

Make sure we enter the mode when starting to take control and exit the
mode when leaving the mode or being dropped.
The settings exposed to the user will just internally enable a setting
(in the case of the kitty keyboard enhancement flags crossterm provides
and easy way to check for support that we take into account with that)

* Adjust demo to sane bracketed paste API

* cargo fmt

* Add a static helper `kitty_protocol_available`

Public as `reedline::kitty_protocol_available`

Replace the method `Reedline::can_use_kitty_protocol` that doesn't
depend on `Reedline` in the future

Rewrite `KittyProtocolGuard` in terms of it.

* Remove `Reedline::can_use_kitty_protocol`

* Add builder style setters for terminal enhancement

* Switch demo to bracketed paste via builder

* Expand `use_kitty_keyboard_enhancement` doccomment

* Remove old terminal enhancement APIs

* Use `use_kitty_keyboard_enhancement(true)` in demo

As we internally check whether it is available, this should be fine in
nearly all terminals (if they can safely be probed)

* Fix typo
2023-11-14 19:53:13 +01:00
Chinmay Dalal
d9e0a326df
CwdAwareHinter: remove cwd filter when there are no results (#656)
* CwdAwareHinter: remove cwd filter when there are no results

* remove panicking functions
2023-11-13 13:59:42 +01:00
Clément Nerma
01e32dae88
Add more derive impl for HistoryItemId (#662) 2023-11-11 16:04:55 -06:00
Clément Nerma
16ac4411f0
Make Result and ReedlineError public (#661)
* Make `Result` and `ReedlineError` public

Allows implementing custom `History` types

* Fix: style

* Add rustdoc for reedline::Result
2023-11-11 15:35:20 -06:00
Rein Fernhout
c853d71e66
re-enable bracketed past on not(windows) (#657) 2023-11-06 14:36:11 -06:00
stfacc
60b3b62743
Split hinter tokens at Unicode word boundaries (#650)
* Split hinter tokens at Unicode word boundaries

Partial completion behaves now like usual word movements by C-Left and C-Right.

* Refactor helper functions to crate level
2023-11-02 00:37:42 +01:00
Dan Gohman
2b6790c14b
Avoid consuming CPU when waiting for input. (#651)
When reading input, start by calling `event::read`, which efficiently blocks
until input arrives, rather than polling for input every 100
milliseconds.

This preserves the existing `POLL_WAIT` polling behavior by moving the
poll after the first `read` call returns.

Fixes #521.
2023-11-02 00:37:22 +01:00
Chinmay Dalal
973dbb5f5f
add cwd aware hinter (#647)
* add cwd aware hinter

towards https://github.com/nushell/nushell/issues/8883

* handle the case where get_current_dir returns Err

* WIP cwd aware hinter

 - guard CwdAwareHinter with feature flag
 - remove references to fish from DefaultHinter as fish is cwd aware
 - add example

* document that CwdAwareHinter is only compatible with sqlite history

* handle non-sqlite history

* handle no sqlite feature in example

* fix warnings
2023-10-19 22:41:09 +02:00
Stefan Holderbach
fb9337dccb
Fix clippy lint from most recent Rust (#646)
https://rust-lang.github.io/rust-clippy/master/index.html#/format_collect
2023-10-15 21:17:18 +02:00
Horasal
b1344f6a65
Accept Command with args for BufferEditor (#630)
`.with_buffer_editor()` now expects a `std::process::Command` that can be provided with additional arguments and a tempfile that is unique.

---------

Co-authored-by: Horasal <horsal@horsal.dev>
Co-authored-by: sholderbach <sholderbach@users.noreply.github.com>
2023-09-28 16:42:05 +02:00
Hofer-Julian
f993939690
Improve history isolation (#634)
* Improve history isolation

After this change we will get rows:
- that have the same session_id, or
- have a lower id than the first command with our session_id, or
- if there's no command with our session_id, take the whole history.

* Enforce history_isolation also for hints

* Store the session_timestamp in `SqliteBackedHistory`
2023-09-17 15:45:38 -05:00
ysthakur
33828e5821
Add support for a different prompt after submission (#627)
adds a separate `transient_prompt` to be displayed after submitting.
2023-09-12 22:36:01 +02:00
Hofer-Julian
b2b8f3f486
Minor improvements (#633) 2023-09-10 11:31:32 +02:00
Hofer-Julian
409b51784f
Fix read_line docs (#629)
The result type is not `crossterm::Result` (anymore),
but `std::io::Result`
2023-09-01 22:31:19 +02:00
Stefan Holderbach
31257a4c54
Bump crossterm to 0.27.0 (#625)
* Bump `crossterm` to 0.27.0

Waiting for nushell as ratatui (used in nu-explore) is still on 0.26

* Cargo fmt

* Fix examples
2023-08-28 21:08:10 +02:00
Faïz Hernawan
6143b01b7b
Add Kitty protocol keyboard enhancement support (#607)
* add use_kitty_protocol support option

* move pop key enhancement flags just before loop exit

* add pop keyboard flags pop on drop

* remove toggler functions' return

* move pop key enhancement flags beside other mode change
2023-08-27 23:36:35 +02:00
Darren Schroeder
541698fb74
update strip-ansi-escapes to their latest api (#617) 2023-08-08 19:05:26 +02:00
Darren Schroeder
ed5e48e537
turn off default prompt styling (bold) to prevent leakage (#615) 2023-07-31 21:39:20 +02:00
nibon7
e2543f0790
Fix big_word_left_index (#609)
* Fix big_word_left_index

* add one more test

---------

Co-authored-by: sholderbach <sholderbach@users.noreply.github.com>
2023-07-20 22:12:24 +02:00
Stefan Holderbach
12c6b7d3c7
Fix clippy lint for DoubleEndedIterator (#610) 2023-07-20 22:06:13 +02:00
Artemiy
4f31e200e4
Replace crossterm ScrollUp with universal workaround (#601)
Replace scrolling via escape sequence with workaround that prints newlines to retain scrollback
regardless of terminal implementation of scroll sequence
2023-07-12 14:30:25 +02:00
WindSoilder
d64df59757
always disable bracketed paste after read_line (#598) 2023-06-28 13:41:15 +02:00
WindSoilder
de2c627951
add a new disable_bracketed_paste method (#592)
* add a new disable_bracketed_paste function

* fix one typo
2023-06-09 15:11:19 -05:00
WMR
79778f7b85
Update to make work with new lines embedded in sent string. (#588)
* Update to make work with new lines embedded in sent string.

* Appease fmt
2023-05-30 17:20:20 -05:00
Darren Schroeder
f7515b40e5
update cargo.lock (#587)
* update cargo.lock

* update timestamp_millis_opt
2023-05-26 08:58:50 -05:00
IchHabeKeineNamen
bd306945b6
fix: prompt position on resize (#578)
* fix: prompt position on resize

* fix: u16 overflow

* fix: prompt position when terminal grows in height

* fix: exclude blank area from prompt height

fix: resume the early return to exclude a case where the terminal got smaller but the prompt is still visible

* fix: prevent any line overwriting at the cost of duplicate prompts

* fix: prevent width change from eating previous output
2023-05-25 11:07:44 +12:00