antirez / antirez/linenoise

Bug: Cursor moves far to the right if prompt has colors

Open
#158 2 comments 0 reactions 0 assignees View on GitHub
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

![2018-08-06-042855_1366x768_scrot](https://user-images.githubusercontent.com/4129165/43705727-62e1fb9c-9931-11e8-8404-0db76df51ead.png)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.