diff --git a/src/terminal/select.c b/src/terminal/select.c index fdb5a7cfb..b0baeb073 100644 --- a/src/terminal/select.c +++ b/src/terminal/select.c @@ -283,6 +283,7 @@ static void guac_terminal_clipboard_append_row(guac_terminal* terminal, char buffer[1024]; int i = start; + int eol; guac_terminal_buffer_row* buffer_row = guac_terminal_buffer_get_row(terminal->buffer, row, 0); @@ -296,6 +297,14 @@ static void guac_terminal_clipboard_append_row(guac_terminal* terminal, if (end < 0 || end > buffer_row->length - 1) end = buffer_row->length - 1; + /* Get position of last not null char */ + for (eol = buffer_row->length; eol > start; eol--) { + + if (buffer_row->characters[eol].value != 0) + break; + + } + /* Repeatedly convert chunks of terminal buffer rows until entire specified * region has been appended to clipboard */ while (i <= end) { @@ -308,6 +317,10 @@ static void guac_terminal_clipboard_append_row(guac_terminal* terminal, int codepoint = buffer_row->characters[i].value; + /* Fill empty with spaces if not at end of line */ + if (codepoint == 0 && i < eol) + codepoint = GUAC_CHAR_SPACE; + /* Ignore null (blank) characters */ if (codepoint == 0 || codepoint == GUAC_CHAR_CONTINUATION) continue; diff --git a/src/terminal/terminal/types.h b/src/terminal/terminal/types.h index 15333ea07..3e1f07468 100644 --- a/src/terminal/terminal/types.h +++ b/src/terminal/terminal/types.h @@ -41,6 +41,11 @@ */ #define GUAC_CHAR_CONTINUATION -1 +/** + * The ASCII code of space. + */ +#define GUAC_CHAR_SPACE 32 + /** * Terminal attributes, as can be applied to a single character. */