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)