LoginSignup
0

More than 5 years have passed since last update.

Atomのinit.coffeeをinit.cljs(ClojureScript)で置き換える方法

Last updated at Posted at 2016-08-25

エディタのほうのAtomのお話です。
AtomのInit FileをClojureScriptで書きたいなと思って調べたらできたのでメモします。

まずは、ホームディレクトリ/.atom に移動してnpm install clojurescriptを実行することで
clojurescript-npm をローカルインストールします。
(ホームディレクトリ/.atom/node_modules/clojurescript ができればOK)
そうすることでinit.coffeeの中でrequire 'clojurescript'ができるようになります。

次にinit.coffeeに以下の記述をします。

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で設定を記述できます。
例えば以下のように

init.cljs
(.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がないと怒られてなぜかダメでした。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0