Skip to content

Bug fix when the prompt contains ESC chars#135

Open
olegat wants to merge 1 commit intoantirez:masterfrom
olegat:master
Open

Bug fix when the prompt contains ESC chars#135
olegat wants to merge 1 commit intoantirez:masterfrom
olegat:master

Conversation

@olegat
Copy link
Copy Markdown

@olegat olegat commented Feb 28, 2017

refreshSingleLine would use strlen to count the number of
"forward" operations to send to the cursor. This causes the
cursor to move too far off if the prompt contains ANSI
color codes. Example:

"\x1b[1mHello> \x1b[0m" contains 15 characters, but only 7
on rendered on the terminal, so refreshSingleLine would
move the cursor forward too much.

The function strlenPerceived counts the number of non
escaped characters which appears to fix this bug.

refreshSingleLine would use strlen to count the number of
"forward" operations to send to the cursor. This causes the
cursor to move too far off if the prompt contains ANSI
color codes. Example:

"\x1b[1mHello> \x1b[0m" contains 15 characters, but only 7
on rendered on the terminal, so refreshSingleLine would
move the cursor forward too much.

The function strlenPerceived counts the number of non
escaped characters which appears to fix this bug.
SquidDev added a commit to SquidDev/urn that referenced this pull request Aug 9, 2017
This prevents accessing history being slightly odd in readline based
inputs.

As antirez/linenoise#135 hasn't been merged,
linenoise will break on coloured inputs - sadly there isn't much
we can do about that, so let's strip them.
@rain-1
Copy link
Copy Markdown

rain-1 commented May 15, 2018

Merged rain-1@0e3cf08

apainintheneck added a commit to apainintheneck/crystal-linenoise that referenced this pull request Feb 6, 2024
The cursor based its offset on the literal length of the line not
the visual length of the line which caused problems when using
escape codes. This fix was pulled in from an upstream branch and
it fixes the calculation for the cursor.

Note: This bug is still present in the multiline version though.

- antirez/linenoise#135
- https://github.com/olegat
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants