Skip to content

Commit

Permalink
Problem with setting the cursor position on the right screen edge whe…
Browse files Browse the repository at this point in the history
…n drawing. (#831)

When moving the cursor back to its original location, a problem arises when cursor placed in the right edge column, where an off by one error occur. This pull request will resolve this problem.

Co-authored-by: Jørn Gustav Larsen <jgl@fasttracksoftware.com>
Co-authored-by: Jørn Gustav Larsen <jgl@adminbyrequest.com>
Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
  • Loading branch information
4 people authored Apr 3, 2024
1 parent f609c12 commit 2216f3a
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 4 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ current (development)
- Bugfix: `Input` `onchange` was not called on backspace or delete key.
Fixed by @chrysante in chrysante in PR #776.
- Bugfix: Propertly restore cursor shape on exit. See #792.
- Bugfix: Fix cursor position in when in the last column. See #831.

### Dom
- Feature: Add `hscroll_indicator`. It display an horizontal indicator
Expand Down
16 changes: 12 additions & 4 deletions src/ftxui/component/screen_interactive.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -844,10 +844,18 @@ void ScreenInteractive::Draw(Component component) {
const int dx = dimx_ - 1 - cursor_.x + int(dimx_ != terminal.dimx);
const int dy = dimy_ - 1 - cursor_.y;

set_cursor_position = "\x1B[" + std::to_string(dy) + "A" + //
"\x1B[" + std::to_string(dx) + "D";
reset_cursor_position = "\x1B[" + std::to_string(dy) + "B" + //
"\x1B[" + std::to_string(dx) + "C";
set_cursor_position.clear();
reset_cursor_position.clear();

if (dy != 0) {
set_cursor_position += "\x1B[" + std::to_string(dy) + "A";
reset_cursor_position += "\x1B[" + std::to_string(dy) + "B";
}

if (dx != 0) {
set_cursor_position += "\x1B[" + std::to_string(dx) + "D";
reset_cursor_position += "\x1B[" + std::to_string(dx) + "C";
}

if (cursor_.shape == Cursor::Hidden) {
set_cursor_position += "\033[?25l";
Expand Down

0 comments on commit 2216f3a

Please sign in to comment.