diff -urpb gnome-terminal-2.18.0.orig/src/terminal-accels.c gnome-terminal-2.18.0/src/terminal-accels.c
--- gnome-terminal-2.18.0.orig/src/terminal-accels.c	2007-03-12 20:42:51.000000000 +0000
+++ gnome-terminal-2.18.0/src/terminal-accels.c	2007-03-21 01:38:20.000000000 +0000
@@ -52,6 +52,7 @@
 #define KEY_ZOOM_IN CONF_KEYS_PREFIX"/zoom_in"
 #define KEY_ZOOM_OUT CONF_KEYS_PREFIX"/zoom_out"
 #define KEY_ZOOM_NORMAL CONF_KEYS_PREFIX"/zoom_normal"
+#define KEY_FIND_URLS CONF_KEYS_PREFIX"/find_urls"
 
 typedef struct
 {
@@ -106,7 +107,9 @@ static KeyEntry view_entries[] =
   { N_("Zoom Out"),
     KEY_ZOOM_OUT, ACCEL_PATH_ZOOM_OUT, 0, 0, NULL, FALSE },
   { N_("Normal Size"),
-    KEY_ZOOM_NORMAL, ACCEL_PATH_ZOOM_NORMAL, 0, 0, NULL, FALSE }
+    KEY_ZOOM_NORMAL, ACCEL_PATH_ZOOM_NORMAL, 0, 0, NULL, FALSE },
+  { N_("Find URLs"),
+    KEY_FIND_URLS, ACCEL_PATH_FIND_URLS, 0, 0, NULL, FALSE }
 };
 
 static KeyEntry terminal_entries[] =
diff -urpb gnome-terminal-2.18.0.orig/src/terminal-accels.h gnome-terminal-2.18.0/src/terminal-accels.h
--- gnome-terminal-2.18.0.orig/src/terminal-accels.h	2007-03-12 20:42:51.000000000 +0000
+++ gnome-terminal-2.18.0/src/terminal-accels.h	2007-03-20 23:25:38.000000000 +0000
@@ -47,6 +47,7 @@ GtkAccelGroup* terminal_accels_get_group
 #define ACCEL_PATH_ZOOM_IN ACCEL_PATH_ROOT"/zoom_in"
 #define ACCEL_PATH_ZOOM_OUT ACCEL_PATH_ROOT"/zoom_out"
 #define ACCEL_PATH_ZOOM_NORMAL ACCEL_PATH_ROOT"/zoom_normal"
+#define ACCEL_PATH_FIND_URLS ACCEL_PATH_ROOT"/find_urls"
 #define ACCEL_PATH_MOVE_TAB_LEFT ACCEL_PATH_ROOT"/move_tab_left"
 #define ACCEL_PATH_MOVE_TAB_RIGHT ACCEL_PATH_ROOT"/move_tab_right"
 #define ACCEL_PATH_DETACH_TAB ACCEL_PATH_ROOT"/detach_tab"
diff -urpb gnome-terminal-2.18.0.orig/src/terminal-screen.c gnome-terminal-2.18.0/src/terminal-screen.c
--- gnome-terminal-2.18.0.orig/src/terminal-screen.c	2007-03-12 20:42:51.000000000 +0000
+++ gnome-terminal-2.18.0/src/terminal-screen.c	2007-03-21 03:34:29.000000000 +0000
@@ -2874,3 +2874,37 @@ load_fonset_without_error (const gchar *
   
   return ret;
 }
+
+GSList *
+terminal_screen_find_urls (TerminalScreen *screen)
+{
+  guint x;
+  guint y;
+  guint width;
+  guint height;
+  GSList *ret = NULL;
+  guint flavor;
+
+  terminal_widget_get_size (screen->priv->term, &width, &height);
+
+  for (y = 0; y < width; y++)
+    for (x = 0; x < width; x++)
+      {
+        gchar *match;
+
+        match = terminal_widget_check_match (screen->priv->term, x, y,
+            &flavor);
+
+        if (!match)
+          continue;
+
+        if ((flavor == FLAVOR_AS_IS ||
+             flavor == FLAVOR_DEFAULT_TO_HTTP) &&
+            !g_slist_find_custom (ret, match, (GCompareFunc) strcmp))
+          ret = g_slist_append (ret, match);
+        else
+          g_free (match);
+      }
+
+  return ret;
+}
diff -urpb gnome-terminal-2.18.0.orig/src/terminal-screen.h gnome-terminal-2.18.0/src/terminal-screen.h
--- gnome-terminal-2.18.0.orig/src/terminal-screen.h	2007-03-12 20:42:51.000000000 +0000
+++ gnome-terminal-2.18.0/src/terminal-screen.h	2007-03-21 00:05:11.000000000 +0000
@@ -120,6 +120,8 @@ double      terminal_screen_get_font_sca
 
 void terminal_screen_update_scrollbar (TerminalScreen *screen);
 
+GSList     *terminal_screen_find_urls (TerminalScreen *screen);
+
 /* Allow scales a bit smaller and a bit larger than the usual pango ranges */
 #define TERMINAL_SCALE_XXX_SMALL   (PANGO_SCALE_XX_SMALL/1.2)
 #define TERMINAL_SCALE_XXXX_SMALL  (TERMINAL_SCALE_XXX_SMALL/1.2)
diff -urpb gnome-terminal-2.18.0.orig/src/terminal-window.c gnome-terminal-2.18.0/src/terminal-window.c
--- gnome-terminal-2.18.0.orig/src/terminal-window.c	2007-03-12 20:42:51.000000000 +0000
+++ gnome-terminal-2.18.0/src/terminal-window.c	2007-03-21 03:45:31.000000000 +0000
@@ -194,6 +194,8 @@ static void zoom_out_callback           
                                            TerminalWindow *window);
 static void zoom_normal_callback          (GtkWidget      *menuitem,
                                            TerminalWindow *window);
+static void find_urls_callback            (GtkWidget      *menuitem,
+                                           TerminalWindow *window);
 static void set_title_callback            (GtkWidget      *menuitem,
                                            TerminalWindow *window);
 static void change_encoding_callback      (GtkWidget      *menu_item,
@@ -996,6 +998,12 @@ terminal_window_init (TerminalWindow *wi
 
   update_zoom_items (window);
   
+  mi = gtk_separator_menu_item_new ();
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+  mi = append_stock_menuitem (menu, "Find URLs...", ACCEL_PATH_FIND_URLS,
+                              G_CALLBACK (find_urls_callback), window);
+
   mi = append_menuitem (window->priv->menubar,
                         "", NULL,
                         NULL, NULL);
@@ -2625,6 +2633,101 @@ zoom_normal_callback (GtkWidget      *me
   update_zoom_items (window);
 }
 
+static gboolean
+url_dialog_key_cb (GtkWidget   *widget,
+                   GdkEventKey *event,
+                   GtkDialog   *dialog)
+{
+  if (event->keyval == GDK_Return)
+    {
+      gtk_dialog_response (dialog, GTK_RESPONSE_ACCEPT);
+      return TRUE;
+    }
+  else
+    {
+      return FALSE;
+    }
+}
+
+static void
+find_urls_callback (GtkWidget      *menuitem,
+                    TerminalWindow *window)
+{
+  GSList *urls;
+  GSList *i;
+  GtkListStore *store;
+  GtkTreeViewColumn *column;
+  GtkCellRenderer *renderer;
+  GtkWidget *dialog;
+  GtkWidget *view;
+
+  urls = terminal_screen_find_urls (window->priv->active_term);
+
+  if (!urls)
+    {
+      dialog = gtk_message_dialog_new (GTK_WINDOW (window), GTK_DIALOG_MODAL,
+          GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "No URLs found.");
+      gtk_window_set_title (GTK_WINDOW (dialog), "Find URLs...");
+      gtk_dialog_run (GTK_DIALOG (dialog));
+      gtk_widget_destroy (dialog);
+      goto OUT;
+    }
+
+  store = gtk_list_store_new (1, G_TYPE_STRING);
+
+  for (i = urls; i; i = i->next)
+    {
+      GtkTreeIter iter;
+
+      gtk_list_store_append (store, &iter);
+      gtk_list_store_set (store, &iter, 0, i->data, -1);
+    }
+
+  view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
+  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), FALSE);
+  renderer = gtk_cell_renderer_text_new ();
+  column = gtk_tree_view_column_new_with_attributes (NULL, renderer,
+      "text", 0, NULL);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+  dialog = gtk_dialog_new_with_buttons ("Select URL", GTK_WINDOW (window),
+      GTK_DIALOG_MODAL,
+      GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+      GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+      NULL);
+  g_signal_connect (G_OBJECT (dialog), "key-release-event",
+    (GCallback) url_dialog_key_cb, dialog);
+  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
+  gtk_box_pack_start_defaults (GTK_BOX (GTK_DIALOG (dialog)->vbox), view);
+  gtk_widget_show_all (dialog);
+
+  if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      GtkTreeSelection *selection;
+      GtkTreeIter iter;
+
+      selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+
+      if (gtk_tree_selection_get_selected (selection, NULL, &iter))
+        {
+          gchar *url;
+          GError err = {0,};
+
+          gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 0, &url, -1);
+          /* XXX: check err */
+          gnome_url_show (url, &err);
+        }
+    }
+
+  gtk_widget_destroy (dialog);
+  g_object_unref (store);
+
+OUT:
+  for (i = urls; i; i = i->next)
+    g_free (i->data);
+
+  g_slist_free (urls);
+}
+
 static void
 set_title_callback (GtkWidget      *menuitem,
                     TerminalWindow *window)
