Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix (properly) the logic around prompt re-use & Host Command handling #770

Merged
merged 3 commits into from
Apr 23, 2024

Conversation

bew
Copy link
Contributor

@bew bew commented Mar 12, 2024

First PR for nushell/reedline \o/

Revert/Rewrites #758

Fixes #755 (correctly this time 😬)

Where did the newline actually come from in that issue?

The phantom newline that OP reported was due to this block in painter initialization:
(👉 It would detect some text before the cursor and always make a new prompt on the next line..)

// Assumption: if the cursor is not on the zeroth column,
// there is content we want to leave intact, thus advance to the next row
let new_row = if column > 0 { row + 1 } else { row };
// If we are on the last line and would move beyond the last line due to
// the condition above, we need to make room for the prompt.
// Otherwise printing the prompt would scroll of the stored prompt
// origin, causing issues after repaints.
let new_row = if new_row == self.screen_height() {
self.print_crlf()?;
new_row.saturating_sub(1)
} else {
new_row
};
self.prompt_start_row = new_row;

Fixes #771 (my issue)
Now I have the same experience than on my zsh config 😃

Supports everything I mentioned in #771
Supports replacing the prompt (even from multi-line old prompt)

Demo

nushell.fixed.prompt.mov

MISSING (DONE)

  • Unit tests for the painter initialization logic
  • Refactor painter initialization logic (to remove that unwrap 👀)

What do you think of this implementation?

@bew
Copy link
Contributor Author

bew commented Mar 12, 2024

This example isn't perfect DX/UX, there's a bad case with a multi-line prompt + cursor on one of the first lines + executing command echo; foo-that-outputs..
Like with a 3 lines prompt, cursor on first line, that command would go down 1 line but would overwrite the 3rd line.

A solution would be to use the command commandline set-cursor --end; echo; foo-that-outputs.
But I'm thinking we could remove the echo and expose a new flag like commandline set-cursor --below-prompt to place the cursor below all the lines of the prompt (and it's nice & easy to read 🙃)

@bew
Copy link
Contributor Author

bew commented Apr 14, 2024

Hello!
I finally went back to finish this PR, it should be ready for review now 🙏

@fdncred
Copy link
Collaborator

fdncred commented Apr 14, 2024

I've played a little bit with this without nushell and it appears to be outputting less ansi escape codes, which is good.

Separately, on my own and unrelated to this PR, I'm trying to figure out how/why reedline prints so many CRLFs in nushell and also how/why the prompt is redrawn with every character typed.

@bew
Copy link
Contributor Author

bew commented Apr 22, 2024

Hello o/
Is there anything else I can do to get this PR merged? 🤔

@fdncred
Copy link
Collaborator

fdncred commented Apr 23, 2024

there's a bad case with a multi-line prompt + cursor on one of the first lines + executing command echo; foo-that-outputs..

@bew does this 'bad case' still exist?

@bew
Copy link
Contributor Author

bew commented Apr 23, 2024

there's a bad case with a multi-line prompt + cursor on one of the first lines + executing command echo; foo-that-outputs..

@bew does this 'bad case' still exist?

The 'bad case' I mentioned is only a limitation with the example, due to using 'echo' in the keybind.
There is nothing I can do in this PR afaik.

To property solve this limitation with using echo to move cursor below the prompt I suggested the creation of a commandline set-cursor option that would do that, but I think this should be done in a separate PR.

@fdncred
Copy link
Collaborator

fdncred commented Apr 23, 2024

ok, thanks. let's try it because we're a week away from a release. if we don't try it now, it'll have to wait until after the release.

@fdncred fdncred merged commit 455b9a3 into nushell:main Apr 23, 2024
6 checks passed
@bew bew deleted the fix/prompt-suspend-and-reuse branch April 23, 2024 16:30
leftwo referenced this pull request in oxidecomputer/crucible Aug 17, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [reedline](https://togithub.com/nushell/reedline) |
workspace.dependencies | minor | `0.30.0` -> `0.33.0` |

---

### Release Notes

<details>
<summary>nushell/reedline (reedline)</summary>

###
[`v0.33.0`](https://togithub.com/nushell/reedline/releases/tag/v0.33.0)

[Compare
Source](https://togithub.com/nushell/reedline/compare/v0.32.0...v0.33.0)

#### What's Changed

- fix some new clippy warnings by
[@&#8203;fdncred](https://togithub.com/fdncred) in
[https://github.com/nushell/reedline/pull/790](https://togithub.com/nushell/reedline/pull/790)
- Add PWD to the `Reedline` state by
[@&#8203;YizhePKU](https://togithub.com/YizhePKU) in
[https://github.com/nushell/reedline/pull/796](https://togithub.com/nushell/reedline/pull/796)
- Fix [#&#8203;793](https://togithub.com/nushell/reedline/issues/793)
using width() for column menu alignements with special char by
[@&#8203;Jiogo18](https://togithub.com/Jiogo18) in
[https://github.com/nushell/reedline/pull/794](https://togithub.com/nushell/reedline/pull/794)
- Make menus process events before updating working details by
[@&#8203;ysthakur](https://togithub.com/ysthakur) in
[https://github.com/nushell/reedline/pull/799](https://togithub.com/nushell/reedline/pull/799)
- Feature: vi visual mode by
[@&#8203;adamschmalhofer](https://togithub.com/adamschmalhofer) in
[https://github.com/nushell/reedline/pull/800](https://togithub.com/nushell/reedline/pull/800)

#### New Contributors

- [@&#8203;YizhePKU](https://togithub.com/YizhePKU) made their first
contribution in
[https://github.com/nushell/reedline/pull/796](https://togithub.com/nushell/reedline/pull/796)
- [@&#8203;Jiogo18](https://togithub.com/Jiogo18) made their first
contribution in
[https://github.com/nushell/reedline/pull/794](https://togithub.com/nushell/reedline/pull/794)
- [@&#8203;adamschmalhofer](https://togithub.com/adamschmalhofer) made
their first contribution in
[https://github.com/nushell/reedline/pull/800](https://togithub.com/nushell/reedline/pull/800)

**Full Changelog**:
nushell/reedline@v0.32.0...v0.33.0

###
[`v0.32.0`](https://togithub.com/nushell/reedline/releases/tag/v0.32.0):
0.32.0

[Compare
Source](https://togithub.com/nushell/reedline/compare/v0.31.0...v0.32.0)

#### What's Changed

- add bashism `!term` to prefix search for last command beginning with
`term` by [@&#8203;fdncred](https://togithub.com/fdncred) in
[https://github.com/nushell/reedline/pull/779](https://togithub.com/nushell/reedline/pull/779)
- Remove debug print by
[@&#8203;sholderbach](https://togithub.com/sholderbach) in
[https://github.com/nushell/reedline/pull/784](https://togithub.com/nushell/reedline/pull/784)
- fix ide menu not reporting correct required_lines by
[@&#8203;maxomatic458](https://togithub.com/maxomatic458) in
[https://github.com/nushell/reedline/pull/781](https://togithub.com/nushell/reedline/pull/781)
- Fix (properly) the logic around prompt re-use & Host Command handling
by [@&#8203;bew](https://togithub.com/bew) in
[https://github.com/nushell/reedline/pull/770](https://togithub.com/nushell/reedline/pull/770)
- fix: unexpected spaces after large buffer input by
[@&#8203;sigoden](https://togithub.com/sigoden) in
[https://github.com/nushell/reedline/pull/783](https://togithub.com/nushell/reedline/pull/783)
- Bump version for `0.32.0` release by
[@&#8203;devyn](https://togithub.com/devyn) in
[https://github.com/nushell/reedline/pull/785](https://togithub.com/nushell/reedline/pull/785)

#### New Contributors

- [@&#8203;bew](https://togithub.com/bew) made their first contribution
in
[https://github.com/nushell/reedline/pull/770](https://togithub.com/nushell/reedline/pull/770)
- [@&#8203;sigoden](https://togithub.com/sigoden) made their first
contribution in
[https://github.com/nushell/reedline/pull/783](https://togithub.com/nushell/reedline/pull/783)
- [@&#8203;devyn](https://togithub.com/devyn) made their first
contribution in
[https://github.com/nushell/reedline/pull/785](https://togithub.com/nushell/reedline/pull/785)

**Full Changelog**:
nushell/reedline@v0.31.0...v0.32.0

###
[`v0.31.0`](https://togithub.com/nushell/reedline/releases/tag/v0.31.0):
0.31.0

[Compare
Source](https://togithub.com/nushell/reedline/compare/v0.30.0...v0.31.0)

New release for [Nushell](https://togithub.com/nushell/nushell) `0.92.0`

#### What's Changed

- Bump version of `strum`/`strum_macros` by
[@&#8203;sholderbach](https://togithub.com/sholderbach) in
[https://github.com/nushell/reedline/pull/768](https://togithub.com/nushell/reedline/pull/768)
- Use the OS clipboard only for explicit cut/copy/paste operations by
[@&#8203;Tastaturtaste](https://togithub.com/Tastaturtaste) in
[https://github.com/nushell/reedline/pull/761](https://togithub.com/nushell/reedline/pull/761)
- Revert "Move left when exiting insert mode" by
[@&#8203;fdncred](https://togithub.com/fdncred) in
[https://github.com/nushell/reedline/pull/773](https://togithub.com/nushell/reedline/pull/773)
- Fix `OpenOptions` clippy by
[@&#8203;sholderbach](https://togithub.com/sholderbach) in
[https://github.com/nushell/reedline/pull/776](https://togithub.com/nushell/reedline/pull/776)
- Bump `fd-lock` requirement and locked deps by
[@&#8203;sholderbach](https://togithub.com/sholderbach) in
[https://github.com/nushell/reedline/pull/775](https://togithub.com/nushell/reedline/pull/775)
- Fix case-consistency searching sqlite history by
[@&#8203;sholderbach](https://togithub.com/sholderbach) in
[https://github.com/nushell/reedline/pull/777](https://togithub.com/nushell/reedline/pull/777)
- Bump version for `0.31.0` release by
[@&#8203;sholderbach](https://togithub.com/sholderbach) in
[https://github.com/nushell/reedline/pull/780](https://togithub.com/nushell/reedline/pull/780)

**Full Changelog**:
nushell/reedline@v0.30.0...v0.31.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 8pm,before 6am" in timezone
America/Los_Angeles, Automerge - "after 8pm,before 6am" in timezone
America/Los_Angeles.

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View the
[repository job
log](https://developer.mend.io/github/oxidecomputer/crucible).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yNi4xIiwidXBkYXRlZEluVmVyIjoiMzguMjYuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants