エディタのほうのAtomのお話です。
AtomのInit FileをClojureScriptで書きたいなと思って調べたらできたのでメモします。
まずは、ホームディレクトリ/.atom に移動してnpm install clojurescript
を実行することで
clojurescript-npm をローカルインストールします。
(ホームディレクトリ/.atom/node_modules/clojurescript ができればOK)
そうすることでinit.coffeeの中でrequire 'clojurescript'
ができるようになります。
次にinit.coffeeに以下の記述をします。
os = require 'os'
path = require 'path'
fs = require 'fs'
cljs = require 'clojurescript'
cljs.context.atom = atom
cljs.context.protoRepl = protoRepl
initCljs = path.join os.homedir(), '.atom/init.cljs'
fs.readFile initCljs, 'utf8', (err, data) ->
throw err if err
cljs.eval("(do #{data})")
これで準備が整いました。あとはホームディレクトリ/.atom/init.cljsファイルを作ってClojureScriptで設定を記述できます。
例えば以下のように
(.log js/console global.atom)
(.log js/console global.atom.commands)
(.. global.atom.commands
(add "atom-text-editor" "cljs:sample-linefirst"
#(.. global.atom.workspace
getActiveTextEditor
getLastCursor
moveToFirstCharacterOfLine)))
これで、Proto REPLパッケージのSelf Hosted ClojureScript REPLを使ってAtom自身の操作を試しつつ、その結果をinit.cljsに反映できてハッピーになれそうです。
init.coffeeの中身の解説を少しすると
cljs.context.XXX
に代入するとinit.cljsのほうではglobal.XXX
で参照できます。
cljs.evalの引数は単一のフォームでないとエラーになるのでdoで囲っています。
ここでは使ってませんが、cljs.newContext()を使うとadm-zipがないと怒られてなぜかダメでした。