+ // Add extra lines
+ gint lines_to_add = new_height - win->height;
+ gtk_text_buffer_get_end_iter(buffer, &end);
+ start = end;
+
+ gchar *blanks = g_strnfill(win->width, ' ');
+ gchar **blanklines = g_new0(gchar *, lines_to_add + 1);
+ int count;
+ for(count = 0; count < lines_to_add; count++)
+ blanklines[count] = blanks;
+ blanklines[lines_to_add] = NULL;
+ gchar *vertical_blanks = g_strjoinv("\n", blanklines);
+ g_free(blanklines);
+ g_free(blanks);
+
+ if(win->height > 0)
+ gtk_text_buffer_insert(buffer, &end, "\n", 1);
+
+ gtk_text_buffer_insert(buffer, &end, vertical_blanks, -1);
+ }
+
+ // Trim or expand lines
+ if(new_width < win->width) {
+ gtk_text_buffer_get_start_iter(buffer, &start);
+ end = start;
+
+ gint line;
+ for(line = 0; line <= new_height; line++) {
+ // Trim the line
+ gtk_text_iter_forward_cursor_positions(&start, new_width);
+ gtk_text_iter_forward_to_line_end(&end);
+ gtk_text_buffer_delete(buffer, &start, &end);
+ gtk_text_iter_forward_line(&start);
+ end = start;
+ }
+ } else if(new_width > win->width) {
+ gint chars_to_add = new_width - win->width;
+ gchar *horizontal_blanks = g_strnfill(chars_to_add, ' ');
+
+ gtk_text_buffer_get_start_iter(buffer, &start);