<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/77354>77354</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[lldb][libedit] Inefficient cursor movements in CLI line editor may cause cursor to flicker when hitting backspace
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hym3242
</td>
</tr>
</table>
<pre>
```
freebsd-version: 14.0-RELEASE
lldb version 16.0.6 (https://github.com/llvm/llvm-project.git revision llvmorg-16.0.6-0-g7cbf1a259152)
clang revision llvmorg-16.0.6-0-g7cbf1a259152
llvm revision llvmorg-16.0.6-0-g7cbf1a259152
```
When I try to delete one char backward by hitting backspace/delete at the lldb CLI line editor, below is all the `write()` syscalls lldb issues to handle this event.
- `re_refresh` calls `terminal_move_to_char` to output `\r` to move the cursor to line beginning, only to move it back in the next `write()`.
- `re_update_line` calls `terminal_move_to_char` who calls `tputs_sp` to put cursor at originalcolumn-1 . but it is called with aff_cnt=1, so libtinfow writes all the bytes one by one.
- same with `re_clear_eol` who uses `^[[K` to clear that char. one-by-one.
- `read_getcmd` moves cursor back to the beginning of the "(lldb)" prompt again, to reprint the prompt for ??? reason and then moves cursor back. Only this time, it is no longer flushed one-by-one. Only 3 `write()`s.
While in GNU Bash/readline, this is done by simply `write(1,^H^[[K,4)`. examples from the libedit do something like `write '\r^[[9G^[[K'`, both are better and more efficient than lldb's current implementation of the CLI line editor.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVU-Po7gT_TTOpRQE5k-SQw49nc78Rr_RrrSr1R4jAwV4x9jILjqTb78qQ7Yz3ZcZCUFiyo96r16VVQi6t4hHUX4S5WmjZhqcPw63MZeF3NSuvR1Fla5XehLpU-cR69BuX9EH7azInyArknT7x8vXl6c_X5ag5W5MW8MaB1mVpEkFQu4HoimI_EnIs5DnXtMw10njRiHPxrzeH9vJu3-woaTXBB5fdUThN8732wVtm277XVN3mZLlISulkIflywCNUbb_6X3rJo76tT3vxFnufw9o4QuQvwE5aNEgITiL0AzKQ62ab1flW6hvMGgibfu4FibVoJDnNV4R0IAQNXz--gWMtgjYanJeyGeo0bgr6ADKmBgoqvTqNaGQe5ahSiHcQqOMCQuGDmHGwAkNyrYGgQYdAF_RUrKkvWUMjxePnccwMMSyX1QpoR-1VeYyule8kLswFY4gB26maSaOEuXzfZHjYl7N7IPzvBQZ1Nhra7XtmYSz5vZfsKYoA2gb91n8Th9JvUt1nlpFeGHkn0v3OriHqGmmcAnTmjKTWLNVBM7rniEaZ-bRbjNIoJ6Js9QhQmALV00DqK67NJZEfsqYU2CiNWnbuSvE5N9qVN_4HzuhvvEjgTudoEZc4BZijUHlL-jMPek5YFgkfom9-un_a9YxEmhQFO2VMO62vm0Z_gexVHvpkZqx5Y2sS7izjbKTW1K81wdct_hKSiH3bCGugJQweTdOBKpX2jJhcuBx8touhl1fd86DyM_LBR5VcBaUbTnGfvx8Ar9HL7AnSY_IwIvU1oFxtkcPnZnDgO0jwWVX_tEnIfmxIbVBNtbn3_6CTyoMQp5ZkOgbpsCf1QHatTRBj5O5PaJyaUX58r8H-eVzsXoS8LsaJ4MBOu_GpW11zb0KrYPgRqSBFTX621ufgpC72C93xMPnR_Ad15r73LHFPBeGCH2UcHQeAbtONxqj6srCUqBdFNXzKlPAES0p4mG2VvPdJEk27TFvD_lBbfCY7dJilx8Kud8Mx6qqmt0-rQ_7apfuUizrA7Z5dtirpmplWm70UaaySLN0n-2LvNgnFealxLo4VHWGXaZEkeKotEl4jibO95s4go67XV4WG6NqNCGeO1JavC7zic1Wnjb-GE-Aeu6DKFKjA4U3FNJk4oEVKZcn_rWoLcoTfLFvwqz-YrOxEIEd8E4AGNUNGjWHx0HVGd18Qw9XtuqHEb2ZvTn-2hkm5HkZv0KeI_1_AwAA__--EGhX">