2013年1月17日木曜日

Emacsのビルド

普段、使っているEmacsはgit://git.savannah.gnu.org/emacs.gitから取得した最新ソースを自分でビルドしたものだ。ビルドに失敗したこともあったけど、たいてい問題なく使えている。

ビルドには、 次のようなシェルスクリプトを書いて実行している。 
#!/bin/sh
cd /Users/hoge/emacs-git
make clean
./autogen.sh
./configure --with-ns --prefix=/Users/hoge/emacs-lib
make bootstrap
say emacs build completed.
最後のsayはMacに喋らせるコマンドで、ビルド完了がわかるように 入れている。
これをbuild-emacs.shといった名前のスクリプトファイルに保存し、実行権限を与えて
$ chmod +x build-emacs.sh
実行する。
$ ./build-emacs.sh
無事に完了したことを確認して
$ make install
することで /Users/hoge/emacs-git/nextstep/Emacs.app が生成される。 
これを/Applicationsへ移動すればよい。

ちなみに ./configureの箇所で--prefixを指定していないと Emacs.app配下に全ファイルがインストールされる。Mac的に正しいようにも思うけれど、Unix的な運用でEmacsに慣れているとちょっと違和感があるように思う。なので私はあえて別途/Users/${ユーザ名}/emacs-lib配下ヘsite-lispをつくられるようにしている。設定をいじる方法もあるから好みの問題か。

2013年1月13日日曜日

Macで--debug-initを実行

Mac上でEmacsを--debug-initオプションをつけて起動したいときがある。

普通、Linux等であれば
$ emacs --debug-init
すれば良いだけであるが、 Macに自分でインストールしたEmacsについては
$ /Applications/Emacs.app/Contents/MacOS/Emacs --debug-init &
とするか openコマンドを使って
$ open /Applications/Emacs.app --args --debug-init
するとか。 openコマンドは便利です。

2013年1月11日金曜日

org-modeのpublishingを使ってWebサイト構築

publishingの設定

org-modeはorgファイルをHTMLへ変換することができるだけではなく そのままサーバーにアップする機能まで付いている。 簡単な静的なHTMLのサイトを作る場合について調べてみたので とりあえず簡単なまとめを書いておく。

用意するディレクトリ等は次のような感じ。 

  • ソースディレクトリ: /home/hoge/mysite-src 
ここにはindex.org, xxxx.orgといったファイルを格納している。 またHTMLに必要なstyle.cssファイルやimage.jpgといったリソース類も orgファイルと同一ディレクトリに配置する。
  • 検証用のローカルディレクトリ: /home/mysite-publish
  • 本番用のWebサーバー(ftp): www.example.com

以上の内容を.emacsへ設定すると次のようになる。

(setq org-publish-project-alist
'(
;; 検証用
("local-orgfiles"
:base-directory "/home/hoge/mysite-src"
:publishing-directory "/home/hoge/mysite-publish"
:style ""
:section-numbers nil
:table-of-contents nil)
("local-resources"
:base-directory "/home/hoge/mysite-src"
:publishing-directory "/home/hoge/mysite-publish"
:base-extension "jpg\\|gif\\|png\\|css"
:publishing-function org-publish-attachment)
("local" :components ("local-orgfiles" "local-resources"))
;; 本番用
("web-orgfiles"
:base-directory "/home/hoge/mysite-src"
:publishing-directory "/ftp:hoge@www.example.com:/"
:style ""
:section-numbers nil
:table-of-contents nil)
("web-resources"
:base-directory "/home/hoge/mysite-src"
:publishing-directory "/ftp:hoge@www.example.com:/"
:base-extension "jpg\\|gif\\|png\\|css"
:publishing-function org-publish-attachment)
("website" :components ("web-orgfiles" "web-resources"))
))
ローカル用と本番用で大きく2つに設定が分かれる。
さらにそれぞれは

1. orgファイルの変換と出力
2. 必要なリソースの出力
3. 上記2つをまとめて実行

という3種類の設定を用意している。

上の色を付けた箇所が各設定である。
 local-orgfilesはorgファイルをhtmlへ変換し、検証用のローカルディレクトリへ出力する。
 local-resourcesはjpgやcss等を検証用のローカルディレクトリへコピーする。
 localは上の2つをまとめて実行する。

 web-で始まるものは本番用に対応している。

もっと本格的なディレクトリ構成にする場合、例えば画像ファイルはimagesディレクトリへ、cssファイルはcssディレクトリへと整理する場合は、org-publish-attachmentを使った定義を増やせばよい。 そして定義を書く順番には意味があり、検証用の定義を先に書くことでそちらが優先されて使われるようである。

出力方法

ショートカットはまずC-c C-eを押せば、Export/Publishのメニューが表示されるのでこれだけ覚えればあとは見れば分かる。 C-c C-e P orgファイルが属するディレクトリから対応するPublishing用の設定が選択されて実行する。今回の設定では検証用のlocalというのが実行されるはずである。 C-c C-e X 実行する定義名を指定して実行。本番用を実行したければ、こちらで名前を指定すればよい。 ちなみにorg-modeにはexportとpublishingと似たような機能があってそれぞれの責任範囲がどこまでなのか混乱してしまった。おおざっぱにいうと

export

orgフォーマットから別のフォーマットのファイルを生成する

publishing

exportを実行し、さらに生成されたファイルやリソース類をサーバーへアップする
という理解でいいように思う。 exportを単純に実行した場合はorgファイルと同じディレクトリにファイルが生成される。

しかし変数org-export-publishing-directoryを指定すれば出力先は制御可能だ。つまりローカルでHTMLの生成の確認をするだけならexportで十分な気もしてしまうが、画像ファイルやcssの扱いが煩雑になりそうだったので結局、すべてpublishingでやってしまうことにした。もっとエレガントな方法があるかもしれない。

2013年1月4日金曜日

Google site用の文書をemacsのorg-modeで作成してみる

Google Site用の文章をEmacs上で作成できないか考えた。

まずはemacsでorg-modeで原稿を作成する。
例えば、manual.orgという次のような感じ。
#+OPTIONS: H:5 num:nil toc:nil \n:t @:t ::t |:t ^:t f:t TeX:t *:t

* xxxxの使い方

** Section1
パラグラフ
** Section2
パラグラフ
原稿ができたら、C-c C-e Hを実行すると一時バッファへHTMLソースが出力される。
その中からbodyタグの中身だけをコピーする。

次にGoogle Siteの対象ページの編集画面を開き、ツールバーの<HTML>ボタンを押下。
そこに先ほどコピーした分をペーストして、更新ボタンを押す。

HTMLタグのID属性など不要なものは勝手に消してくれるようだ。

もっと大雑把で良ければ、上記の一時バッファをまるごとコピペしても、使用禁止のタグを使っている旨のエラーがでてそれらを除去してくれるので、結果的に同じことができるるが、精神衛生上あまりよくないので、丁寧にbodyタグの中身だけをコピーしたほうがいいだろう。