2013年1月30日水曜日

Emacsのcustomizeを使う

Emacsというのは相変わらず.emacsファイルをガシガシ書くのが主流なのだろうか。 私は最近の事情に疎いのでよくわからない。

最近になってAnythingというのを知り、使い始めるようになったぐらいである。 最初インストールすると過激なぐらいデフォルトの挙動がAnything化されてしまい、いささか驚いてしまった。最初は頑張ってその状態で使っていたけれど あまりにも変貌しているので頭がくらくらしてきた。 結局、今は C-x b にanything for filesをアサインしているだけという 控えめな状態で使っている。Macで使う場合、Spotlightと機能的に少しかぶっている気もするけれど。

M-x customize

というわけで、EmacsのM-x customizeというのも最近になって使い始めたのだが、 これも当たり前のことなんだろうか。 今までほとんど無視してきたが、いざ使ってみると思いの外便利で 使ってこなかったことを後悔した。 Emacsユーザーというのは.emacsファイルにゴリゴリ設定を書くというのが普通というイメージだったのだが、 実際のところcustomizeはどの程度使われているものなんだろう。 というわけで知っている人には当然のことであろうが 自分なりに気づいた点を書いてみる。

専用の設定ファイルを用意する

今までcustomizeをなんかやだなーと思っていたのは .eamcsファイルを勝手に書き換える点だったかもしれない。 例えば次のように書いておけば
(setq custom-file "~/.emacs-custom")
(load-file custom-file)
customizeで変更した内容は 別ファイルに保存できるので精神衛生上良い。

簡易マニュアル代わり

customizeを使って設定を変更する場合、customizeバッファ上にその設定に関する説明が表示されていることが普通である。さらに設定値の候補までリストアップされるため、パッケージで何ができるか作者が何を意図しているかを把握しやすい。 org-modeを使い始めた時、これを実感した。 org-modeの場合、M-x org-customizeが 用意されているぐらいであり、customizeを使えというメッセージが 作者から伝わってくる。 

faceの変更

Emacsのテキストカラーを変更することがぐっと楽になる。変更したい文字上にカーソルをおいて M-x customize-face するとそこで使われているfaceのcustomize画面へ移動できる。 

反映が簡単

customizeを使わないでEmacsの設定を変更する場合によくあるパターンは、まずは scratchバッファや.emacsファイルにlispを書いてevalしたりeval-expressionして設定の変更をしてみる。その結果が望み通りになれば、正式に.emacsへ記載するという流れだろう。

しかしcustomizeを使う場合、 M-x customize を実行して好きな設定に書き換えて C-x C-sすれば 即座に反映されて設定ファイルに保存される。 Save for futue sessionsというボタンを押下しても いいが、通常のファイル保存のショートカットだけでできる点はとてもEmacs的な美しさであり、激しく便利である。

もちろんcustomizeに対応していないlispパッケージの場合、やはり.emacsを編集するしかないけれど、今時のものであれば、たいてい使えるような気がする。

という感じでまた何か思い出したら書きます。


2013年1月24日木曜日

CVSで管理されているファイルを削除する

PCL-CVSを起動する。
M-x cvs-examine
sキーを押すと管理されているファイルの一覧が表示される その中から削除したファイルへカーソルを移動するか、 マーキングをしてrキー(Remove)を押するとRemovedにステータスが変わる。 RemoveされるのでCommitを実行すれば完了。 Commit前であればaキー(Add)を押せばキャンセルできる。

2013年1月21日月曜日

VCモードのショートカット

VCモードでのショートカット
機能ショートカット
コミットC-x v v
アップデートC-x v +

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タグの中身だけをコピーしたほうがいいだろう。