Keep on moving

あんまりまとまってないことを書きますよ

reStructuredText を Marked.app でプレビュー表示するメモ in 2014

どうもこんにちは、近頃めっきりブログを書かなくなった @ です。
いかがお過ごしでしょうか?
超久々にいいソフトを教えていただいたので、
下を参考に環境を作ったので残しておきます。

http://d.hatena.ne.jp/CortYuming/20130531/p1

Marked2

Markedは近頃Marked2にアップデートされたそうです。
Marked1はApp Storeで配布されていましたが、Marked2は http://paddle.com/ でRegisterするようになったみたいです。

http://marked2app.com/

docutils

easy_install でdocutilsを入れてやればOKです。

sudo easy_install docutils

まとめ

今までブラウザでrestructuredTextをHTML化したものを見ていたんですが、
Marked2だと更新されたところに移動してくれます。
超便利なのでみんな使うといいよ。
身長が伸びて、壁が上達....するわけではありませんが(^o^)

EmacsでJSを書きながらGoogle標準の書き方をしてるかチェックしよう!

GoogleJavaScriptコーディングガイドを公開しました。
このガイドに従った開発を支援してくれる文法チェックツールのClosure Linterを公開してます。
コマンドラインから使うツールなんですが、できたらEmacsでリアルタイムに文法チェックをしてくれるといいなとずっと思ってました。自力で書いてしまおうかと思ったのですがGitHubで検索したらすでに公開している人がいるじゃないですか!早速使ったら便利でしたので導入の仕方を自分用にまとめます。

flymakeの説明

Emacsで使える文法チェッカです。下のリンクを参照ください。
Flymake -- an on-the-fly syntax checker for Emacs

Install方法

1.Closure Linterをインストールします。
How to Use Closure Linter - Closure Tools — Google Developers

2.下のリンクからelをダウンロードし、.emacs.dフォルダなどパスが通っているフォルダに追加します。
http://gist.github.com/561978

3. .emacsファイルに以下の設定を追加します。

;; js-modeを使っている方はjs2-modeをjs-modeに
;; 変更してください。
(require 'gjslint)
 (add-hook 'js2-mode-hook
 (lambda () (flymake-mode t)))

実際に動かす

f:id:Ehren:20101006195748j:image
エラーが出ますね。エラー行はバックの色が変わります。

f:id:Ehren:20101006195749j:image
エラー箇所にマウスカーソルを当てるとエラー原因が出ます。直しましょう。

f:id:Ehren:20101006195750j:image
はい、バックの色が戻ります。

まとめ

jsを書きながら文法チェックをしてくれるのはかなり開発効率がいいです。
Happy Coding .-)

ちなみにvim版を書いている方もいましたので、紹介しておきます。
dotfiles/dot.vim/compiler/gjslint.vim at 13917d2377cf10890cb96c1ef325161db64e6dfd · eagletmt/dotfiles · GitHub

割と最近のswank-clojure+slime環境の構築

Emacsで割と最近のclojure-mode+swank-clojure+slimeで環境を作りました。
かなりはまってしまったので作業内容をまとめておきます。
今回はMac OS X 10.6での環境作りを行いましたが、多分*nix系でも同じはずです。

ClojureWithEmacsSlimeSwankOnUbuntu
を参考にインストールしましたが、私の環境ではうまくいきませんでした。
【この情報は2010/3/26時点でのものです。clojure-mode,swank-clojureは変更が多いので環境構築時にはその時点での変更が必要になる場合があります】

Windows Userへ

迷わずClojure boxを入れましょう。

作業内容をまずは手短に

  • clojure-modeをダウンロード
  • clojure-modeに手を入れ、.emacsの編集
  • emacs で M-x clojure-install する
  • clojure-install でダウンロードしたslimeを削除、新しくダウンロードする
  • swank-clojureに手を入れる
  • emacs で M-x slimeする
clojure-modeをダウンロード
~$ git clone git://github.com/technomancy/clojure-mode.git 

.emacsに設定します。

;; clojure-mode
(add-to-list 'load-path "~/.emacs.d/site-lisp/clojure-mode") ;;clojure-modeのpath
(require 'clojure-mode)
(setq clojure-src-root (expand-file-name "~/share/clojure")) ;;clojure-installしたときのダウンロードフォルダ
clojure-modeに手を入れ、.emacsの編集

このまま、M-x clojure-installするとclojure-contribをビルドしようとしてエラーになります。
前はantでビルドしていたようですが、近頃mavenを使うように変更されたようです。
また、github側でのtag名が変更になったようで、ここも変更する必要があります。

diff --git a/clojure-mode.el b/clojure-mode.el
index 9cb6761..c42d85c 100644
--- a/clojure-mode.el
+++ b/clojure-mode.el
@@ -748,13 +749,13 @@ See http://technomancy.us/swank-clojure for details. Abort? ")
         (error "Clojure installation step failed: %s" cmd)))
 
     (cd (format "%s/clojure" src-root))
-    (shell-command "git checkout 1.0")
+    (shell-command "git checkout 1.1.0")
     (unless (= 0 (shell-command "ant"))
       (error "Couldn't compile Clojure."))
 
     (cd (format "%s/clojure-contrib" src-root))
-    (shell-command "git checkout clojure-1.0-compatible")
-    (unless (= 0 (shell-command "ant -Dclojure.jar=../clojure/clojure.jar"))
+    (shell-command "git checkout 1.1.0")
+    (unless (= 0 (shell-command "mvn package -Dclojure.jar=../clojure/clojure.jar"))
       (error "Couldn't compile Contrib."))
 
     (with-output-to-temp-buffer "clojure-install-note"
emacs で M-x clojure-install する

変更後、EmacsでM-x clojure-installします。

終了後、slime関係の設定を.emacsに追加します。

(clojure-slime-config "~/share/clojure/") ;;slimeのある場所を設定

;; slime
(eval-after-load "slime"
  '(progn (slime-setup '(slime-repl slime-fuzzy slime-c-p-c))))
(require 'slime)
(slime-setup)
(setq slime-net-coding-system 'utf-8-unix)
clojure-install でダウンロードしたslimeを削除、新しくダウンロードする

この時点で EmacsでM-x slimeするとエラーになります。swank-clojure側の近頃の変更が原因のようです。
clojure-installしてダウンロードしたslimeを削除し、新たに取得します。

~$ git clone git://github.com/nablaone/slime.git
clojure-mode,swank-clojureに手を入れる

しかし、このままでは動きませんのでclojure-mode,swank-clojureに手を入れます。
<<参考>>

diff --git a/clojure-mode.el b/clojure-mode.el
index 9cb6761..c42d85c 100644
--- a/clojure-mode.el
+++ b/clojure-mode.el
@@ -700,14 +700,15 @@ is bundled up as a function so that you can call it after you've set
     (add-to-list 'load-path (concat clojure-src-root "/swank-clojure"))
 
     (require 'slime-autoloads)
-    (require 'swank-clojure-autoload)
+    ;; (require 'swank-clojure-autoload)
 
     (slime-setup '(slime-fancy))
 
     (setq swank-clojure-classpath
           (list
            (concat clojure-src-root "/clojure/clojure.jar")
-           (concat clojure-src-root "/clojure-contrib/clojure-contrib.jar")))
+           (concat clojure-src-root "/clojure-contrib/clojure-contrib.jar")
+	   (concat clojure-src-root "/swank-clojure/src")))
     (eval-after-load 'slime
       '(progn (require 'swank-clojure)
               (setq slime-lisp-implementations
diff --git a/src/swank/core/protocol.clj b/src/swank/core/protocol.clj
index 89f0890..67641f1 100644
--- a/src/swank/core/protocol.clj
+++ b/src/swank/core/protocol.clj
@@ -4,6 +4,26 @@
 
 ;; Read forms
 (def #^{:private true}
+     *fix-message-re* #"::%(.*?)%")
+
+(defn- fix-message [text]
+  (.replaceAll (re-matcher *fix-message-re* text) "/?$1?"))
+
+(def #^{:private true}
+     *percent-re* #"%")
+
+(defn- fix-percent
+  "Replace double colons with a /."
+  ([text] (.replaceAll (re-matcher *percent-re* text) "?")))
+
+(def #^{:private true}
+     *double-colon-re* #"::")
+
+(defn- fix-double-colon
+  "Replace double colons with a /."
+  ([text] (.replaceAll (re-matcher *double-colon-re* text) "/")))
+
+(def #^{:private true}
      *namespace-re* #"(^\(:emacs-rex \([a-zA-Z][a-zA-Z0-9]+):")
 
 (defn- fix-namespace
@@ -50,7 +70,7 @@
   ([#^java.io.Reader reader]
      (let [len  (Integer/parseInt (read-chars reader 6 read-fail-exception) 16)
            msg  (read-chars reader len read-fail-exception)
-           form (read-string (fix-namespace msg))]
+	   form (read-string (fix-namespace (fix-message msg)))]
        (if (seq? form)
          (deep-replace {'t true} form)
          form))))

これで、Emacsで M-x slime するとslimeが立ち上がり、clojureの実行が出来るようになります。お疲れ様でした。

まとめ

clojureまわりは近頃かなり変更が多いです。
とくに、clojure-mode,swank-clojureは変更が多いので自分で情報を集めて手を入れる必要がありそうです。
個人的には依存関係がほとんどない、Eclipse pluginのcounterclockwiseを入れて見るのがかなりいいんじゃないかなと思います。
先人の方々に感謝。