diff --git a/src/nano.c b/src/nano.c index ec0bb03834c630dae7dc4a648c6386f5bfd0cf73..acafd27acf5290153552d86f24cd258f9873ab0a 100644 --- a/src/nano.c +++ b/src/nano.c @@ -1862,14 +1862,21 @@ void do_output(char *output, size_t output_len, bool allow_cntrls) continue; /* Make room for the new character and copy it into the line. */ - openfile->current->data = charealloc(openfile->current->data, - current_len + char_len + 1); - charmove(openfile->current->data + openfile->current_x + char_len, - openfile->current->data + openfile->current_x, + char matching_char = + *onechar == '(' ? ')' : + *onechar == '[' ? ']' : + *onechar == '{' ? '}' : '\0'; + size_t insert_length = matching_char ? char_len + 1 : char_len; + openfile->current->data = + charealloc(openfile->current->data, current_len + insert_length + 1); + char *insert_start = openfile->current->data + openfile->current_x; + charmove(insert_start + insert_length, insert_start, current_len - openfile->current_x + 1); - strncpy(openfile->current->data + openfile->current_x, onechar, - char_len); - current_len += char_len; + strncpy(insert_start, onechar, char_len); + if (matching_char) { + insert_start[char_len] = matching_char; + } + current_len += insert_length; openfile->totsize++; set_modified();