diff --git a/src/atom-environment.coffee b/src/atom-environment.coffee index a32c4424b..7bbc513d6 100644 --- a/src/atom-environment.coffee +++ b/src/atom-environment.coffee @@ -32,6 +32,7 @@ ThemeManager = require './theme-manager' MenuManager = require './menu-manager' ContextMenuManager = require './context-menu-manager' CommandInstaller = require './command-installer' +CoreURIHandlers = require './core-uri-handlers' ProtocolHandlerInstaller = require './protocol-handler-installer' Project = require './project' TitleBar = require './title-bar' @@ -238,6 +239,7 @@ class AtomEnvironment extends Model @commandInstaller.initialize(@getVersion()) @protocolHandlerInstaller.initialize(@config, @notifications) + @uriHandlerRegistry.registerHostHandler('core', CoreURIHandlers.create(@)) @autoUpdater.initialize() @config.load() diff --git a/src/core-uri-handlers.js b/src/core-uri-handlers.js new file mode 100644 index 000000000..c575b3f40 --- /dev/null +++ b/src/core-uri-handlers.js @@ -0,0 +1,24 @@ +function openFile (atom, {query}) { + const {filename, line, column} = query + + atom.workspace.open(filename, { + initialLine: parseInt(line || 0, 10), + initialColumn: parseInt(column || 0, 10), + searchAllPanes: true + }) +} + +const ROUTER = { + '/open/file': openFile +} + +module.exports = { + create (atomEnv) { + return function coreURIHandler (parsed) { + const handler = ROUTER[parsed.pathname] + if (handler) { + handler(atomEnv, parsed) + } + } + } +}