static void set_notes(R2RRun *run, GtkTextBuffer *notes_buff) { GtkTextIter start; GtkTextIter end; gtk_text_buffer_get_bounds(notes_buff, &start, &end); run->notes_len = gtk_text_iter_get_visible_line_offset(&end) - gtk_text_iter_get_visible_line_offset(&start); run->notes = g_realloc(run->notes, run->notes_len + 1); g_snprintf(run->notes, run->notes_len + 1, "%s", gtk_text_buffer_get_text(notes_buff, &start, &end, false)); }
/* Format->Unindent */ void action_unindent(GtkAction *action, I7Document *document) { GtkTextBuffer *buffer = GTK_TEXT_BUFFER(i7_document_get_buffer(document)); /* Shift the selected lines in the buffer one tab to the left */ /* Adapted from gtksourceview.c */ GtkTextIter start, end; gtk_text_buffer_get_selection_bounds(buffer, &start, &end); /* Find out which lines to unindent */ gint start_line = gtk_text_iter_get_line(&start); gint end_line = gtk_text_iter_get_line(&end); gint i; /* if the end of the selection is before the first character on a line, don't unindent it */ if((gtk_text_iter_get_visible_line_offset(&end) == 0) && (end_line > start_line)) end_line--; /* Treat it as one single undo action */ gtk_text_buffer_begin_user_action(buffer); for(i = start_line; i <= end_line; i++) { GtkTextIter iter, iter2; gtk_text_buffer_get_iter_at_line(buffer, &iter, i); if(gtk_text_iter_get_char(&iter) == '\t') { iter2 = iter; gtk_text_iter_forward_char(&iter2); gtk_text_buffer_delete(buffer, &iter, &iter2); } } gtk_text_buffer_end_user_action(buffer); }
/* Format->Indent */ void action_indent(GtkAction *action, I7Document *document) { GtkTextBuffer *buffer = GTK_TEXT_BUFFER(i7_document_get_buffer(document)); /* Shift the selected lines in the buffer one tab to the right */ /* Adapted from gtksourceview.c */ GtkTextIter start, end; gtk_text_buffer_get_selection_bounds(buffer, &start, &end); /* Find out which lines to indent */ gint start_line = gtk_text_iter_get_line(&start); gint end_line = gtk_text_iter_get_line(&end); gint i; /* if the end of the selection is before the first character on a line, don't indent it */ if((gtk_text_iter_get_visible_line_offset(&end) == 0) && (end_line > start_line)) end_line--; /* Treat it as one single undo action */ gtk_text_buffer_begin_user_action(buffer); for(i = start_line; i <= end_line; i++) { GtkTextIter iter; gtk_text_buffer_get_iter_at_line(buffer, &iter, i); /* don't add indentation on empty lines */ if(gtk_text_iter_ends_line(&iter)) continue; gtk_text_buffer_insert(buffer, &iter, "\t", -1); } gtk_text_buffer_end_user_action(buffer); }