Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
112 lines (73 sloc) 3.13 KB

ElectronとClojureScriptではじめてのcore.async


発表者


概要

Atom Editorのベースにもなっている、HTML5/CSS3/JavaScriptでデスクトップアプリを作れるライブラリ/環境であるElectron(旧Atom-Shell)の開発をClojureでやりたいと思い、テンプレートを制作、公開した。

今日はcore.asyncをElectron上で使ってみる。

もしかして Electron https://t.co/RRZ3F3hkTN

— Yasushi Abe (@yasushia) April 19, 2015
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

サンプルは、Electronアプリ上で5秒経つとファイルの開くダイアログを表示する。

注意

  • 僕もはじめて使いました
  • ライブコーディングで進めます
  • 現在、このテンプレートは動作しません(Atom-Shellをatom-shellディレクトリ以下に配置すれば動く)

あらすじ

昨日descjop(デスクジョップ)をリリース。

「descjopは、HTML5/CSS3/JSでデスクトップアプリを作れるAtom-ShellのClojureScript版Leiningenテンプレート」

GitHub : lein-template-descjop

clojars : clojars/descjop/lein-template

descjopを使って、プロジェクトを作成(今回は'halake1')

lein new descjop YOUR_APP_NAME

ビルド

npm install -g grunt-cli
npm install
grunt download-atom-shell
lein externs > app/js/externs.js
lein cljsbuild once

ファイルを開くダイアログを出してみる

core.cljsの-mainに追加

(let [dialog (nodejs/require "dialog")]
  (.showOpenDialog dialog
    (clj->js {:properties ["openFile" "openDirectory" "multiSelections"]})))

core.asyncを使って5秒後にネイティブのダイアログを表示

project.cljに追加

[org.clojure/core.async "0.1.346.0-17112a-alpha"]

core.cljsのnsに追加

(:require-macros [cljs.core.async.macros :refer [go]])

core.cljsのrequireに追加

[cljs.core.async :as async :refer [>! <! put! timeout chan]]

core.cljsの-mainに追加

(let [ch (chan) dialog (nodejs/require "dialog")]
  (go
    (while true
      (let [v (<! ch)] ; 5秒後に実行
       (.showOpenDialog dialog (clj->js
         {:properties ["openFile" "openDirectory" "multiSelections"]})))))
  (go
    (<! (timeout 5000))
    (>! ch 1) ; これ大事
    ))