diff --git a/spec/app/window-spec.coffee b/spec/app/window-spec.coffee
index a173689c7..e39f451b9 100644
--- a/spec/app/window-spec.coffee
+++ b/spec/app/window-spec.coffee
@@ -230,3 +230,25 @@ describe "Window", ->
event = buildDragEvent("drop", [])
window.onDrop(event)
expect(atom.open).not.toHaveBeenCalled()
+
+ describe "when a link is clicked", ->
+ it "opens the http/https links in an external application", ->
+ ChildProcess = require 'child_process'
+ spyOn(ChildProcess, 'spawn')
+
+ $("the website").appendTo(document.body).click().remove()
+ expect(ChildProcess.spawn).toHaveBeenCalled()
+ expect(ChildProcess.spawn.argsForCall[0][1][0]).toBe "http://github.com"
+
+ ChildProcess.spawn.reset()
+ $("the website").appendTo(document.body).click().remove()
+ expect(ChildProcess.spawn).toHaveBeenCalled()
+ expect(ChildProcess.spawn.argsForCall[0][1][0]).toBe "https://github.com"
+
+ ChildProcess.spawn.reset()
+ $("the website").appendTo(document.body).click().remove()
+ expect(ChildProcess.spawn).not.toHaveBeenCalled()
+
+ ChildProcess.spawn.reset()
+ $("link").appendTo(document.body).click().remove()
+ expect(ChildProcess.spawn).not.toHaveBeenCalled()
diff --git a/src/app/window.coffee b/src/app/window.coffee
index a70829762..c477031d5 100644
--- a/src/app/window.coffee
+++ b/src/app/window.coffee
@@ -27,6 +27,15 @@ window.setUpEnvironment = ->
window.pasteboard = new Pasteboard
window.keymap = new Keymap()
$(document).on 'keydown', keymap.handleKeyEvent
+
+ $(document).on 'click', 'a', (e) ->
+ location = $(e.target).attr('href')
+ return unless location or location[0] is '#'
+
+ if location.indexOf('https://') is 0 or location.indexOf('http://') is 0
+ require('child_process').spawn('open', [location]) if location
+ false
+
keymap.bindDefaultKeys()
requireStylesheet 'atom'