This commit adds a patch that fixes bad escape sequences in prompt. This should be fixed in next release of cgdb. The patch is based of https://github.com/cgdb/cgdb/issues/239#issuecomment-706249589 and https://github.com/cgdb/cgdb/issues/255#issuecomment-820546156.
48 lines
2.2 KiB
Diff
48 lines
2.2 KiB
Diff
From 242ea26b6f4aa7ce2ce56cbb1b50cd93a3126a57 Mon Sep 17 00:00:00 2001
|
|
From: meator <coder64@protonmail.com>
|
|
Date: Thu, 17 Jun 2021 21:30:06 +0200
|
|
Subject: [PATCH] Patch
|
|
|
|
This is a patch for v0.7.1 of cgdb. It fixes bad escape sequences in prompt string. Based of https://github.com/cgdb/cgdb/issues/239#issuecomment-706249589 and https://github.com/cgdb/cgdb/issues/255#issuecomment-820546156.
|
|
|
|
---
|
|
cgdb/scroller.cpp | 17 +++++++++++++++--
|
|
1 file changed, 15 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/cgdb/scroller.cpp b/cgdb/scroller.cpp
|
|
index 2d01e82..d2d36ca 100644
|
|
--- a/cgdb/scroller.cpp
|
|
+++ b/cgdb/scroller.cpp
|
|
@@ -106,14 +106,27 @@ static char *parse(struct scroller *scr, struct hl_line_attr **attrs,
|
|
/* Carriage return -> Move back to the beginning of the line */
|
|
case '\r':
|
|
i = 0;
|
|
- if (buf[j + 1] != '\n') {
|
|
+ if ((buflen - j) >= 1 && buf[j + 1] != '\n') {
|
|
sbfree(*attrs);
|
|
*attrs = NULL;
|
|
}
|
|
break;
|
|
case '\033':
|
|
/* Handle ansi escape characters */
|
|
- if (hl_ansi_color_support(hl_groups_instance) &&
|
|
+ /* see https://conemu.github.io/en/AnsiEscapeCodes.html#SGR_Select_Graphic_Rendition_parameters
|
|
+ */
|
|
+ if ((buflen - j) >= 6
|
|
+ && buf[j + 1] == '[' && buf[j + 2] == '?' && buf[j + 3] == '2'
|
|
+ && buf[j + 4] == '0' && buf[j + 5] == '0' && buf[j + 6] == '4') {
|
|
+ /* simply ignore these escape sequences like e.g. "[?2004h" */
|
|
+ j += 7;
|
|
+ } else if ((buflen - j) >= 2 && buf[j + 1] == '[' && buf[j + 2] == '?') {
|
|
+ /* simply ignore these escape sequences like e.g. "[?1h" */
|
|
+ j += 4;
|
|
+ } else if ((buflen - j) >= 1 && (buf[j + 1] == '=' || buf[j + 1] == '>')) {
|
|
+ /* simply ignore these escape sequences */
|
|
+ j += 1;
|
|
+ } else if (hl_ansi_color_support(hl_groups_instance) &&
|
|
debugwincolor) {
|
|
int attr;
|
|
int ansi_count = hl_ansi_get_color_attrs(
|
|
--
|
|
2.32.0
|
|
|