Bug: Cursor moves far to the right if prompt has colors
- Dominant language
- C
- Stars
- 4.4k
- Forks
- 741
- PR merge metrics
- No merged PRs in 30d
Description
If the prompt contains a color code, the cursor moves far to the right.
This is probably due to the fact that `plen` would include each char in the color code even though they have no bearing on cursor position (since they aren't printed to the screen like a char).
This is reproduce-able with this modified code:
`#ifndef NO_COLOR`
` #define RED "\x1B[31m"`
` #define WHITE "\x1B[37m"`
` #define RESET "\x1B[0m"`
`#else`
` #define RED ""`
` #define WHITE ""`
` #define RESET ""`
`#endif`
`char prompt[255] = {'\0'};`
` snprintf(prompt, 255, "%sexample%s@%sexample%s$ ", WHITE, RED, WHITE, RESET);`
If you add that code to a program and call `linenoise(prompt)` the cursor moves over 20pts to the right but displays text correctly.
If you compile the same program with the `-DNO_COLOR` flag then the issue does not happen
I traced the cursor move to this line:
https://github.com/antirez/linenoise/blob/4a961c0108720741e2683868eb10495f015ee422/linenoise.c#L537
The only work-around I found is to place two prompts (one above the real one) so at least part of it is in color.
Here is a picture comparing the two, note the white cursor on the left

Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.