30秒ドローイングのソフトメモ
ニコ生徘徊してたら、こういうの紹介してもらった。
https://sites.google.com/site/fpaintnagato/paint/halfamindrawing
トップページ:
https://sites.google.com/site/fpaintnagato/home
F#で作っててすごいなーと思う。
さっそくベルセルクの画像検索してやってみたけどさっぱりですね、はい。
一時期30秒ドローイングやってたので再開してみようかなと。
MacターミナルのEmacsが古かった根本的な原因
根本的な原因は.zshrcのPATH設定が悪かったからだった。
自分は
export PATH=/usr/bin:/usr/local/bin
という風に/usr/binの後に/usr/local/binを配置してたのが問題だった。brew doctorをしてみて原因がわかった。
brew doctorをすると
Error: /usr/bin occurs before /usr/local/bin This means that system-provided programs will be used instead of those provided by Homebrew. The following tools exist at both paths: ... ... ... Consider amending your PATH so that /usr/local/bin is ahead of /usr/bin in your PATH.
こんな感じのが出たはず。
参考: YOMiTOKU: brew doctorの /usr/bin occurs before /usr/local/binにはまったときの解決法
なのでbashの人は .bash_profile or .bashrc のPATHを、zshの人は.zshrc or .zshenvのPATHにある /usr/local/bin が /usr/bin や /usr/local/sbin より先になるように順番を入れ代える。
export="/usr/local/bin:/usr/bin:/usr/local/sbin:$PATH"
これでターミナルで $ emacs とやって新しいバージョンが使えるようになる。
自己紹介ページを少し作った
簡単だけどWikiの方で自己紹介っぽいもの書いてみた。
あとでまた充実させたい。
http://www18244ue.sakura.ne.jp/
http://www.pogi-pogi.net
ドメインも取らないとなぁ。
取って変更した。
2014/01/21 追記
どうもうまくいってないので今度直す。
EmacsLispで最小構成(っぽい)テストをする方法
ERTでテストをするやり方が気になったので、Githubでテストしているリポジトリをいくつか見ていった。
いくつかのリポジトリを見て、これぐらいなら後々応用が利くかなと程度のものができたので記事にしてみようと思う。
テストはEmacs24でついてくるようになったERTをMakefileでテストするやつになる。
https://github.com/pogin503/emacs-test-sample
ここに作ったやつが置いてあるので
$ git clone git://github.com/pogin503/emacs-test-sample.git $ cd emacs-test-sample $ make test
で実行出来ます。
実行例
$ make test /Applications/Emacs.app/Contents/MacOS/Emacs --batch -Q -L . --eval \ "(progn \ (setq byte-compile-error-on-warn t) \ (batch-byte-compile))" *.el Wrote /Users/username/repo/emacs-test-sample/myfile.elc /Applications/Emacs.app/Contents/MacOS/Emacs --batch -Q -L . -l test/run-test.el Running tests on Emacs 24.3.1 Loading /Users/username/repo/emacs-test-sample/test/myfile-test.el (source)... Running 1 tests (2013-06-18 01:57:09+0900) passed 1/1 myfile:addition-test Ran 1 tests, 1 results as expected (2013-06-18 01:57:09+0900)
中身について
フォルダ構成
フォルダ構成はこんなふうにしている。
. ├── Makefile ├── myfile.el └── test ├── lib #テスト用のライブラリディレクトリ(必要があれば作る) │ ├── cl-lib.el │ └── ert.el ├── myfile-test.el #実行されるテスト └── run-test.el #実行用の設定をしてテストを走らせるファイル
バッチ処理
Emacsのバッチ処理は-batch または--batchをオプションに入れて実行します。
$ emacs --batch -L . --eval "(message \"Running tests on Emacs %s\" emacs-version)"
バッチ処理でよく使うオプションはこんなの
オプション | 効果 | |
-Q | .emacsや、.emacs.d/init.elを読み込まないようにする、かつ最小の設定で起動する | |
-L directory | directoryをload-pathに追加する | |
-f function | functionを引数なしで読み込む | |
-l file | ファイル名をloadする | |
--batch | バッチモードを動かす | |
--eval expression | --evalの後に続くLispプログラムを評価する |
Makefile
Makefileはこんな風にすればいいんじゃないかと思う。
# Makefile UNAME:=$(shell uname -s) #多分動くと思う ifeq ($(UNAME),Darwin) EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs else EMACS=emacs endif .PHONY : build test build : $(EMACS) --batch -Q -L . --eval \ "(progn \ (setq byte-compile-error-on-warn t) \ (batch-byte-compile))" *.el test: build $(EMACS) --batch -Q -L . -l test/run-test.el
Macを使っていると/usr/binにある古いEmacsが使われるので
ifeq ($(UNAME),Darwin) EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs else EMACS=emacs endif
ifeq普段使うEmacsを設定しておかないといけない。
- build部分ではバイトコンパイルをしています。ロードするファイルが多くなれば多分体感できるぐらいまで早くなるのかも。別になくてもいい気がする。
だいたいこんな風にすれば最小限の設定で動かすことができてテストをすることができます。
myfile.el
ERTで実行する用に用意する。
;; myfile.el (defun myfile:addition (a b) (+ a b)) (provide 'myfile)
test/myfile-test.el
実行されるファイルには(require 'ert)、(require 'myfile)とかして必要なファイルをものをロードする。
ERTはert-deftestを使って実行するテストを作る。
;; test/myfile-test.el (require 'ert) (require 'myfile) (ert-deftest myfile:addition-test () (should (= (myfile:addtion 1 2) 3)))
test/run-test.el
このファイルで実際にテストをするためのロードパスや、読み込むライブラリを設定する。
Makefileにの-lオプションで読み込むときに使われる。
少々ながいのでgithubの方で見てください。
https://github.com/pogin503/emacs-test-sample/blob/master/test/run-test.el
test/run-test.el 内でテストを実行してる部分は下の部分になる。
;; test/run-test.el ;; Run tests (if noninteractive (ert-run-tests-batch-and-exit) (ert t))
テストをしていたリポジトリ
GitHub - uk-ar/el-spec
GitHub - bbatsov/projectile: Project Interaction Library for Emacs
GitHub - rolandwalker/emacs-travis: Travis CI recipe for Emacs libraries.
GitHub - ecukes/ecukes: Cucumber for Emacs
GitHub - cask/cask: Project management tool for Emacs
GitHub - auto-complete/auto-complete: Emacs auto-complete package
GitHub - emacs-mirror/emacs: Mirror of GNU Emacs
GitHub - tkf/emacs-jedi: Python auto-completion for Emacs
GitHub - haskell/haskell-mode: Emacs mode for Haskell
https://github.com/flycheck/flycheck
travis-ciでテストをする場合は rolandwalker/emacs-travis を見ればいいと思う。でもMakefileの中身でいろいろやってて複雑ではある。
やっぱりこっちの方が簡単そうなのでこっちを見るといいと思う。
GitHub - lewang/ert-test-skeleton
(追記 2013.6.18)
Cartonを使ったtravis-ciのテストをtkfさんが作ってくれたのでそれも紹介する
GitHub - tkf/emacs-plugin-template: Minimal emacs plug-in template with setup for Travis CI
Cartonを使うほうがだいぶ楽そう。
追記2013/10/3
→CartonからCaskに名前が変わった。
終わりに
とりあえずERTのバッチテストは出来たのでひとまずは満足。
そしてこの記事を書いた後にもっと良さげなサンプルを見つけてしまうという...。
自分はまだテストちゃんと作ったことが無いのでちゃんと作ってみようと思う。
(追記 2013.6.18)
el-specとかEcukesとかERTをカバーする実装があるので、そっちの導入を次は書けばいいのかなと。
Cannot open load file: subst-ksc と出るエラー対策?
根本的な問題解決はこっちかも→MacターミナルのEmacsが古かった根本的な原因 - プログラムとかののblog
===============================
MacでEmacsのテストをやってみてたらなんかエラーが出てきた。
どうもパスを設定できていなかったからうまくいかなかったみたい。
;; @see http://d.hatena.ne.jp/yuheiomori0718/20111230/1325246364 ;; @see http://sakito.jp/emacs/emacsshell.html#path (let ((dir "/Applications/Emacs.app/Contents/MacOS/Emacs")) (when dir) (setenv "PATH" (concat dir ":" (getenv "PATH"))) (setq exec-path (append (append (list dir) exec-path))))
まぁ結局はMacのバージョン22.1.1という古いバージョンでやってたのがいけなかったみたい。/usr/bin/emacs のバージョンが古いのが悪い。
なので新しいバージョンでやる場合は
/Applications/Emacs.app/Contents/MacOS/Emacs
で実行する。そうしないとエラーがいっぱい出てきそう。
Cannot open load file: cl-lib
Symbol's function definition is void: declare-function
最新のERTだとこういうエラーが出た。cl-libは22.1.1にないし、なぜかdeclare-functionも22.1.1にないらしい。
実行する場合はこんな感じ
$ /Applications/Emacs.app/Contents/MacOS/Emacs -Q -L . --batch test/run-test.el
こんな感じでコマンドを実行するとバッチ実行ができる。
ちゃんとしたEmacsでのテストの記事はまだ書けない。Wikiに情報が溜まったら書こうと思う。
オプション | 効果 |
-L | ディレクトリ指定のオプション |
-Q | ~/.emacsや、~/.emacs.d/init.elを読み込まないようにするオプション |
Gititのシンタックスハイライトに対応している言語と、その書き方
GithubのPandocにGititで処理されそうなシンタックスハイライトの
対応言語が書いてある。
pandoc/Highlighting.hs at master · jgm/pandoc · GitHub
今のところPandocは、これらの言語のシンタックスハイライトに対応している。
Ada Assembler Awk C C++ Caml Eiffel Erlang Fortran HTML Haskell Java Lisp Matlab Modula-2 PHP Pascal Perl Prolog Python R Ruby SQL VHDL Verilog XML XSLT bash make tcl
Gititでのシンタックスハイライトは、shell scriptをハイライトする場合は
~~~{.bash} cat ~/.bashrc ~~~
と書くか、
```bash cat ~/.bashrc ```
と書かないといけない。下のやつはgithubと同じ。自分には下の方に馴染みがあるのでバッククォートの方を使っていこうと思う。
対応言語について
Pandocはだいたい主要な言語のシンタックスハイライトに対応している。RubyとかJavaとか。でも思い当たる言語で、Clojure, Scala, F#, C#が対応してない。Clojureは多分commonlispで代用できるとしても、他の言語はないと使う時に不便を感じてしまいそう。
ハイライトの処理はどこでやってる?
実際の色付け処理はText.Highlighting.Kateの方で処理されているっぽい。Text.Highlighting.Kate.Stylesのlanguageに対応言語が列挙されてる。
もしかしたらアップデートされてないだけで、Clojure,Scala,C#,F#は使えるのかもしれない。
Gititでのコードハイライトの対応状態を知りたい人はPandocのHighlighting.hsを見れば良いと思う。
暇があればlanguage部分のコードを書き換えて、Scalaなどがハイライトされるか試して見る(ちゃんとやりたい)。
EmacsLispでアナフォリックマクロを使う
Emacsでもアナフォリックマクロは使うことができる。使う場合は
M-x package-install anaphora でインストールすればいい。
auto-installを持ってる人はこれを M-: で評価したり、*scratch* バッファでC-jで評価すればいい。
(auto-install-from-url "https://raw.github.com/rolandwalker/anaphora/master/anaphora.el")
https://github.com/rolandwalker/anaphora
しかし、あまりアナフォリックマクロを理解してないので、使う機会を見つけられない。
関連リンク
修正履歴
2013/4/29 auto-installのコードがダウンロード出来ないURLだったので修正した。あと、参考リンク→関連リンクに名前を変更。