diff --git a/mousepad/mousepad-view.c b/mousepad/mousepad-view.c index 802f116..20da3ce 100644 --- a/mousepad/mousepad-view.c +++ b/mousepad/mousepad-view.c @@ -2573,6 +2573,27 @@ mousepad_view_duplicate (MousepadView *view) +void +mousepad_view_sort_lines (MousepadView *view) +{ + GtkTextBuffer *buffer; + GtkTextIter start_iter, end_iter; + + g_return_if_fail (MOUSEPAD_IS_VIEW (view)); + + /* get the buffer */ + buffer = mousepad_view_get_buffer (view); + + /* get the start and end iter */ + if (gtk_text_buffer_get_selection_bounds (buffer, &start_iter, &end_iter)) + { + /* sort the lines of text between the iters */ + gtk_source_buffer_sort_lines (GTK_SOURCE_BUFFER (buffer), &start_iter, &end_iter, GTK_SOURCE_SORT_FLAGS_NONE, 0); + } +} + + + void mousepad_view_indent (MousepadView *view, gint type) diff --git a/mousepad/mousepad-view.h b/mousepad/mousepad-view.h index 14c5fce..7a5636d 100644 --- a/mousepad/mousepad-view.h +++ b/mousepad/mousepad-view.h @@ -88,6 +88,8 @@ void mousepad_view_move_selection (MousepadView *view void mousepad_view_duplicate (MousepadView *view); +void mousepad_view_sort_lines (MousepadView *view); + void mousepad_view_indent (MousepadView *view, gint type); diff --git a/mousepad/mousepad-window-ui.xml b/mousepad/mousepad-window-ui.xml index 4eef0b3..d0c6380 100644 --- a/mousepad/mousepad-window-ui.xml +++ b/mousepad/mousepad-window-ui.xml @@ -76,6 +76,7 @@ + @@ -203,6 +204,7 @@ + diff --git a/mousepad/mousepad-window.c b/mousepad/mousepad-window.c index fb66100..7168aa3 100644 --- a/mousepad/mousepad-window.c +++ b/mousepad/mousepad-window.c @@ -305,6 +305,8 @@ static void mousepad_window_action_move_line_down (GtkAction MousepadWindow *window); static void mousepad_window_action_duplicate (GtkAction *action, MousepadWindow *window); +static void mousepad_window_action_sort_lines (GtkAction *action, + MousepadWindow *window); static void mousepad_window_action_increase_indent (GtkAction *action, MousepadWindow *window); static void mousepad_window_action_decrease_indent (GtkAction *action, @@ -449,6 +451,7 @@ static const GtkActionEntry action_entries[] = { "line-up", NULL, N_("Line _Up"), NULL, N_("Move the selection one line up"), G_CALLBACK (mousepad_window_action_move_line_up), }, { "line-down", NULL, N_("Line _Down"), NULL, N_("Move the selection one line down"), G_CALLBACK (mousepad_window_action_move_line_down), }, { "duplicate", NULL, N_("Dup_licate Line / Selection"), NULL, N_("Duplicate the current line or selection"), G_CALLBACK (mousepad_window_action_duplicate), }, + { "sort-lines", "view-sort-ascending", N_("S_ort Lines Alphabetically"), NULL, N_("Sort selected lines alphabetically"), G_CALLBACK (mousepad_window_action_sort_lines), }, { "increase-indent", GTK_STOCK_INDENT, N_("_Increase Indent"), NULL, N_("Increase the indentation of the selection or current line"), G_CALLBACK (mousepad_window_action_increase_indent), }, { "decrease-indent", GTK_STOCK_UNINDENT, N_("_Decrease Indent"), NULL, N_("Decrease the indentation of the selection or current line"), G_CALLBACK (mousepad_window_action_decrease_indent), }, { "preferences", GTK_STOCK_PREFERENCES, N_("Preferences"), NULL, N_("Show the preferences dialog"), G_CALLBACK (mousepad_window_action_preferences), }, @@ -2179,7 +2182,7 @@ mousepad_window_selection_changed (MousepadDocument *document, guint i; const gchar *action_names1[] = { "tabs-to-spaces", "spaces-to-tabs", "duplicate", "strip-trailing" }; const gchar *action_names2[] = { "line-up", "line-down" }; - const gchar *action_names3[] = { "cut", "copy", "delete", "lowercase", "uppercase", "titlecase", "opposite-case" }; + const gchar *action_names3[] = { "cut", "copy", "delete", "lowercase", "uppercase", "titlecase", "opposite-case", "sort-lines" }; /* sensitivity of the change selection action */ action = gtk_action_group_get_action (window->action_group, "change-selection"); @@ -4676,6 +4679,19 @@ mousepad_window_action_duplicate (GtkAction *action, +static void +mousepad_window_action_sort_lines (GtkAction *action, + MousepadWindow *window) +{ + g_return_if_fail (MOUSEPAD_IS_WINDOW (window)); + g_return_if_fail (MOUSEPAD_IS_DOCUMENT (window->active)); + + /* sort lines */ + mousepad_view_sort_lines (window->active->textview); +} + + + static void mousepad_window_action_increase_indent (GtkAction *action, MousepadWindow *window)