diff --git a/plugins/terminal/gb-terminal.c b/plugins/terminal/gb-terminal.c
index 53dd79d..e8c1026 100644
--- a/plugins/terminal/gb-terminal.c
+++ b/plugins/terminal/gb-terminal.c
@@ -149,6 +149,19 @@ gb_terminal_button_press_event (GtkWidget      *widget,
       gb_terminal_do_popup (self, (GdkEvent *)button);
       return GDK_EVENT_STOP;
     }
+  else if ((button->type == GDK_BUTTON_PRESS) && (button->button == GDK_BUTTON_PRIMARY)
+            && ((button->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK))
+    {
+      gchar *pattern;
+      pattern = vte_terminal_match_check_event (VTE_TERMINAL (self),
+                                                (GdkEvent *)button, NULL);
+      if (pattern != NULL)
+        {
+          gtk_show_uri (gtk_widget_get_screen (widget), pattern,
+                        gtk_get_current_event_time (), NULL);
+        }
+      return GDK_EVENT_STOP;
+    }
 
   return GTK_WIDGET_CLASS (gb_terminal_parent_class)->button_press_event (widget, button);
 }
@@ -215,4 +228,11 @@ static void
 gb_terminal_init (GbTerminal *self)
 {
   egg_widget_action_group_attach (self, "terminal");
+
+  gchar *pattern;
+  g_autoptr(GRegex) *g_regex;
+
+  pattern = "((http|https|ftp)://)\\S+";
+  g_regex = g_regex_new (pattern, 0, 0, NULL);
+  vte_terminal_match_add_gregex (VTE_TERMINAL (self), g_regex, 0);
 }
