Index: src/gnome-terminal.schemas.in
===================================================================
RCS file: /cvs/gnome/gnome-terminal/src/gnome-terminal.schemas.in,v
retrieving revision 1.39
diff -u -b -B -r1.39 gnome-terminal.schemas.in
--- src/gnome-terminal.schemas.in	17 Aug 2004 14:41:35 -0000	1.39
+++ src/gnome-terminal.schemas.in	5 Jun 2005 18:36:04 -0000
@@ -754,6 +754,24 @@
     </schema>
 
     <schema>
+      <key>/schemas/apps/gnome-terminal/keybindings/select_all</key>
+      <applyto>/apps/gnome-terminal/keybindings/select_all</applyto>
+      <owner>gnome-terminal</owner>
+      <type>string</type>
+      <default>&lt;Ctrl&gt;&lt;Shift&gt;a</default>
+      <locale name="C">
+         <short>Keyboard shortcut to select all the text</short>
+         <long>
+          Keyboard shortcut key for selecting all the text
+          of the terminal. Expressed as a string
+          in the same format used for GTK+ resource files.
+          If you set the option to the special string "disabled", then there 
+          will be no keyboard shortcut for this action.
+         </long>
+      </locale>
+    </schema>
+
+    <schema>
       <key>/schemas/apps/gnome-terminal/keybindings/full_screen</key>
       <applyto>/apps/gnome-terminal/keybindings/full_screen</applyto>
       <owner>gnome-terminal</owner>
Index: src/terminal-accels.c
===================================================================
RCS file: /cvs/gnome/gnome-terminal/src/terminal-accels.c,v
retrieving revision 1.29
diff -u -b -B -r1.29 terminal-accels.c
--- src/terminal-accels.c	26 Apr 2004 05:46:24 -0000	1.29
+++ src/terminal-accels.c	5 Jun 2005 18:36:05 -0000
@@ -37,6 +37,7 @@
 #define KEY_CLOSE_WINDOW CONF_KEYS_PREFIX"/close_window"
 #define KEY_COPY CONF_KEYS_PREFIX"/copy"
 #define KEY_PASTE CONF_KEYS_PREFIX"/paste"
+#define KEY_SELECT_ALL CONF_KEYS_PREFIX"/select_all"
 #define KEY_TOGGLE_MENUBAR CONF_KEYS_PREFIX"/toggle_menubar"
 #define KEY_FULL_SCREEN CONF_KEYS_PREFIX"/full_screen"
 #define KEY_RESET CONF_KEYS_PREFIX"/reset"
@@ -90,6 +91,8 @@
     KEY_COPY, ACCEL_PATH_COPY, 0, 0, NULL, FALSE },
   { N_("Paste"),
     KEY_PASTE, ACCEL_PATH_PASTE, 0, 0, NULL, FALSE },
+  { N_("Select All"),
+    KEY_SELECT_ALL, ACCEL_PATH_SELECT_ALL, 0, 0, NULL, FALSE }
 };
 
 static KeyEntry view_entries[] =
Index: src/terminal-accels.h
===================================================================
RCS file: /cvs/gnome/gnome-terminal/src/terminal-accels.h,v
retrieving revision 1.9
diff -u -b -B -r1.9 terminal-accels.h
--- src/terminal-accels.h	4 Oct 2002 22:29:01 -0000	1.9
+++ src/terminal-accels.h	5 Jun 2005 18:36:06 -0000
@@ -36,6 +36,7 @@
 #define ACCEL_PATH_CLOSE_WINDOW ACCEL_PATH_ROOT"/close_window"
 #define ACCEL_PATH_COPY ACCEL_PATH_ROOT"/copy"
 #define ACCEL_PATH_PASTE ACCEL_PATH_ROOT"/paste"
+#define ACCEL_PATH_SELECT_ALL ACCEL_PATH_ROOT"/select_all"
 #define ACCEL_PATH_TOGGLE_MENUBAR ACCEL_PATH_ROOT"/toggle_menubar"
 #define ACCEL_PATH_FULL_SCREEN ACCEL_PATH_ROOT"/full_screen"
 #define ACCEL_PATH_RESET ACCEL_PATH_ROOT"/reset"
Index: src/terminal-screen.c
===================================================================
RCS file: /cvs/gnome/gnome-terminal/src/terminal-screen.c,v
retrieving revision 1.99
diff -u -b -B -r1.99 terminal-screen.c
--- src/terminal-screen.c	29 Nov 2004 09:40:19 -0000	1.99
+++ src/terminal-screen.c	5 Jun 2005 18:36:07 -0000
@@ -1205,6 +1205,13 @@
 }
 
 static void
+select_all_callback (GtkWidget      *menu_item,
+                TerminalScreen *screen)
+{
+  terminal_widget_select_all (screen->priv->term);
+}
+
+static void
 configuration_callback (GtkWidget      *menu_item,
                         TerminalScreen *screen)
 {
@@ -1536,6 +1543,13 @@
   gtk_widget_show (menu_item);
   gtk_menu_shell_append (GTK_MENU_SHELL (screen->priv->popup_menu), menu_item);
 
+  menu_item = append_menuitem (screen->priv->popup_menu, _("Select _All"),
+                   G_CALLBACK (select_all_callback), screen);
+
+  menu_item = gtk_separator_menu_item_new ();
+  gtk_widget_show (menu_item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (screen->priv->popup_menu), menu_item);
+
   profile_menu = gtk_menu_new ();
   menu_item = gtk_menu_item_new_with_mnemonic (_("Change P_rofile"));
 
Index: src/terminal-widget-vte.c
===================================================================
RCS file: /cvs/gnome/gnome-terminal/src/terminal-widget-vte.c,v
retrieving revision 1.34
diff -u -b -B -r1.34 terminal-widget-vte.c
--- src/terminal-widget-vte.c	28 Jun 2004 07:44:02 -0000	1.34
+++ src/terminal-widget-vte.c	5 Jun 2005 18:36:08 -0000
@@ -419,6 +419,13 @@
 }
 
 void
+terminal_widget_select_all (GtkWidget *widget)
+{
+  g_return_if_fail(VTE_IS_TERMINAL(widget));
+  vte_terminal_select_all(VTE_TERMINAL(widget));
+}
+
+void
 terminal_widget_reset (GtkWidget *widget,
 		       gboolean   also_clear_afterward)
 {
Index: src/terminal-widget.h
===================================================================
RCS file: /cvs/gnome/gnome-terminal/src/terminal-widget.h,v
retrieving revision 1.10
diff -u -b -B -r1.10 terminal-widget.h
--- src/terminal-widget.h	28 Jun 2004 07:44:02 -0000	1.10
+++ src/terminal-widget.h	5 Jun 2005 18:36:08 -0000
@@ -104,6 +104,7 @@
                                                        const GdkColor       *palette_entries);
 void       terminal_widget_copy_clipboard             (GtkWidget            *widget);
 void       terminal_widget_paste_clipboard            (GtkWidget            *widget);
+void       terminal_widget_select_all                 (GtkWidget            *widget);
 void       terminal_widget_reset                      (GtkWidget            *widget,
                                                        gboolean              also_clear_afterward);
 
Index: src/terminal-window.c
===================================================================
RCS file: /cvs/gnome/gnome-terminal/src/terminal-window.c,v
retrieving revision 1.106
diff -u -b -B -r1.106 terminal-window.c
--- src/terminal-window.c	28 Feb 2005 23:27:11 -0000	1.106
+++ src/terminal-window.c	5 Jun 2005 18:36:11 -0000
@@ -150,6 +150,8 @@
                                            TerminalWindow *window);
 static void paste_callback                (GtkWidget      *menuitem,
                                            TerminalWindow *window);
+static void select_all_callback           (GtkWidget      *menuitem,
+                                           TerminalWindow *window);
 static void edit_keybindings_callback     (GtkWidget      *menuitem,
                                            TerminalWindow *window);
 static void change_configuration_callback (GtkWidget      *menuitem,
@@ -904,6 +906,12 @@
   mi = gtk_separator_menu_item_new ();
   gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
   
+  append_menuitem (menu, _("Select _All"), ACCEL_PATH_SELECT_ALL,
+                   G_CALLBACK (select_all_callback), window);
+
+  mi = gtk_separator_menu_item_new ();
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+  
   append_menuitem (menu, _("P_rofiles..."), NULL,
                    G_CALLBACK (manage_configurations_callback), window);
 
@@ -2391,6 +2399,20 @@
 }
 
 static void
+select_all_callback (GtkWidget      *menuitem,
+                TerminalWindow *window)
+{
+  GtkWidget *widget;
+
+  if (window->priv->active_term)
+    {
+      widget = terminal_screen_get_widget (window->priv->active_term);
+      
+      terminal_widget_select_all (widget);
+    }  
+}
+
+static void
 edit_keybindings_callback (GtkWidget      *menuitem,
                            TerminalWindow *window)
 {
