カスタムOpenerとは、Paneを生成する時にユーザーが定義した振る舞いをすることを指す。(実装を調べた結果僕がそう読んでるだけで、正しい呼び方は知らない)
デフォルトだとTextEditorになっている。Cmd+, の設定画面や、MarkdownPreviewのPreview側だと思うとわかりやすいかもしれない。
url = require 'url'
{View} = require 'atom-space-pen-views'
# ターゲットなるViewの実装。タブ名で使われるgetTitleを実装する必要がある。
class SimpleView extends View
@content: ->
@div 'hello!'
getTitle: -> 'debugging'
# 呼び出し時のプロトコルがsimple://だったら↑のviewを返す
# openerが falsy な値を返すとこのopenerは無視され次のopenerに処理が移る…のだと思う
atom.workspace.addOpener (uriToOpen) ->
{protocol, host, pathname} = url.parse(uriToOpen)
return unless protocol is 'simple:' # simple: 以外を無視する
new SimpleView
atom.workspce.open 'simple://foo' # 開く
今はfooという雑なメッセージを投げているけど、実際にはファイルパスを渡したりして任意のプレビューを作ったりするのに使えると思う
以上のことは markdown-preview を読んで学んだ