Select X-Face -- select x-face graphically
 v0.15  Feb. 2002 Yuuichi Teranishi <teranisi@gohome.org>

X-Face フィールドの挿入を顔の画像を見ながら選択的に行えます。
XEmacs, Mule2.3@19.28, Mule2.3@19.34, Emacs 20.2〜 で動作確認済みです。

Emacs/Mule で顔を見られるようにするには、x-face-mule.el が必要です。
x-face-mule.el は、ftp://ftp.jpl.org/pub/elisp/x-face-mule-**.tar.gz から入手
可能になっています。設定方法については、x-face-mule.el のパッケージに付属の
ドキュメントを参照してください。

使い方: 
1. select-xface.el を load-path のどこかに置き、バイトコンパイルします。

2. ホームディレクトリに .xfaces というディレクトリをつくります。
   .xfaces というディレクトリ名は .emacs に
    (setq select-xface-directory "/anywhere/you/want")
   というかんじの設定を加えれば変更できます。

3. 2. の .xfaces ディレクトリに、候補にしたい xface ファイル
   を複数置きます。ファイル名は何でもよいです。
   ここでいう xface ファイルとは、X-Face のデータそのままの内容をもつファイル
   を指します。
   例えば、こんなのです。
--ここから--
 03C/yqeE_(Zt@-l.JKp\)0fxhT=lLIuKJta/Sj<*DS_Q,"j&y-h|uJ]TaIuL_x5@e|#+rx|
 `W2z%G`\W{p>(FmB61%|"qcI|?#CP05@0?|jU.\A9le6f|+mQ7ShQS.Gd~t9vT<5?Y9$F_GmF$#RRF
 0xHeO."!N[wDl)B|0?/Qtn[LI&has6UQe_NYaStsZb;K"TE_}X9YjG[)YU*7K
--ここまで--
   複数の X-Face を一つの候補として扱うこともできます。
   この場合は、.xfaces の下にディレクトリを作ってそこに一つの候補としたい
   複数の xface ファイルを置きます。

   x-face.el をお使いの場合は X bitmap ファイル(gzip 圧縮も可)も候補とするこ
   とができます。
   x-face.el は山岡克美 <yamaoka@ga.sony.co.jp> さんらによって開発されている
   X-Face を扱うためのユーティリティです。x-face.el v1.2.8 b3 以降をお使いく
   ださい。X bitmap ファイルの拡張子は ".xbm" (もしくは ".xbm.gz")としてくだ
   さい(拡張子で判別しています)。

   また、x-face 1.3.6.4 以降では Animated X-Face が利用できます。
   Animated X-Face を選択候補の一つとしたい場合は、
---
X-Face-Type: animate=0.5; geometry=1x1
X-Face: 'M<Y)453pdR#f`\ou?;~'-e8d7aA-q>-Iu07RL<a2F+</o~`${jfAvk808Jl3u|27-5[d9=
 Gy<=HC>XEn2_dm90%S0>;I_?Igs6\iQ(Nyb[76,5,`T"9'no<un+;iG@UAF*beq)](/"AhtAhk'_`c
 4/{wU2=p%v@QEMzl{}8'yg^FqP)}"(W&frwr09ir\>}`Kp"\V8!YI4jLwftM>M
X-Face: '~FmF"`$eK,BU|2UX}4&KT^D+&.?&|/UlD|M7fi'OZETC1:U4"]YSylN^h?C]@JN2$*_H0y
 ]m]V'tHN24}Le@5\~`B8SnRrcB>cZ`a'j.Q0ix/by17L4.Il)yB.!RZblv%:Q]_17l&FJXvf@@FH#c
 AtK9{yKNHiw5gT$:ID!UFU`:!z-;2-6Fc82V0"{sz%Tv1r"gJ&Y=rMnH8=~(SMP1nN/IV
X-Face: A!9c@vh-@qlDZfYw7),BzNmBWQ$}p>WJnDxdB>_\6KC&4{Ndrv%=A-Tq%101t"Jf({G|NGF
 VSKs295lGgqXXj/lp2't4^;S=E%kv?hxf)~Yd{w>sjKY,WmK9+sXvjd^o:`Y.mK7Z9P"]BAvx`Bm&g
 v_l$)Zp[RQIfCF?GIy0{;1G)pI,CpR.@~}]vF8be:3js1j!^Sy>p=#q_![sC7y$s78fW
X-Face: '~FmF"`$eK,BU|2UX}4&KT^D+&.?&|/UlD|M7fi'OZETC1:U4"]YSylN^h?C]@JN2$*_H0y
 ]m]V'tHN24}Le@5\~`B8SnRrcB>cZ`a'j.Q0ix/by17L4.Il)yB.!RZblv%:Q]_17l&FJXvf@@FH#c
 AtK9{yKNHiw5gT$:ID!UFU`:!z-;2-6Fc82V0"{sz%Tv1r"gJ&Y=rMnH8=~(SMP1nN/IV
---
   のような中身をもつファイルに適当な名前をつけて .xfaces の下に置いて
   ください。(選択時に`動く'ようにするには、後述の
   `x-face-xmas-replace-highlight-headers' の設定が必要です)

  さらに、グレースケールの X-Face についても同様に、
---
X-Face: #Ek<qQ%V#tZ_(d>=$}&%CM;v2<Zx1*^I<4DIruA}QA~b|2m&K7<]j6(bIsFm#WM0tk|KY'E
 XpMIFm3TDE_ZA@"`^a?Ir*@;uT:SrL`p.3Kn,X_6yh@|<k{@2*NBX{yTq}")Phbq34a+}]IHUmj0O3
 3fWA=OBqh(2ejiPE!<pTf9bfiW`\<K,n`^<(=EM=<`cL8rYJiQpS`1&N]!IQ>`2Bf@DqrQ|tSZO3K}
 IJS64l$qDWzyj}>Oc&dJm>BUY1=uIZ
X-Face-1: ',mm@o.~l_F_Zl_^ZTm|n{x/D}m4@)9!GEh*^>PDA3F,&,1#VCZl+{P"Myk'!_uWBI,LA
 rBs/lV7E58eccGLW~t/wm({t+(j@kE5>Kedl\cKTpW@/OQJ0?qxV|SN^r,G~KmmVr+~ZSSpCXATG(z
 Yedk]MS:$=lBkMh8X:U66LSkY;;X<"Rco+cx/)o-
X-Face-2: 0>G#dFq/Lc;~~aU#g+S!nRwX%r,QcnQ^,gzHUl0_mP5+q2[n-RmD`PtX`4fF_\3HRYEm:
 cXe+Fm%T=y\yG9>2R({]h:ye0HPkSYs>v;:H(PJCr]0S<lu*23/{tE/f*E|yN&NL%h!DqnIY0oQ!Z~
 aFss<B^g]nF<$gr)HlB7=:"E_^%Y9FYtM+-h|>+HMgDy5ow\=SZyZ9ai*MFsxEe35(lb~M";;%jFPh
 4=G#9!$*IrKz>ui((HH^|\URD-htum\kb64"JXM
---
   のような中身をもつファイルに適当な名前をつけて .xfaces の下に置けば
   選択の候補となります。

(例) 例えば、ぼくの .xfaces は以下のようになっています。

% cd ~/.xfaces
% ls
a       b       c      multi/     teranisi.xbm
% ls multi
1       2       3

a, b, c は xface ファイル, multi はディレクトリ, teranisi.xbm はビットマップ
ファイルです。ディレクトリ multi の下には 1, 2, 3 という xface ファイルがあり
ます。この例では、候補は a, b, c, (1,2,3の3つ), teranisi.xbm の 5 つとなりま
す。

4. .emacs に以下のような設定をします。

(autoload 'select-xface "select-xface" "Select X-Face" t)

;; Mew の場合
(add-hook 'mew-draft-mode-hook
	  (lambda ()
	    (define-key (current-local-map) "\C-c\C-x" 
	      'select-xface)))
;;; Gnus の場合
(add-hook 'gnus-message-setup-hook
	  (lambda ()
	    (define-key (current-local-map) "\C-x4x"
	      'select-xface)))
;;; mh-e の場合
(add-hook 'mh-letter-mode-hook
	  (lambda ()
	    (define-key (current-local-map) "\C-x4x"
	      'select-xface)))
;;; MAIL, RMAIL, VM, cmail, Wanderlust の場合
(add-hook 'mail-mode-hook
	  (lambda ()
	    (define-key (current-local-map) "\C-x4x"
	      'select-xface)))

;; x-face.el とともに使う場合は、以下の設定をします。
(require 'x-face)
;; highlight-headers の入れ換え (XEmacs の場合)
(x-face-xmas-replace-highlight-headers)

5. メーラのメッセージ編集モードで、

 * (上記設定の Mew の場合) C-c C-x をおすと、顔の候補の絵がポップアップします。
 * C-p, C-n で次/前の候補になります。
 * リターンキーで決定します。
 * スペースキーを押すと、既にある X-Face に加えて、現在表示中の候補を
   付け加えます。
 * C-g または q でやめられます。
 * r でファイルを読み直して顔の候補をロードしなおします。

  既に X-Face: フィールドが存在する場合は、その顔が最初に現れます。
  .xfaces に同じ顔の候補が複数ある場合は、それらは 1 つの候補になります。

応用編:

;; 名前が正規表現にマッチする候補しか使わないようにする。
(setq select-xface-candidate-regexp "\\.xbm\\(\\.gz\\)?$")

;; バージョン情報もヘッダに挿入
(setq select-xface-add-x-face-version-header t)
;; x-face をお使いで、x-face-add-x-face-version-header が non nil の場合は
;; select-xface-add-x-face-version-header を設定しなくても
;; x-face.el とselect-xface.el のバージョン情報が自動的に付け加わります。

;; X-Face utility を使って顔挿入時にメッセージ編集バッファにイメージを出す 
;; (XEmacs の場合)
(add-hook 'select-xface-insert-hook 
	(lambda () (x-face-xmas-display-x-face 1)))

謝辞:

山岡克美 <yamaoka@ga.sony.co.jp>さんをはじめとする 
elips ML <elips@eos.hokudai.ac.jp> 
のメンバの方々には、貴重な御助言、及びパッチを御提供いただいています。
ここに感謝の意を表します。

