|
|
手元にある(嘗て使った事のある) Emacsen です。 (手元にあると言っても今じゃぁすぐには動かす事のできないものもありますが。)
pretest 中。2001/9/16 現在のバージョンは Emacs-21.0.105 で、 これは Emacs21.1 の pretest です。
もし Emacs21 を使ってみたいという方は pretest に参加しましょう。 そのためにはまず、 mule メーリングリスト に参加しましょう。
Emacs21 の売りは「様々なサイズのフォントの混在表示」と「画像の表示」 のできる new display engineでしょう。Emacs-21.0.90 の起動画面は こんな感じでした。
一方、Windows 関連として、このバージョンから Mingw がサポートされました。 NTEmacsのMingwでコンパイルと 同様にコンパイルすることができます。 なお、残念なことに Emacs21 の売りである new display engine 未サポートです。(早くサポートされないかなぁ。)
Windows 版 Emacs21 は NTEmacs の延長上にあります。フォントの設定等は NTEmacs と同じです。 また、emacs21-users-ja メーリングリスト も開設しましたので質問はそちらへどうぞ。
新しいヴァージョンの Emacs の新機能を知るには、付属文書の Antinews (逆ニュ ース) を読むのが1番手っ取り早いと思います。通常の新機能紹介は、前ヴァージ ョンと比較して新ヴァージョンがいかに凄くなったかを説明するものですが、 Antinews は時間の流れを逆に取って、Emacs21 から Emacs20 への "進化" を説明 するものです。いかにも GNU っぽいジョークです。もちろんこれを読むと、 Emacs21 の新機能が分かるようになっています
Meadow-1.15 (SHOUBU:63) を2002年10月5日にリリースしました。
Meadow 関連情報は http://www.NetLaputa.ne.jp/~kose/Emacs/Meadow/ に移動しました。
Windows で動く Emacs を NTEmacs と呼んでいるようです。
詳しくは 『GNU Emacs on Windows NT and Windows 95/98』 を参照してください。
NTEmacs は Emacs のソースそのものをコンパイルしたもので、 別途 NTEmacs のソースがあるわけではありません。
MicroSoft VC++ でコンパイルできます。
コンパイルしたバイナリは ftp://ftp.gnu.org/gnu/windows/emacs/latest/ から入手可能ですが、 file-writable-p パッチ( [MD:1762] )があたっていないため、それが問題になる可能性があります。 特に Mew ユーザは使わない方が良いです。( [Mew-Win32 02796] 参照)
つまりは、お薦めは自分でコンパイルすることなのでしょう。
私は、自分で コンパイルしましたし、もちろん mule-ucs に含まれる emacs-20.7-mule-4.1.patch.txt パッチをあてて、 Mule/4.1(葵) にしてコンパイルしました。 ([meadow-user-jp/2499]を参照のこと。)
ntemacs-users メーリングリストで知ったのですが、Andrew Innes さんが Emacs20.7 を Mingw でコンパイルできるようにしたようで す。
先程「Emacs のソースそのものだ」と書きましたが、 この Mingw 版はまだ Emacs 本体にマージされてはいないということのようです。
(注) Mingw は Cygwin にマージされています。 Cygwin latest を、つまり setup.exe でインストールすれば自動的に Mingw も 使用可能となります。
では、コンパイルしましょう。
これで、「mkdre emacs/site-lisp」 すれば、 Meadow のようなディレクトリ構成でインストールされます。
c:/emacs/
+ 20.7
| + bin
| + data
| + etc
| + info
| + lisp
| + lock
| + site-lisp
+ site-lisp
できあがったら、起動してみましょう。*scratch* で以下のように 変数の末尾で C-j を押して eval して各値を見てみましょう。そして 「うん、できてるできてる」と悦に入りましょう。^^)v
emacs-version ← C-j を押す。 "20.7.1" mule-version ← C-j を押す。 "4.1 (葵)" system-configuration ← C-j を押す。 "i386-mingw-windows98.1998"
最後に以下の内容の site-lisp/subdirs.el を準備すればそれで終りです。 (再起動します。)
;; In load-path, after this directory should come ;; certain of its subdirectories. Here we specify them. (if (fboundp 'normal-top-level-add-subdirs-to-load-path) (normal-top-level-add-subdirs-to-load-path))
ただし、NTEmacs の normal-top-level-add-subdirs-to-load-path にはバグが あって(Meadowでは修正されています。)、 subdirectories を正しく追加してくれない場合(環境)があるようです。 もし load-path に設定されるパスに抜けがある場合には以下のように、 site-lisp/subdirs.el に追加して補いましょう。
(normal-top-level-add-to-load-path '("apel" "bbdb" "bitmap" "elib" "flim" "pgnus" ...))
このバグの詳細は [meadow-develop:1181]の thread を見てください。
なお、Emacs20.3 の startup.el で定義されている normal-top-level-add-subdirs-to-load-path は inode を見ていないので こちらを使えばサブディレクトリもきちんと登録できます。 以下が Emacs20.3 の startup.el で定義されているものです。 (2001/3/6)
(defun normal-top-level-add-subdirs-to-load-path () "Add all subdirectories of current directory to `load-path'. More precisely, this uses only the subdirectories whose names start with letters or digits; it excludes any subdirectory named `RCS' or `CVS', and any subdirectory that contains a file named `.nosearch'." (let (dirs (pending (list default-directory))) ;; This loop does a breadth-first tree walk on DIR's subtree, ;; putting each subdir into DIRS as its contents are examined. (while pending (setq dirs (cons (car pending) dirs)) (setq pending (cdr pending)) (let ((contents (directory-files (car dirs))) (default-directory (car dirs))) (while contents (unless (member (car contents) '("." ".." "RCS" "CVS")) (when (and (string-match "\\`[a-zA-Z0-9]" (car contents)) (file-directory-p (car contents))) (let ((expanded (expand-file-name (car contents)))) (unless (file-exists-p (expand-file-name ".nosearch" expanded)) (setq pending (nconc pending (list expanded))))))) (setq contents (cdr contents))))) (normal-top-level-add-to-load-path (cdr (nreverse dirs)))))
使ってみた感想は、 こんな感じ
SKK で日本語入力ができるし(Windows IME でも一応入力できる)、 Gnus 5.8 ももちろん動いていて、 gnus-agent を使った offline 環境で mail, News の送受信ができています。
NTEmacs で Gnus 5.8 を使うとメールには以下のような User-Agent が付きます。 これから時々見かけるようになるでしょうね。:-)
User-Agent: Gnus/5.8.4 NTEmacs/20.6 (i386-*-windows98.1998) Mule/4.0 (花宴)
(というのは嘘で、Gnus5.8.x のままでは User-Agent にプラットホーム情報は付加されません。 ここ見てね。)
ではインストールしましょう。
bin\addpm.exe c:\usr\local\share\emacs\20.6などという所へインストールしちゃいました。
[HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs] を編集し、 %emacs_dir%/../site-lisp;%emacs_dir%/site-lisp;%emacs_dir%/lispのように site-lisp を load-path の先頭に追加します。 なお、私の場合は以下のように Meadow/site-lisp を追加しました。 NTEmacs20.6 と Meadow1.101 のベースとなる Emacs が同じなので問題なく 共用できるようです。 (厳密には同じではありませんね。 でも Emacs20.6, 20.5 は Emacs20.4 のバグフィックス版なので新機能の追加はありま せん。ほとんど同じです。)
c:/Meadow/site-lisp;%emacs_dir%/site-lisp;%emacs_dir%/lisp
;; 日本語環境 (set-language-environment "Japanese") (set-terminal-coding-system 'sjis) (set-clipboard-coding-system 'sjis-dos) ;; shellの決定 (setq explicit-shell-file-name "bash.exe") (setq shell-file-name "sh.exe") (setq shell-command-option "-c") ;; (add-hook 'shell-mode-hook (lambda () (set-buffer-process-coding-system 'undecided-dos 'sjis-unix))) ;; ファイル名等の case を... (setq completion-ignore-case nil)
(if (fboundp 'normal-top-level-add-subdirs-to-load-path)
(normal-top-level-add-subdirs-to-load-path))
を使いましょう。これで site-lisp 以下のサブディレクトリは自動で load-path
に追加することができます。
以下、使った感想。
(set-keyboard-coding-system 'sjis)
というわけで Meadow も NTEmacs もほとんど同じように使えます。 SKK ユーザにはどちらも変らないかもね。 Meadow-1.12 Beta1/Emacs20.5/Mule4.1(葵) とどっちがいいかは、好みでしょうね。
NTEmacs20.3.3.1からは複数のフォントを使う事ができるようになりま した。NTEmacs20.3.5.1からはBDF fontを使う事ができるよう になりました。
font名の指定方法がNTEmacs20.3.5.1からは微妙に変っているので見直 してください。
http://www.gnu.org/software/emacs/windows/ntemacs.html#multibyte に書かれている手順に従います。
フォント名の取得方法は、
(insert (prin1-to-string (w32-select-font)))
を eval します。 すると、
"-*-\202l\202r \226\276\222\251-normal-r-*-*-16-120-*-*-c-*-jisx0208-sjis"
のようなフォント名を取得できますので、それを設定します。
私の設定は以下で、 ascii には“Courier New”の 10pt font を、 JIS-X208, X201, X212 には“MS 明朝”の 12pt をセットしています。
;; (日本語を大きくして釣合いを取ってます。) (create-fontset-from-fontset-spec "-*-Courier New-normal-r-*-*-13-*-*-*-c-*-fontset-null, japanese-jisx0208:-*-\202l\202r \226\276\222\251-normal-r-*-*-16-120-*-*-c-*-jisx0208-sjis, japanese-jisx0212:-*-\202l\202r \226\276\222\251-normal-r-*-*-16-120-*-*-c-*-jisx0208-sjis, katakana-jisx0201:-*-\202l\202r \226\276\222\251-normal-r-*-*-16-120-*-*-c-*-jisx0208-sjis, latin-jisx0201:-*-Courier New-normal-r-*-*-13-*-*-*-c-*-iso8859-1, japanese-jisx0208-1978:-*-\202l\202r \226\276\222\251-normal-r-*-*-16-120-*-*-c-*-jisx0208-sjis") ;; (setq initial-frame-alist '((foreground-color . "black") (background-color . "snow") (width . 80) (height . 37) (top . 0) (left . 100) ;;(menu-bar-lines . 1) (vertical-scroll-bars . nil) (font . "fontset-null") ))
(insert (prin1-to-string (w32-select-font))) を eval して
"-*-\202l\202r \226\276\222\251-normal-r-*-*-16-120-*-*-c-*-jisx0208-sjis"
のような謎のフォント名を取得するのは MSC でコンパイルした Emacs で、 Mngw でコンパイルした Emacs では、
"-*-@MS ゴシック-normal-r-*-*-16-120-96-96-c-*-jisx0208-sjis"
というフォント名を取得できるようです。それぞれの Emacs で得られたフォント 名を使わないとセットできないようです。(2001/3/6)
http://www.gnu.org/software/emacs/windows/ntemacs.html#bdf-fonts に書かれている手順に従います。
BDFフォントは ftp://m17n.org/pub/mule/intlfonts-1.2.tar.gz から入手します。これには様々なサイズのフォントが含まれてい るため20Mバイトもの大きさになっていて、その中の16dotサイズの フォントのみを収録した ftp://m17n.org/pub/mule/intlfonts-1.2-split/16dots.tar.gz を使います。
(もちろん他のサイズでも良い)
;; BDF font directoryからBDF fontlistを作成 (setq w32-bdf-filename-alist (w32-find-bdf-fonts '("c:/usr/local/share/emacs/fonts/bdf"))) (create-fontset-from-fontset-spec "-*-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-bdf, latin-jisx0201:-sony-fixed-medium-r-normal--16-*-*-*-*-*-jisx0201.1976-0, katakana-jisx0201:-sony-fixed-medium-r-normal--16-*-*-*-*-*-jisx0201.1976-0, japanese-jisx0208-1978:-misc-fixed-medium-r-normal--16-*-*-*-*-*-jisc6226.1978-0, japanese-jisx0208:-misc-fixed-medium-r-normal--16-*-*-*-*-*-jisx0208.1990-0" t t) (setq font-encoding-alist (append '(("jisx0201" (latin-jisx0201 . 0)) ("jisx0201" (katakana-jisx0201 . 1)) ("JISX0208" (japanese-jisx0208 . 0)) ("JISC6226.1978" (japanese-jisx0208-1978 . 0)) ("JISX0213.2000-1" (japanese-jisx0213-1 . 0)) ("JISX0213.2000-2" (japanese-jisx0213-2 . 0)) ("BITMAP" (bitmap . 0)) ) font-encoding-alist)) (setq initial-frame-alist '((font . "fontset-bdf") ... ))
この設定で私のMeadowや X Window Systemで使っているEmacsと全く一緒の表示になります。 (ascii用の font は intlfonts ではなく X Window System 附属の 8x16.bdf を使っ ています。)
fontsetの切替えは.emacsに
;; font-select menu SHFT-mouse1
(setq w32-use-w32-font-dialog nil)
を加えて SHIFTキーを押しながらマウス左クリックします。
M-x list-faces-display してみましょう。 きちんと bold や italic が表示できていますか?
表示できていない場合は、 http://www.gnu.org/software/emacs/windows/ntemacs.html#windows-italics に書かれているように設定しましょう。
私は以下のように設定しています。
(setq w32-enable-italics t) (set-face-font 'bold "-ETL-fixed-bold-r-normal--16-160-72-72-C-80-ISO8859-1") (set-face-font 'italic "-ETL-fixed-bold-i-normal--16-160-72-72-C-80-ISO8859-1") (set-face-font 'bold-italic "-ETL-fixed-bold-i-normal--16-160-72-72-C-80-ISO8859-1")
TrueType font ならこうかな。
(setq w32-enable-italics t) (set-face-font 'bold "-*-courier new-bold-r-*-*-13-*-*-*-c-*-*-") (set-face-font 'italic "-*-courier new-normal-i-*-*-13-*-*-*-c-*-*-") (set-face-font 'bold-italic "-*-courier new-bold-i-*-*-13-*-*-*-c-*-*-")
Gnus5.8(Pterodactyl Gnus) の SCORE 機能、 つまり『自分の記事のfolowup記事』や『特定の人の記事』の SCORE を上げて、 summary buffer で その記事名を目立たせている方は、この bold 表示は必須ですよね。
私は以下のように設定しています。
(defun kose-gnus-set-face-font () (let ((faces '(gnus-emphasis-bold gnus-group-mail-1-face gnus-group-mail-2-face gnus-group-mail-3-face gnus-group-mail-low-face gnus-group-news-1-face gnus-group-news-2-face gnus-group-news-3-face gnus-group-news-low-face gnus-summary-high-ancient-face gnus-summary-high-read-face gnus-summary-high-ticked-face gnus-summary-high-unread-face message-header-subject-face message-header-to-face gnus-emphasis-italic gnus-emphasis-bold-italic))) (while faces (set-face-font (car faces) "-ETL-fixed-bold-r-normal--16-160-72-72-C-80-ISO8859-1") (setq faces (cdr faces)))) (let ((faces '(;;gnus-cite-attribution-face gnus-emphasis-italic gnus-emphasis-underline-italic gnus-header-newsgroups-face gnus-summary-low-ancient-face gnus-summary-low-read-face gnus-summary-low-ticked-face xs gnus-summary-low-unread-face))) (while faces (set-face-font (car faces) "-ETL-fixed-bold-i-normal--16-160-72-72-C-80-ISO8859-1") (setq faces (cdr faces)))) (let ((faces '(gnus-emphasis-bold-italic gnus-emphasis-underline-bold-italic gnus-header-content-face gnus-signature-face message-header-newsgroups-face))) (while faces (set-face-font (car faces) "-ETL-fixed-bold-i-normal--16-160-72-72-C-80-ISO8859-1") (setq faces (cdr faces))))) (add-hook 'gnus-started-hook 'kose-gnus-set-face-font)
ただしこの方法は face に対して font を設定しているのでなんか違うような気が するんだけど...
正しいやり方がわかる方は メールくださいね。
興味があるのなら今すぐに compile しましょう。(^_^)
http://www.NetLaputa.ne.jp/~kose/Software/compile/#XEmacs というのも用意しております。
でも常用するのなら Windoze ではなく PC-UNIX がお薦めだけどね。:-)
まだできてない。誰か手伝ってえ。
http://www.NetLaputa.ne.jp/~kose/Software/compile/#Emacs
最近 Solaris2.6 でコンパイルできるパッチ (ftp://ftp.ryukoku.ac.jp/Ryukoku/software/svr4-port/nemacs-3.3.2-sol2/) の存在を教えていただきました。
Gnus のメールフォルダを GNUS4.1 の nnspool を使って読んでメールを出したりしています。
User-Agent: GNUS/4.1 tm/8.8 (Time Passed Me By) CLIME/1.13.6 (中ノ庄) Emacs/18.59 Nemacs/3.3.2 (FUJIMUSUME)
起動する時は
nemacs -fn 7x14 -fk k14
でフォントを指定するとカーソル位置とフォント位置がずれないというのも 教えていだだきました。
もう、こういった Nemacs の話(昔話??)は elips メーリングリスト あたりでしかやっていないのかも。
手元には Nemacs3.3.2/Emacs18.55 (X68k版)もあります。 あるだけだけど。(^_^;;;)
Emacs20.7 が6月13日にリリースされました。
普段(仕事で)使っているのは Emacs20.7/Mule4.1 (Solaris2.6)だったりします。 以下のパッチをあてていて、Canna, Wnn は組み込んでいません。 SKK ユーザです。 (このへんの話は、 [2000/6/15]あたりからたどってくださいな)
なお、Mule4.1(葵) は Meadow のみのリリースで、Emacs21 では Mule5.0(賢木) になるそうです。(詳しくは meadow-develop メーリングリストの [MD:1652] から始まる thread を参照のこと)
最近使っていませんし、以下の Mule for Win32 のページは もう2年以上も更新していません。 でも今でも書いてある事は有効ですので参考にしてください。
ここでは X Window System の font 設定と Meadow の BDF font 設定を 示します。
font は ftp://m17n.org/pub/mule/intlfonts-1.2.tar.gz をインストールしましょう。もし16dot font しかいらないのであれば ftp://m17n.org/pub/mule/intlfonts-1.2-split/16dots.tar.gz だけで十分でしょう。
`.Xdefaults'
Emacs.Fontset-0: -*-fixed-medium-r-normal--16-*-*-*-*-*-fontset-normal Emacs.Fontset-1: -*-fixed-bold-r-normal--16-*-*-*-*-*-fontset-normal Emacs.Fontset-2: -*-fixed-medium-i-normal--16-*-*-*-*-*-fontset-normal Emacs.Fontset-3: -*-fixed-bold-i-normal--16-*-*-*-*-*-fontset-normal Emacs.Font: fontset-normal
ついでに以下の設定もしてる。
Emacs*menubar*Foreground: Gray30 Emacs*menubar*Background: Gray75 Emacs*Background: snow Emacs*Foreground: black Emacs.modeline*attributeForeground: white Emacs.modeline*attributeBackground: black
(のちほどちゃんと書き直しします。-- 2000/5/2)
ここでは趣味に走った設定を。
などとしています。
なお、ここで使っている 8x18.bdf(fake) です。
--- 8x16.bdf Thu Nov 30 07:30:16 1989 +++ 8x18.bdf Wed Apr 12 21:32:34 2000 @ -41,8 +41,8 @ CHARSET_REGISTRY "ISO8859" CHARSET_ENCODING "1" DEFAULT_CHAR 32 -FONT_DESCENT 2 -FONT_ASCENT 14 +FONT_DESCENT 3 +FONT_ASCENT 15 COPYRIGHT "Copyright (c) 1987, 1988 Sony Corp." ENDPROPERTIES CHARS 221
Meadow の BDF-font display engine を騙す (Pseudo font ではなく) fake font ね。^^;;)
このページの最上行の 「Profile」、「Emacs」、「Software」、「Webware」、 「Home」は Kashmir という TrueType font を Photoshop で加工 したものなのですが、こういう楽しいフォントで遊ぶには TrueType font の方が 良いのかもね。
粋な設定ができたら教えくださいな。
X-Face の表示や、Smiley 表示をするためには bitmap-mule が必要です。 是非入れましょう。
ftp://ftp.jpl.org/pub/elisp/bitmap/bitmap-mule-8.3.tar.gz
bitmap font は、この bitmap-mule-8.3.tar.gz にも `etl8x16-bitmap.bdf' というファイル名で収録されていますが、 intlfonts-1.2.tar.gz にも `bmp16-etl.bdf' というファイル名で収録されています。 Copyright 表記が少し違うだけでどちらでも同じ font です。
設定は以下のようにします。
(require 'bitmap) ;; font: Bitmap-16 の登録 (w32-auto-regist-bdf-font "Bitmap-16" "c:/usr/local/share/emacs/fonts/bdf/bmp16-etl.bdf" 0) ;; font: Bitmap-16 を fontset: intlfonts に登録 (set-fontset-font "intlfonts" 'bitmap "Bitmap-16")
うまく設定できたかどうかは、 M-x bitmap-insert-xbm-file RET XBM-file RET で、XBM file が表示できるかどうか確認します。
スピード狂でなくとも誰でも動作速度は速い方がいいと思っているよね。:-)
Lars Magne Ingebrigtsen さん作の Gnus の速度向上のための最適化は目をみはるものがります。 Gnus はどんどん機能が追加しているにもかかわらず、 その実行速度は体感でわかるほど向上しています。
T-Gnus 6.14 (Gnus5.8) の Info より
(Info-goto-node "(gnus-ja)Compilation")
コンパイル
あの行書法仕様指定変数を覚えていますか? `gnus-summary-line-format'、 `gnus-group-line-format' などなどです。さて、gnus はもちろんこれらの変数 がどのようなものでも注意しますが、不運な事に、それらを変更すると、大変重 大な速度低下を引き起こす事になります。 (これらの変数の初期値はそれらに関 連付けられたバイトコンパイルされた関数を持っていますが、利用者作成のもの はもちろんそうではありません。)
これを改善するために、変数を弄りまわして、(なんとなく) 満足したと感じた 後で、`M-x gnus-compile' を実行する事ができます。これは新しい指定がバイ トコンパイルされ、もう一度最高速度に復帰できるという事です。Gnus はこれ らのコンパイルされた指定をファイル `.newsrc.eld' に保存します。(利用者定 義の関数は、この関数ではコンパイルされませんが--それらをコンパイルするた めには、それらをファイル `.gnus.el' に突っ込んで、そのファイルをバイトコ ンパイルするべきです。)
つまりカスタマイズするということは実行速度を犠牲にしているのです。 それは `.gnus.el' をバイトコンパイルすることで解消されます。
(M-x gnus-compile の部分は実際にどうすべきか良くわかりません。 単に `.gnus.el' をバイトコンパイルするのがいいみたいです。)
C-h n で NEWS を読みましょう。その中に
* Emacs 20.4 の変更
** 初期化ファイルとして .emacs.el が呼ばれるかもしれません。
今では Emacs の初期化ファイルとして `.emacs.el' を使用できます。以前は `.emacs' という名前しか許されませんでした。`.emacs.el' というファイル を使うなら、通常の方法でバイトコンパイルできます。
もし `.emacs' と `.emacs.el' の両方が存在するなら、 `.emacs.el' が使わ れます。
という記述があります。そう、Emacs20.4 からは `.emacs' をバイトコンパイルして使えるようになりました。
なお、この NEWS の和訳は http://amanatto.hoops.ne.jp/emacs/news/ から入手可能です。
M-x byte-compile-file RET ~/.emacs RET
で `.emacs' をバイトコンパイルしましょう。すると Emacs は起動時に `.emacs' ではなく `.emacs.elc' を読み込みます。
この方法の速度向上度は、`.gnus.el' ほどではないかもしれませんが (`.emacs' の内容によるが)、私の場合は `.emacs' が巨大だったためか、 けっこう有効でした。
以下のものを `.emacs', `.gnus.el' のファイル末尾に仕込んでおいて おいて、セーブするごとにバイトコンパイルをしちゃうか、
;;; Local Variables:
;;; after-save-hook: (lambda () (byte-compile-file (buffer-file-name)))
;;; End:
以下のように Emacs 終了時に更新されていたらバイトコンパイルします。
(defun byte-compile-dotfiles () "byte-compile dotfiles." (interactive) (if (file-newer-than-file-p "~/.emacs" "~/.emacs.elc") (byte-compile-file "~/.emacs")) (if (file-newer-than-file-p "~/.gnus" "~/.gnus.elc") (byte-compile-file "~/.gnus"))) (add-hook 'kill-emacs-hook 'byte-compile-dotfiles)
Emacs20.5 では gc-cons-threshold の値は 400000 がセットされています。この値を増してあげると garbage collections の頻度が下がり、結果的に動作速度が向上します。 特に、Gnus の速度向上度は目覚しいものがあります。是非お試しあれ!!!!
`~/.emacs' で設定します。とりあえず以下の値に増して使っています。
(setq gc-cons-threshold 1000000)
この他にも方法があれば教えてくださいな。
『文書作成支援』などと大層な見出しを付けちゃったけれどそれしか 思い付かなかったというだけ。(そのうち替るかも)
SDIC は、Emacs 上で英和/和英辞書を閲覧するための簡潔( simple )で、小さく ( small )て、軽く( speedy )て、小粋( smart )なプログラムです。
土屋さんのページ 『sdic : English Japanese Dictionary for mule/emacs』 から入手します。使える辞書もここからリンクをたどってください。 (フリーの辞書もあります。)
インストール方法や使い方は丁寧に書かれた Info が附属するので、 私がここで説明するまでもないですね。
私が現在使っている英和辞書は以下のものです。
和英辞書は以下のものです。
Jargon は、あれっ、どうしたっけ?
...なにか質問はありますか? あればそれをここに反映させます。:-)
http://openlab.ring.gr.jp/lookup/
私が使っている辞書は以下のものです。
この中のいくつかは http://openlab.ring.gr.jp/lookup/dicts/ から入手可能です。
設定 TIPS ...
(setq lookup-search-agents
'((ndeb "c:/KOJIEN/")
(ndeb "c:/DAIJIRIN/")))
(autoload 'lookup "lookup" nil t) (autoload 'lookup-region "lookup" nil t) (autoload 'lookup-pattern "lookup" nil t) (define-key global-map "\C-ce" 'lookup-pattern)
...なにか質問はありますか? あればそれをここに反映させます。 :-)
International ispell を Cygwin でコンパイルすれば使えています。 設定など必要ないですし、flyspell-modeも動いているようですよ。
...なにか質問はありますか? あればそれをここに反映させます。 :-) (何を書くべきかの項目が未整理なので、市場調査して書こうかと最近思うわけです。)
印刷ってほとんどしないんだけど。
Windows には lpr なんてもんはないので notepad.exe で印刷 しちゃいます。
いったん TMP に sjis-dos でファイルを作って notepad.exe で 印刷します。非同期に実行する start-process を使っているのでその ファイルを消すタイミングがありません。後から手動で消してください。
気が向いたら set-process-sentinel に直そっかな。(2000/5/11)
M-x print-buffer またはメニューから Tools → Print → Print Buffer でカレントバッファを デフォルトプリンタへ印刷出力します。
;; (define-process-argument-editing "/notepad\\.exe$" (lambda (x) (general-process-argument-editing-function x nil t))) ;; (setq print-region-function (lambda (start end &rest dummyargs) (let ((tmpfile (unix-to-dos-filename (concat (or (getenv "TMP") (getenv "TEMP")) "/" "_" (substring name 0 -13) "_")))) (mapcar (lambda (x) (let ((case-fold-search nil)) (while (string-match (nth 0 x) tmpfile) (setq tmpfile (replace-match (nth 1 x) nil t tmpfile))))) '(("*" "$")("?" "$")(" " "_")("<" "_")(">" "_"))) (if (file-exists-p tmpfile) (delete-file tmpfile)) ;; danger! (let ((coding-system-for-write 'sjis-dos)) (write-region start end tmpfile)) (setq kose-deb tmpfile) (start-process "printout" " *printout*" "notepad.exe" "/p" tmpfile) ;;(delete-file tmpfile) )))
ps-print で多言語印刷できるよ、JIS X 0213 だって。という話を書く予定。
Meadow でも以下を .emacs に追加すると Emacs-w3.png のようにちゃんと色が付きます。 (画面は 土屋 さんのページを表示しています。)
(if (featurep 'meadow) (defun w32-define-rgb-color (a b c d) t))
Emacs/W3 のインストール方法
> WIDGETDIR=c:/usr/local/share/emacs/20.4/lisp > export WIDGETDIR > cp w3-cfg.nt w3-cfg.el > c:/usr/local/share/emacs/20.4/bin/emacs -batch -q -l ./docomp.el -f emacs-batch-build-autoloads . auto-autoloads.el > c:/usr/local/share/emacs/20.4/bin/emacs -batch -q -l ./docomp.el -f compile-it > mv *.elc c:/usr/local/share/emacs/site-lisp/w3 > cp * c:/usr/local/share/emacs/site-lisp/w3 > cp ../etc/default.css c:/usr/local/share/emacs/site-lisp/w3
;; (require 'w3-auto "w3-auto") (setenv "MAILCAPS" "~/.mailcap") (setq w3-default-homepage "http://foo.bar.org/") (setq url-personal-mail-address "none@@foo.bar.org") ;; cache (setq url-automatic-caching t) (setq url-standalone-mode t) ;; (setq url-be-asynchronous t)
(setq browse-url-browser-function
'(("^mailto:" . browse-url-mail)
("." . browse-url-w3)))
dired mode で "W" でブラウザを起動します。
(add-hook 'dired-mode-hook
(lambda ()
(local-set-key "W" 'browse-url-of-dired-file)))
この時、browse-url は Windows のことなど考えていないから、以下の設定をしな
いといけません。
(if (eq system-type 'windows-nt) (eval-after-load "browse-url" '(setq browse-url-filename-alist (append '(("^\\([a-zA-Z]\\):" . "file:///\\1:")) browse-url-filename-alist))))
Gnus について書きたくなったので、 重い腰を上げました。少しづつ書いていきましょう。
私が書くと Meadow に固有の設定だと思われがちのようですが、 普段使っているのは Emacs20.6/Mule4.1(Solaris) だったりするので、ここでは特に断りがない場合は UNIX/Windows Platform に全て共通です。
とりあえず、今書きたくなっているのは、 Gnus-tree.png と X-Face-BBDB.png かな。
以下のものは Group Parameter を使って Group 毎に個別設定しています。 Group Parameter と、*Group* buffer から *Summary* buffer に入る時に設定されるパラメータで、効力の範囲はそこだけ。
この Group Parameter という考え方は Gnus に特徴的なもので、 他の MUA でやる場合には hook の中で場合分けするしかないでしょうが、 Gnus では Group 毎に細かな設定ができてとっても便利なものです。
使い方はいたって簡単で、*Group* buffer で G p でパラメータ編集画面になり、設定後、C-cC-c で終了です。
例えば、あるグループの Group Parameter は以下のようになっています。
((bbdb-auto-create-p . t) (x-face . "jpj.xbm") (posting-style (from "KOSEKI Yoshinori <kose@wizard.tamra.co.jp>")) (visible . t) (gcc-self . t) (expiry-wait . 100) (total-expire . t) (extra-aliases "shirai@foo.bar.co.jp" "miyoshi@foo.bar.org"))
では設定を順番に書いていきましょう。
BBDB ではアドレスの収集ができます。 (BBDBに関しては後ほど説明を書きます。) このアドレスを収集するかどうかは bbdb/news-auto-create-p を t にすることです。 (global に t にしちゃうとすごいことになります。 アドレス帳が1万人などすぐに越えちゃって収集がつかなくなります。)
そのため 『Meadow メーリングリストでは収集したい』が、 『IMAP4 メーリングリストでは収集したくない』、 のような設定がやりたくなるものです。 そのような設定は、Info によると 『gnus-select-group-hook に設定しろ』 となっています。これを素直に実行すると以下のようになるでしょう。
;; (add-hook 'gnus-select-group-hook 'make-bbdb/news-auto-create-p) ;; (defun make-bbdb/news-auto-create-p () "make bbdb/news-auto-create-p." (let ((list '("fj.editor" "nnml:friends" "nnvirtual:" "nnml:\\(apel\\|emacs\\|elips\\|gnus\\|meadow\\|mew\\|mule\\|ddskk\\|pgp\\)"))) (setq bbdb/news-auto-create-p nil) (while list (if (string-match (car list) gnus-newsgroup-name) (setq bbdb/news-auto-create-p t)) (setq list (cdr list)))))
でもこれはスマートではありません。 (たぶん他の MUA でやる場合にはこのように hook 内で場合分けするしかないと思う)
これを Gnus の流儀に沿って Group Parameter を使って設定しましょう。
*Group* buffer でアドレスを収集したい Group 上にカーソルを置き、 G p でパラメータ編集画面 (*Gnus edit form* buffer) になるので、
(bbdb-auto-create-p . t)
と入力して C-cC-c で終了です。
この Group Parameter 設定を有効にするためには .gnus.el で 以下のように hook 設定します。
;; Group Palameterで指定する。 (bbdb-auto-create-p . t) (add-hook 'gnus-select-group-hook (lambda () (setq bbdb/news-auto-create-p (gnus-group-find-parameter gnus-newsgroup-name 'bbdb-auto-create-p))))
どうです、あればあるだけの Group 名を hook に列挙するのに比べて スマートでしょ。
x-face は是非付けましょう!!!
私などは多量のメールを読むので、 メール差出人の同一性を識別するのが困難になってきており、 時々間違えてしまいます。でも x-face が付いてると認識率は高いようです。 BBDB でアドレス帳を表示した画面はこんな感じ( X-Face-BBDB.png) になるので、これなら間違えようはないですね。
だから是非に...
ところで、X-face を付ける時に、数ある X-Face の中から選択するユーティリティ として select-xface というものがあります。2000/3/20 現在 v0.14 が最新です。 (http://www.jpl.org/ から入手可能)
これを使えば、x-face 画像を見ながら選択することができて便利なのですが、 自動的に Group ごとに defualt-x-face が決まっているのはもっと嬉しいものです。
これも Group Parameter で設定します。 *Summary* に入る時にセットして、抜ける時に dafault 値に戻しています。 本当は local 変数にできれば良いのでしょうけど。 もう少し改良の余地はあるかもしれない。
(setq x-face-default-xbm-file-default "papa.xbm") (setq x-face-default-xbm-file x-face-default-xbm-file-default) ;; Group Palameterで指定する。 (x-face . "zoso.xbm") ;; ---付けたくない場合は (x-face . "NULL") (add-hook 'gnus-select-group-hook (lambda () (let ((xface (gnus-group-find-parameter gnus-newsgroup-name 'x-face))) (cond ((null xface) (setq x-face-default-xbm-file x-face-default-xbm-file-default)) ((string-match "NULL" xface) (setq x-face-default-xbm-file nil)) (t (setq x-face-default-xbm-file xface)))))) ;; (add-hook 'gnus-summary-exit-hook (lambda () (setq x-face-default-xbm-file x-face-default-xbm-file-default)))
Group Parameter には以下のように設定します。
(x-face . "jpj.xbm")
その *Group* 上でメールの返事を書く時、m で新規メールを書く時の From: の設定をします。 その *Group* でだけ変えたいような場合に使います。
(posting-style
(from "KOSEKI Yoshinori <kose@wizard.tamra.co.jp>"))
もし日本語(ASCII以外)を使いたい場合には、eword-encode したものを書きましょう。 Nana-gnus, T-gnus では日本語を Group Parameter に入れても問題ない でしょうが(未確認)、Gnus5.8 の場合に日本語は使えません。
「eword-encode したもの」の作り方は簡単で、 FLIM に含まれる eword-encode.el を使います。
(eword-encode-string "小関 吉則") ← ここで C-j "=?ISO-2022-JP?B?GyRCPi40WBsoQiAbJEI1SEInGyhC?="
のように *scratch* buffer で C-j するだけです。 こうやってできあがったものを Group Parameter で使います。
(posting-style
(from "=?ISO-2022-JP?B?GyRCPi40WBsoQiAbJEI1SEInGyhC?=
(KOSEKI Yoshinori) <kose@wizard.tamra.co.jp>"))
こんな感じ。
全ての記事(メール)を読み終ったグループは、 グループバッファから消えてしまいます。 既読の記事(メール)を読む方法は、j fj.editor.emacs RET で、Group を選択し、
0: fj.editor.emacs
と表示されます。“0:”の部分が未読記事(メール)が 0 であることを示していま す。その行にカーソルを置いて、100 RET とすると、100 通表示されます。 (cancel された記事を含めて 100 通なので、実際表示される記事は 100 通より少な くなります。)
なお、L ←→ l で、未読記事(メール)が 0 であるグループの表示、 非表示のトグル動作です。
もし未読記事(メール)が 0 であるグループもそのまま表示したいのなら、
(setq gnus-permanently-visible-groups
"nnml:\\(direct\\|friends\\|meadow.*\\|semi.*\\)")
のように正規表現を使って指定します。
もちろんこれも Group Parameter を使って以下のように スマートに指定できます。
(visible . t)
送信したメール(記事)の控えは Gcc を使いましょう。 Cc を使うと相手に届いたメールにもそれが表示されていて かっこ悪いからね。
以下の設定で、メールとニュースで控えを保存するグループを分ける事ができます。
(setq gnus-message-archive-group
'((if (message-news-p)
"news_outgoing"
"mail_outgoing")))
メーリングリストでない通常のメールの場合は控えをそのグループに保存したい、 と思います。その時は Group Parameter で以下のようにします。
(gcc-self . t)
Cc なら MTA が返してくれるので、MTA までは送ったという証拠に なるという考えもあるようです。でもダイアルアップ環境なら不要なトラフィック が発生しますよね。ま、ダイアルアップ環境だからこそ MTA まで送られたか確認した いというものかもしれませんが。
nnml グループ、つまりメールででもニュース記事と同じように 期限切れ消去を行うことができます。 そのグループを読んで、q で summary から Group へ戻る時に expire (期限切れ消去) が実行されます。
以下の設定が 100 日より以前のメールを消去するという設定です。
(expiry-wait . 100) (total-expire . t)
メールの仕分け方法を Group Parameter で設定します。
まず、メールの仕分け方法は、nnmail-split-fancy にするように、 `.gnus.el' に
(setq nnmail-split-methods 'nnmail-split-fancy)
とします。nnmail-split-fancy の設定は、Group Parameter に
(extra-aliases "shirai@foo.bar.co.jp" "miyoshi@foo.bar.org")
のように書いておくと、それらを掻き集めてくれます。
extra-aliases だけではなく、to-address, to-list も掻き集めてくれますが、Gnus の動作になんの影響も与えないので extra-aliases が良いかもしれません。
でも、これって全て (& ... ) にしてくれちゃうんだよなぁ。
メールの仕分け(分割、分類、振り分け)は永遠の課題なのでしょう。 何度も何度もメーリングリストに質問が出てはその答えが投稿される。 でも各人各様の使い方があるわけで、すべての人にピタリと当てはまるような 設定はないのでしょう。
だって、すべての人に適用できるのなら個人で設定する必要などなく、 default 関数で用意できるはずなのだから。
メール環境ならば、nnml か nnimap のどちらかであるだろうからその例を。 用意されている関数でうまくいかないのならば自分用に書いてしまおう、 という例を。
メールの仕分けについて見直しを行なった。
nnimap-split-rule VS nnimap-split-fancyという考察の後、 nnmail-split-fancyに落ち着く。そして spam mail を追加。
という思考錯誤の末、2001/8/15 現在は以下のようになっている。
なお、メーリングリストの仕分けをするのに Reply-To を利用しようと思い、 Reply-To: foo@bar.baz から foo を抽出してそこに 振り分けを行おうと思ったが、 「Reply-To を指定する人がいること」、 「spam には Reply-To が付いてくることが多い」 という理由からうまくいかないことが経験的にわかったため Reply-To は利用せずに仕分けを行っている。
(setq nnmail-treat-duplicates 'warn) ;; fot *-with-parent (setq nnmail-split-fancy-simple-alist '(("x-ml-name" "\\(.*\\)" 1) ("errors-to" "owner-\\([^@]+\\)@" 1) ("sender" "owner-\\([^@]+\\)@" 1) ("sender" "\\(.*\\)-owner@" 1) ("sender" "\\(.*\\)-admin@" 1) ("mailing-list" "contact \\(.*\\)-help@" 1) ("mailing-list" ".*contact \\(.*\\)-owner@" 1) ;;("reply-to" "\\([^<]+\\)*<\\([^@]+\\)@.*>" 2) ;;("reply-to" "\\([^@]+\\)@" 1) ;; これはうまくいかない。 ("reply-to" "skk@ring.gr.jp" "skk") )) ;; (setq nnmail-split-fancy-cdr-alist '(("apparently-to" "kose@[a-zA-Z.]+\\.jp" "spam") ("reply-to" ".*postmaster@*" "misc") ("subject" "Output from \"cron\" command" "misc") (from "kosekiy@.*\\.jp" "work") (from "kose@[a-zA-Z.]+\\.jp" "direct") (from ".*tamra\\.co\\.jp" "tamra") (to "kose@[a-zA-Z.]+\\.jp" (| (from ".*sony.*" "VAIO") ("subject" "re:.*" "direct") ("references" ".*@.*" "direct") "spam")) "spam")) (defun nnmail-split-fancy-simple () (let ((alist nnmail-split-fancy-simple-alist) (res nil) lst num) (save-excursion (goto-char (point-min)) (narrow-to-region (point) (re-search-forward "^$" nil t)) (while (setq lst (car alist)) (goto-char (point-min)) (if (re-search-forward (concat "^" (nth 0 lst) ": " (nth 1 lst)) nil t) (progn (if (stringp (setq num (nth 2 lst))) (setq res num) (setq res (buffer-substring-no-properties (match-beginning num) (match-end num)))) (setq alist nil)) (setq alist (cdr alist)))) (widen)) res)) ;; nnmail-split-fancy は Group Parameter から生成する。 ;; (extra-aliases "mail address1" "mail address2") が良いようだ。 (gnus-group-split-setup t "spam") ;; (setq gnus-group-split-updated-hook (lambda () (setq nnmail-split-fancy (append '(|) ;; car (list '(: nnmail-split-fancy-simple) '(: nnmail-split-fancy-with-parent)) ;; Group Palameter (let ((lst (cdr nnmail-split-fancy)) (res nil)) (while lst (if (listp (car lst)) (setq res (append (list (car lst)) res))) (setq lst (cdr lst))) res) ;; cdr nnmail-split-fancy-cdr-alist))))
procmail 等を使って IMAP server 側で仕分けするということが、 もしかすると一般的かもしれないが、Gnus を使って IMAP client 側で 仕分けすることも可能です。 いろいろ試した結果、私にはそれが合っているように思います。
私は以下のような設定で行っています。 仕分けルールは、前述の nnmail-split-fancy そのものを使っています。
(setq user-imap-server "dwarf") (setq gnus-secondary-select-methods `((nnimap ,user-imap-server (nnimap-list-pattern ("*")) (nnimap-split-inbox ("INBOX")) (nnimap-split-rule ((,user-imap-server ("INBOX" nnmail-split-fancy)))))))
nnimap + gnus-agent にも書いたけど、 Gnus Agent と組み合わせて offline で使うのもいいかな、 と思っている。 実際は IMAP は試験運用しかしていなくて完全に IMAP 環境に移行は行っていない のだが。
『Windows/IMAP server』 に書いたように Windows で IMAP server が動けばいいのだけど.......。 動いたら教えてね。
私のメールフォルダには過去4年分で約3万通ほどのメールが 貯まっています。ニュース記事の保存記事も数百通あります。 それを瞬時に検索できたら素晴しいと思いませんか? (少ない数から検索するのなら jgrep でも良いのでしょうが。)
えぇ、もちろんそれは可能なのです。ここではその方法を紹介しましょう。
search engine として Namazu を使っています。Namazu は予め index を作成しておき、検索時にはその index を使うという方式のもので Web 上の検索ツールとして有名で、 これをローカルで個人使用することも可能なのです。もちろん Windows でも使えます。
私のページも Namazu で検索 できるように してあるのでその素晴しさはそこで体験くださいな。(pnamazu.cgi(perl)使用)
Gnus で使える Namazu interface として、 ここでは `nnir.el'、`gnus-nmz-1.el' を紹介します。
ftp://ftp.emacs.org/pub/elisp/Mail/nnir.el に以下のパッチをあてます。 ./Archives/nnir.el.patch.gz
私の設定は以下。
(require 'nnir) (setq nnir-search-engine 'namazu nnir-mail-backend '(nnml "")) ;; (if (eq system-type 'windows-nt) (setq nnir-namazu-index "c:/kose/Namazu/Mail/" nnir-namazu-remove-prefix "/c|/kose/\\(Mail/\\|News/cache/\\)") (setq nnir-namazu-index "/home/kose/Namazu/Mail/" nnir-namazu-remove-prefix "/home/kose/\\(Mail/\\|News/cache/\\)"))
使い方は簡単で、グループバッファで G G 検索文字 RET です。 また、 # で検索するグループ(複数指定可)を指定できます。
そうそうそう、それから以下のような謎(と思うかもしれない)の設定もしてあるん だけど、なんでかわかりますか?
;; t : News/cache/fj.editor.emacs (setq gnus-use-long-file-name t) ;; cache (setq nnmail-use-long-file-names t) ;; nnml (setq gnus-secondary-select-methods '((nnml "") (nnml "cache" (nnml-directory "~/News/cache/") (nnml-nov-directory "~/News/cache/") (nnml-active-file "~/News/cache/active") (nnml-get-new-mail nil)))) ;; for cache (defun nnir-group-full-name (shortname) "For the given group name, return a full Gnus group name. The Gnus backend/server information is added." (if (string-match "^fj\\.\\|^alt\\.\\|^comp\\." shortname) (gnus-group-prefixed-name shortname '(nnml "cache")) (gnus-group-prefixed-name shortname nnir-mail-backend)))))
いろいろやってみると「こういうのもアリかな」と気がつくでしょう。
~/ +- Mail ;; nnml | + elips | + emacs-mime-ja | : : +- News ;; cahce | + cache | | + fj.editor.emacs | | + fj.news.usage | | + : :
こんな風に保存しているからです。
Namazu 2.x に附属しています。
`gnus-nmz-1.el' というのは最近他に興味が移ってしまって投げたま まになってます。すみません。
私が `gnus-nmz-1.el' を作った時の気持としては、M-x namazu で検索。 検索結果が、URL なら W3, man なら man-mode、mail なら Gnus で閲覧できる、 というのを考えていました。 (info も検索できるようにという目論見もあったんですが、未着手です。)
検索の対象を絞らないで、`namazu.el' からそれに適合する viewer が起動するのがいいと。
何かきっかけがあると開発を再開するかもしれません。 (じつは密に 三好さんに期待 ^^;;))
gnspool との組み合わせには真似のできないオフライン環境を構築できます。 RASCON との組み合わせで電話回線の接続、切断も Emcas からコントロールできま すし。
Pterodactyl Gnus は 1999年 12月 3日に Gnus 5.8.1 としてリリースされました。
Pterodactyl Gnus という Gnus のバージョンについては UNIX USER の記事を読んでもらうとして...
User-Agent は以下のようにやってプラットホーム情報を付加しています。 (もちろん Meadow のぶんも追加してあります。)
pGnus 附属の mailcap.el と FLIM に附属の mailcap.el とファイル名が同 じなので注意が必要です。(FLIMもインストールしてあるとロードされない)
でも Semi 化されていない 生の Pterodactyl Gnus で多言語メール、 ニュースを書くのは問題がいろいろと出るかもしてません。 (dingを読んでいる人、自分で解決する人以外にはあまりお勧めではないかも。)
「ニュースを読むだけで記事は Mew で書く」 のならば pGnus は簡単なのでお勧めかもしれませんよ。
(if (eq system-type 'windows-nt) (eval-after-load "gnus-msg" '(progn (defun gnus-extended-version () "Stringified Gnus version and Emacs version." (interactive) (concat "Gnus/" (prin1-to-string (gnus-continuum-version gnus-version) t) " (" gnus-version ")" " " (cond ((string-match "^\\(\\([.0-9]+\\)*\\)\\.[0-9]+$" emacs-version) (if (and (eq system-type 'windows-nt) (not (featurep 'meadow))) (concat "NTEmacs/" (match-string 1 emacs-version)) (concat "Emacs/" (match-string 1 emacs-version)))) ((string-match "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)[^(]*\\(\\((beta.*)\\|'\\)\\)?" emacs-version) (concat (match-string 1 emacs-version) (format "/%d.%d" emacs-major-version emacs-minor-version) (if (match-beginning 3) (match-string 3 emacs-version) "") (if (boundp 'xemacs-codename) (concat " (" xemacs-codename ")") ""))) (t emacs-version)) (concat " (" system-configuration ") ") (if (featurep 'mule) (concat "Mule/" mule-version)) (if (featurep 'meadow) (let ((ver (Meadow-version))) (if (string-match "^Meadow-" ver) (concat " Meadow/"(substring ver (match-end 0)))))) ))) ))
BBDB (the insidious Big Brother DataBase) は、とっても便利に使える データベースです。
「BBDB は勝手にアドレスを収集してくれるアドレス帳です。」 という紹介を見かけますが、それは半分当りで、でもそれが全てではありません。
単なる受動的な「アドレス帳」ではなく、もっと能動的で有能なエージェント (agent)、もしくは秘書 (secutitary) とも言えるものなのです。
例えば、BBDB で表示すると、こんな感じ (X-Face-BBDB.png) になります。
見ての通り、まず X-Face 、 mua: フィールドに使用している MUA、 ml: フィールドでどのメーリングリストで見掛けたか、 www: フィールドで URL を収集していて、これらは自動的に更新されます。
Gnus の Summary buffer で BBDB に登録してある人にマークが付いていて、 「あれっ、この人どこで合ったんだっけ?」と思ったら : キーで BBDB 表示します。するとどのメーリングリストに棲息しているのかがわかるし、 特に direct となっている人はダイレクトメールを貰った事がある人 というのを教えてくれますわけです。
このように鷄頭のための外部記憶装置(秘書)となってくれるのです。
また、notes: フィールドに自由に注意書きを書く事ができます。 この前開催された『「Meadow 使おうよの会」発足準備会』の参加メンバーには 『notes: 宴会』を付記しました。すると、
M-x bbdb-notes RET notes RET 宴会 RET
で宴会参加メンバー一覧表示することができ、その *BBDB* buffer 上で *m でメンバー全員宛てのメール(To: に全員のアドレスを展開) を書くことができます。
ね、便利でしょ。もちろん *mail* buffer 上で、アドレスの補完もできるのは 言うまでもないでしょう。
インストールと `.emacs' の設定は以下のようにします。 特別に難しいということはありません。
* BBDB: (bbdb). The Insidious Big Brother Database.
以下のもののうち必要なものだけ記述しましょう。
;;; BBDB (require 'bbdb) (add-hook 'gnus-startup-hook (lambda () (require 'gnus-bbdb) (gnus-bbdb-insinuate))) ;; 問い合わせなしでセーブ (setq bbdb-offer-save nil) ;; http://www.lab3.kuis.kyoto-u.ac.jp/%7Etsumura/emacs/bbdb.html ;; 私は Emacs の終了時に「bbdb database を save するか?」と訊かれるの ;; が 鬱陶しいので、bbdb database が更新されるたびに save するようにし ;; ています。 (ちょっと遅いですが、あまり気にならないです) (add-hook 'bbdb-after-change-hook '(lambda (dummy) (bbdb-save-db nil))) ;; (modify-coding-system-alist 'file "\\.bbdb\\'" 'iso-2022-7bit) ;; FLIM では quote された eword encoded word は decode されませんが、それ ;; を強制的に decode したい場合には、次の設定を加えてください。 (setq gnus-bbdb/decode-field-body-function (function (lambda (field-body field-name) ;;(require 'eword-decode);; for Pterodactyl Gnus (eword-decode-string field-body)))) ;; MUA, Emacs等いろいろ集める (setq bbdb-notice-hook 'bbdb-auto-notes-hook) (setq bbdb-auto-notes-alist '(("X-Mailer" ("\\(xcite[^>]+> \\|\\)\\(.*\\)" mua 2)) ("User-Agent" ("\\(xcite[^>]+> \\|\\)\\(.*\\)" mua 2)) ("X-Newsreader" ("\\(xcite[^>]+> \\|\\)\\(.*\\)" mua 2)) ("X-Emacs" (".*" emacs 0)) ("X-Url" (".*" www 0)) ("X-Uri" (".*" www 0)) ("To" ("kose@" ml "direct")) ("X-Ml-Name" (".*" ml 0)) ("reply-to" ("^\\([^@]+\\)@" ml 1))))
MUA 情報等の収集規則は bbdb-auto-notes-alist で決定します。
どのグループでアドレスを自動収集するかの決定は、 bbdb/news-auto-create-p で決定されます。グループパラメータで設定するのが良いでしょう。
X-Face-BBDB.pngのように X-Face を収集しましょう。
以下で収集します。
(setq bbdb-auto-notes-alist
(append bbdb-auto-notes-alist
(list (list "x-face"
(list (concat "[ \t\n]*\\([^ \t\n]*\\)"
"\\([ \t\n]+\\([^ \t\n]+\\)\\)?"
"\\([ \t\n]+\\([^ \t\n]+\\)\\)?"
"\\([ \t\n]+\\([^ \t\n]+\\)\\)?"
"\\([ \t\n]+\\([^ \t\n]+\\)\\)?"
)
'face
"\\1\\3\\5\\7\\9")))))
表示は ftp://ftp.jpl.org/pub/elisp/bitmap/bitmap-mule-8.3.tar.gz を使います。(8.3で実装しました。) Meadow での font の設定は 『Meadow/bitmap-muleの設定』 に。
BBDB の登録情報を元に Gnus のメール振り分けを行うことができる gnus-bbdb/split-mail という関数が用意されています。
以下は、`README-gnus-bbdb.ja' に含まれる説明文。
nnmail-split-fancy で使用するための関数です。次のように使用してください。
(setq nnmail-split-methods 'nnmail-split-fancy
nnmail-split-fancy
'(|
.....
*1 (: gnus-bbdb/split-mail "from\\|to\\|cc"
'company "foo" "foo-group")
.....
*2 (: gnus-bbdb/split-mail "from\\|to\\|cc" 'company "^bar")
.....
*3 (: gnus-bbdb/split-mail "from\\|to\\|cc" 'group)
.....
*4 (: gnus-bbdb/split-mail "from\\|to\\|cc" 'notes "my friend"
'(|
.....
.....
))
*1 : From, To, Cc いずれかのヘッダー・フィールドに含まれるメイル・アド
レスのうち BBDB の `company' フィールドに `foo' が含まれる場合、
`foo-group' に振り分けます。
*2 : `company' フィールドが `bar' で始まっている場合、`company' フィー
ルドの内容をそのままグループ名として使用し、振り分けます。
*3 : `group' フィールドがある場合、`group' フィールドの内容をそのまま
グループ名として使用し、振り分けます。
*4 : `note' フィールドに `my friend' が含まれる場合、その後ろに指定さ
れた規則で振り分けます。この規則の記述方法は、通常の
`nnmail-split-fancy' での記述方法と同じものです。
cross post (複数のメーリングリストに Cc: )されているメールを その配送されたメーリングリストのグループだけに格納したいので、 私は、nnmail-split-fancy にはreply-to で決定するように以下のように設定しています。
メーリングリストではない友人との雑談は nnml:friends へ うちの会社の人からのメールは nnml:works へ格納しています。
この friends と works の集合が交じわらないのなら こういうやり方でうまくいくでしょう。 (kose は company:tamra に属してはうまくいかない)
(| (: gnus-bbdb/split-mail "reply-to" 'gnus-group) (: gnus-bbdb/split-mail "from\\|to\\|cc" 'notes "friends" "friends") (: gnus-bbdb/split-mail "from\\|to\\|cc" 'company "tamra" "works") (,F\) (any "kose@.*\\.tamra\\.co\\.jp\\|kose@yk\\.netlaputa\\.ne\\.jp" "direct") ("subject" "Output from \"cron\" command" "cron") "spam")
ま、自分好みになるように色々試してみるのが良いでしょう。
きちんと設定できると、spam グループには SPAM だけが残ります。 もちろん To: で指定されたダイレクトメールの SPAM を取り除くことはできませんが。
mail, news を引用する時の kose> という引用符を BBDB で管理できます。 citation tool は `mu-cite' を使います。 (supercite でも BBDB と連携できるが私は mu-cite を使っています。) ftp://ftp.jpl.org/pub/elisp/mu/mu-cite-8.1.tar.gz
BBDB の `attribution' という field を使います。
以下が BBDB と連携する時の mu-cite の設定です。
;;; mu-cite (autoload 'mu-cite-original "mu-cite" nil t) ;; for message-mode only (setq message-cite-function (function mu-cite-original)) ;; mu-bbdb (add-hook 'mu-cite-load-hook (lambda () (require 'mu-bbdb))) ;; bbdbデータベースを使う (setq mu-cite-top-format '(in-id ">>>>> “" bbdb-prefix-register "” = " from " wrote:\n")) (setq mu-cite-prefix-format '(bbdb-prefix-register-verbose "> "))
もし BBDB をバージョンアップしたなら mu-cite も再バイトコンパイルしましょう。エラーになります。 (先程はまってしまった -- 2000/5/11)
nickname 表示、+ 表示。
使い始めるといくつか不都合が生じるものです。 以下は思いつくままに...。
.bbdb はしばしば壊れます。小まめにバックアップしましょう。 (壊れるのはオイラだけかな〜 ??)
何故かというと...
BBDB セットアップ(.emacs) で 書いたように、.bbdb には eword を decode した文字として色んな言語が混在し て記録しています。そして
(modify-coding-system-alist 'file "\\.bbdb\\'" 'iso-2022-7bit)
としてあって、read/write の coding-system を iso-2022-7bit としています。
しかし、Emacs が時々ヒスを起して coding-system 音痴になることがあって、全 ての buffer を euc-japan で保存しちゃうことがあります。そういう時には気がつ いた時はたいてい buffer を保存した後で、.bbdb も漏れなくおかしなことになっ ています。
Emacs を再起動して .bbdb を読み込んだ時には、(iso-2022-7bitで読み込むので) 文字化けした状態になって、BBDB の起動でエラーになってしまいます。
そういう時にはあわててはいけません。.bbdb をあわてて再セーブなどしては取り 返しがつきません。
そういう時はあわてずに、
C-x C-f .bbdb RET で開き、C-x RET c coding-system RET C-x C-v RET で coding-system 指定で、ファイル再オープンします。 文字が読めるようになるまで、coding-system を色々変えて幾度かトライしましょう。
読める形で正常に開けたら、C-x RET f iso-2022-7bit RET できちんと、 iso-2022-7bit でセーブし直します。
これで元に戻ります。
どうしても駄目な場合にはバックアップから復帰します。
MUA 情報を収集すると日増しに `.bbdb' が肥大化していきます。 時々洗濯してあげます。
私は *BBDB* で、w で MUA 情報の洗濯(古い情報を消)しています。 自動でやるのではなく *BBDB* に表示して目で確認してから w しています。 それの方が性に合っているようです。
;;; washing BBDB ;; (add-hook 'bbdb-mode-hook (lambda () (local-set-key "w" 'bbdb-wash-field-mua))) ;; (defun bbdb-wash-field-mua () "Wash mua field." (interactive) (let ((mua (bbdb-record-getprop (bbdb-current-record) 'mua)) key p (record (bbdb-current-record t))) (with-temp-buffer (insert mua) (goto-char (point-min)) (while (re-search-forward "\\([.b]\\)\\([0-9] \\)" nil t) (replace-match "\\10\\2")) (sort-lines t (point-min) (point-max)) (while (re-search-forward "\\([.b]\\)0\\([0-9] \\)" nil t) (replace-match "\\1\\2")) (goto-char (point-min)) (while (re-search-forward "^\\([^- /]+\\)[- /]" nil t) (forward-line) (setq p (point) key (buffer-substring (match-beginning 1) (match-end 1))) (while (looking-at key) (forward-line) (delete-region p (point)))) (goto-char (- (point-max) 1)) (and (looking-at "\n") (delete-char 1)) (bbdb-record-putprop record 'mua (buffer-substring (point-min) (point-max)))) (bbdb-redisplay-one-record record)))
でもこれだと MUA 情報の先頭の Mew や Gnus で同一であるか判断しているので platform 情報の比較はやっていません。そのため、
Mew version 1.95b34 on Emacs 20.6 / Mule 4.1 (葵) / Meadow-1.13 Beta1 (棚橋:61) Mew version 1.95b34 on Emacs 20.6 / Mule 4.0 (花宴) Mew version 1.95b34 on XEmacs 21.2.32 (Kastor & Polydeukes)
はひとつだけしか残らず、platform 情報を保存することができません。 もっともっと fuzzy にしたいんだけどなぁ。
良いアイディア・実装を思いついたら是非教えてくださいな。
最近はいろいろなものが CVS を使って管理、開発されています。
APEL, FLIM, SEMI, Semi-gnus, Daredevil SKK, Namazu, cmail, Cygwin, Gnus, Gnujdoc, BBDB, XEmacs, Emacs (1), ... 等々。
というわけで CVS のご案内です。
というわけなので Cygwin でコンパイルした CVS を使いましょう。-*- outline -*-
$Date: 2000/02/07 15:09:39 $ $Id: CVS_on_Windows,v 1.1 2000/02/07 15:09:39 kose Exp $
[cvs on Windows 95/NT Windows 95 で動作確認済み (NT では未確認)]
* cvs.exe はどれを使うのでしょう?
Cygwin 環境で、ソースからコンパイルしましょう。理由を以下に述べます。 CVS ではリポジトリの行末コードは正規化されるので、Windows 用にコンパイ ルされた cvs のバイナリーで checkout すると LF なファイルが CRLF にな ります。
SKK 10.x (Maintrunk) 及び Daredevil SKK 11.1 は主に UNIX 上で開発され ているので、主なファイルの行末コードは LF であり、Windows 専用のファイ ルのみ CRLF にしています。これらを Windows 用の cvs.exe で update する と、LF は CRLF になり、CRLF は CRCRLF になってしまいます。
このように行末コードが変更されてしまうと、diff を取ったり patch を当て たりするときに不便なので、行末コードを Windows native に正規化しない (UNIX と同様に扱う) Cygwin でソースからコンパイルすつことを推奨します。
* cvs の version は? またどこから get できますか?
cvs のバージョンは、1.10.7 以上が良いようです (それ以下のバージョンで はコンパイルエラーが出ることがあります)。1.10.7 は例えば、
http://download.cyclic.com/pub/cvs-1.10.7/cvs-1.10.7.tar.gz
から get できます。
* cvs.exe をコンパイルできたら、次は...?
LF を LF のまま checkout するためには Cygwin でコンパイルした cvs をバ イナリマウントした filesystem 上で使う必要があります。checkout するド ライブをバイナリマウントするには、下記のように設定して下さい。 (ドライブを c ドライブと仮定します。)以下のコマンドは一度だけ実行すれ ば結構です。
% umount / ; mount -b c: /
注1; .bashrc の行末コードは必ず LF にしておいて下さい。 注2; $TEMP が他のドライブにマウントされているときは $TEMP をバイナ リマウントして下さい。 例えば $TEMP=d:\tmp だとした場合、 % umount /tmp ; mount -b d:\tmp /tmp
[End of CVS_on_Widows]
4月12日現在の最新は 2.9.8 で、以下のものをインストールします。
起動は、~/.emacs 以下を設定して M-x cvs-examine です。
(load-file "pcl-cvs-startup") (add-hook 'cvs-mode-hook (lambda () (collection-set-goal-column cvs-buffer-name 38))) ;; log はどのコードで書くか決めて、固定にしておかないと危険です ;; (euc-japan でも sjis でも良いんけど) (modify-coding-system-alist 'process "cvs" '(undecided . euc-japan)) ;; pserver ではなく local repository を使うための設定。詳細は、 ;; meadow-users-jp メーリングリストの ;; Subject: about pcl-cvs X-ML-COUNT: 1870 ;; Date: Sat, 29 Jan 2000 01:45:18 +0900 で始まる thread を参照のこと。 ;; (if (featurep 'meadow) (define-process-argument-editing "/cvs\\.exe\\'" (lambda (x) (let ((command (car x)) (argument (cdr x))) (setq argument (cygnus-process-argument-quoting argument)) (concat (unix-to-dos-filename command) " " (unix-to-dos-argument (mapconcat (function concat) argument " ") nil nil nil nil))))))
使い方は (Info-goto-node "(pcl-cvs)") を読みましょう。ね。(^-^)v
GNU電子図書館 に報告しといた方が良いだろうか。(でも 1999年4月29日から更新されてない)
この中で唯一 anonymous checkout ができないのがこの Emacs だったりします。
This document was generated on 31 January 2004 using the texi2html translator version 1.52.1.
|
URL: http://www.NetLaputa.ne.jp/~kose/ PGP Fingerprint: 59 8E 1E 4D 41 7F DD 80 12 13 47 A3 FB 62 97 44 Copyright (C) 1998-2001 kose@yk.NetLaputa.ne.jp All Rights Reserved. |
|