« logrotate で日付つきファイル名でローテートする | メイン | Google Desktop で Becky のメールを »

2007年04月02日

emacs の初期化ファイル内でy/n形式で処理選択する [ カテゴリ : memo - CUI環境 ]

(require 'un-define)
(require 'jisx0213)
てのを emacs の初期化ファイルに入れてある。
これを入れないと UTF8 やら jisx0213 やらで具合悪いのである。
しかし、常時入れておくと起動が遅くてしょうがない。

必要なときだけこれを実行するような elisp が書けるだろうと調べてみた。


参考サイト:http://www.fan.gr.jp/~ring/doc/elisp_20/elisp_20.html#SEC276


(y-or-n-p "Enable MuleUCS?")

ってのを走らせるとミニバッファで質問されて y なら t, n なら nil が帰る。


では、t のときに~を実行したい、なんてときはどうするか。
俺がやりたいのは、上記で t のとき
(require 'un-define)
(require 'jisx0213)
したいわけだ。

で、perl でいう open(FD,$filename) or die; みたいなのを思い出しながら、and/or を使うといいみたい。


and の評価は全て真なら真だが、途中で偽が出たらその先は見なくて良い。
つまり、真であるうちは次次と評価していく。
y と答えたら次の項に行き、n と答えたら(全体で nil であることが確定するので)その先は評価されないって寸法だ。

(and (y-or-n-p "Enable MuleUCS?") (require 'un-define) (require 'jisx0213) (message "OK"))

で、どうよ?
途中の require がコケたらどうなるかわからんが(追記1参照)、n を選択したらすぐ nil が帰るし、
y を選択したら時間がかかる初期化ののち、バッファに OK と出た。
大丈夫だべ。

以上。

追記1:
(require 'un-define) を実行して成功すると un-define が評価値として帰る。
(require 'un-definehogex) のようなことをするとエラーで止まって backtrace がでた。
ま、大丈夫でしょ。


追記2:
以下はあまり使えない情報だが上記を調べる前に調べたことのメモ

http://www.bookshelf.jp/texi/elisp-manual-20-2.5-jp/elisp_21.html#SEC284
あたりから interactive に関する情報を仕入れつつ・・・入力を受け容れる elisp の例

(interactive "bPlease select a buffer: ")

入力(TAB補完可能)で選択したバッファ名が帰る。
文字列の1文字目はコード文字という。
コード文字 b は「既存バッファ選択」を意味する。
コード文字に続く HOGEHOGE buffer: プロンプト文字列。

ちなみに*scratch*でこういうの書いて閉じ括弧の後ろで M-x E してやれば
実際に質問されて、入力したあと選択結果が表示される。

(interactive "DSome directory name, please: ")
(interactive "fSome existing file name, please: ")
(interactive "FSome file name, please: ")

なんてのも、できる。それぞれディレクトリ選択、既存ファイル選択、ファイル名入力だ。

きっと、Yes/No を質問するコード文字ってのがあるのだろう。。。。ないの?w
(この後、冒頭の URL の先で答え発見)

投稿者 JK : 2007年04月02日 11:58

トラックバック

このエントリーのトラックバックURL:
http://om.pizzica.to/mt-tb.cgi/78