Always reset cursor correctly on exit. #7931
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is intended to be a fix for #7404. I was able to replicate on MacOS by setting Terminal.app's default cursor to something other than Block, and then binding a key to
:quit
as described in the issue. Via debugging, I found thatTerminal::restore
actually does reset the cursor correctly regardless of if a keybind is used or if:quit
is used.However, the cursor gets set back to
CursorKind::Block
when the process exits if a keybinding was used.It turns out that the
Drop
impl forTerminal
will put the cursor back in block mode ifterminal.cursor_kind
isHidden
. Via debugging, I found that this was not the case if:quit
was used but was the case if the keybind was used.My understanding is that either
Terminal::restore
orTerminalBackend::force_restore
will be called before exit, and both reset the cursor. Thus it seems to me that theDrop
impl forTerminal
is redundant and does not have the information needed to do the reset properly. Thus this PR removes theDrop
impl.