+@node Signals, Writing add-ons, Namespace management, Development
+@section Signals
+
+\e$B2hLL$N:FIA2h$r8zN(NI$/9T$&$?$a$K!"%$%Y%s%H$HIA2hBP>]$N%*%V%8%'%/%H\e(B(\e$B%P%C\e(B
+\e$B%U%!$d!"%b!<%I%i%$%s$N0u\e(B @pxref{Indicators})\e$B$r7k$SIU$1$k%a%+%K%:%`$rMQ0U\e(B
+\e$B$7$F$$$^$9!#\e(B
+
+\e$B2?$i$+$N%$%Y%s%H$,H/@8$9$k$H!"%7%0%J%k$,Aw=P$5$l$^$9!#%7%0%J%k$N35G0$O!"\e(B
+Qt \e$B$d\e(B GTK+ \e$B$H$$$C$?\e(B GUI \e$B%D!<%k%-%C%H$KMQ0U$5$l$F$$$k$b$N$HF1MM$G$9!#\e(B
+
+\e$B%7%0%J%k$rAw=P$9$k$K$O!"\e(B@samp{riece-emit-signal} \e$B$r;H$$$^$9!#\e(B
+
+@defun riece-emit-signal signal-name &rest args
+@var{signal-name} \e$B$G;X<($5$l$k%7%0%J%k$r!"0z?t\e(B @var{args} \e$B$H$H$b$KAw=P$7$^$9\e(B
+@end defun
+
+\e$B%7%0%J%k$K1~Ez$9$k$K$O!"\e(B@samp{riece-connect-signal} \e$B$r;H$$$^$9!#\e(B
+
+@defun riece-connect-signal signal-name slot-function &optional filter-function handback
+@var{signal-name} \e$B$G;X<($5$l$k%7%0%J%k$K1~Ez$9$k4X?t\e(B @var{slot-function}
+\e$B$r7k$SIU$1$^$9!#\e(B@var{slot-function} \e$B$K;XDj$5$l$?4X?t$O\e(B 2 \e$B$D$N0z?t$r<h$j$^\e(B
+\e$B$9!#Bh\e(B1\e$B$N0z?t$O$O%7%0%J%k$rI=$7$^$9!#$^$?!"Bh\e(B2\e$B$N0z?t$H$7$F!"\e(B
+@var{handback} \e$B0z?t$KM?$($i$l$?%*%V%8%'%/%H$,$=$N$^$^EO$5$l$^$9!#\e(B
+
+@var{filter-function} \e$B$O!"<u?.$7$?%7%0%J%k$K1~Ez$9$Y$-$+$I$&$+$rH=Dj$9$k\e(B
+\e$B4X?t$G$9!#$3$N4X?t$O0z?t$H$7$F%7%0%J%k%*%V%8%'%/%H$r<u$1<h$j!"\e(B@samp{nil}
+\e$B$^$?$O\e(B @samp{t} \e$B$rJV$9$3$H$,4|BT$5$l$^$9!#JV$jCM$,\e(B @samp{nil} \e$B$N>l9g$K$O!"\e(B
+@var{slot-function} \e$B$,8F$P$l$k$3$H$O$"$j$^$;$s!#\e(B
+@end defun
+
+\e$B%7%0%J%k%*%V%8%'%/%H$K%"%/%;%9$9$k$K$O!"0J2<$N4X?t$r;H$$$^$9!#\e(B
+
+@defun riece-signal-name
+\e$B%7%0%J%k$NL>A0\e(B(\e$B%7%s%\%k\e(B)\e$B$rJV$7$^$9!#\e(B
+@end defun
+
+@defun riece-signal-args
+\e$B%7%0%J%kAw=P;~$KM?$($i$l$?0z?t$rJV$7$^$9!#\e(B
+@end defun
+
+\e$B8=:_!"0J2<$N%7%0%J%k$,I8=`$GEPO?$5$l$F$$$^$9!'\e(B
+
+@table @samp
+@item channel-list-changed
+\e$B;22C$7$F$$$k%A%c%s%M%k$N0lMw$NJQ2=\e(B
+@item user-list-changed
+\e$B%A%c%s%M%k$N;22C<T0lMw$NJQ2=\e(B
+(\e$B0z?t$O%A%c%s%M%k$KAjEv$9$k\e(B @samp{riece-identity} \e$B%*%V%8%'%/%H\e(B)
+@item channel-switched
+\e$B8=:_$N%A%c%s%M%k$r0\F0\e(B
+@item user-joined-channel
+\e$B%f!<%6$,%A%c%s%M%k$K;22C\e(B
+(\e$B0z?t$O!"%f!<%6$*$h$S%A%c%s%M%k$KAjEv$9$k\e(B @samp{riece-identity} \e$B%*%V%8%'%/%H\e(B)
+@item user-left-channel
+\e$B%f!<%6$,%A%c%s%M%k$+$iN%C&\e(B
+(\e$B0z?t$O!"%f!<%6$*$h$S%A%c%s%M%k$KAjEv$9$k\e(B @samp{riece-identity} \e$B%*%V%8%'%/%H\e(B)
+@item user-renamed
+\e$B%f!<%6$,L>A0$rJQ99\e(B
+(\e$B0z?t$O!"0JA0$H8=:_$NL>A0$KAjEv$9$k\e(B @samp{riece-identity} \e$B%*%V%8%'%/%H\e(B)
+@item user-away-changed
+\e$B%f!<%6$NN%@J>uBV$NJQ2=\e(B
+(\e$B0z?t$O!"%f!<%6$KAjEv$9$k\e(B @samp{riece-identity} \e$B%*%V%8%'%/%H\e(B)
+@item user-operator-changed
+\e$B%f!<%6$N%*%Z%l!<%?>uBV$NJQ2=\e(B
+(\e$B0z?t$O!"%f!<%6$KAjEv$9$k\e(B @samp{riece-identity} \e$B%*%V%8%'%/%H\e(B)
+@item channel-topic-changed
+\e$B%A%c%s%M%k$N%H%T%C%/$NJQ2=\e(B
+(\e$B0z?t$O!"%A%c%s%M%k$KAjEv$9$k\e(B @samp{riece-identity} \e$B%*%V%8%'%/%H\e(B)
+@item channel-modes-changed
+\e$B%A%c%s%M%k$N%b!<%I$NJQ2=\e(B
+(\e$B0z?t$O!"%A%c%s%M%k$KAjEv$9$k\e(B @samp{riece-identity} \e$B%*%V%8%'%/%H\e(B)
+@item channel-operators-changed
+\e$B%A%c%s%M%k$G%*%Z%l!<%?8"8B$r;}$D%f!<%6$N0lMw$NJQ2=\e(B
+(\e$B0z?t$O!"%A%c%s%M%k$KAjEv$9$k\e(B @samp{riece-identity} \e$B%*%V%8%'%/%H\e(B)
+@item channel-speakers-changed
+\e$B%A%c%s%M%k$GH/8@8"$r;}$D%f!<%6$N0lMw$NJQ2=\e(B
+(\e$B0z?t$O!"%A%c%s%M%k$KAjEv$9$k\e(B @samp{riece-identity} \e$B%*%V%8%'%/%H\e(B)
+@item buffer-freeze-changed
+\e$B%P%C%U%!$NE`7k>uBV$NJQ2=\e(B
+(\e$B0z?t$O%P%C%U%!\e(B)
+@end table
+
+@node Writing add-ons, Handler hooks, Signals, Development
+@section Writing add-ons
+
+\e$B%"%I%*%s$N>r7o$rK~$?$9%b%8%e!<%k$O0J2<$N4X?t$rDs6!$7$^$9!#\e(B
+
+@table @samp
+@item <\e$B%b%8%e!<%kL>\e(B>-requires
+\e$B0MB8$9$kB>$N%"%I%*%s\e(B(\e$B%7%s%\%k$N%j%9%H\e(B)\e$B$rJV$7$^$9\e(B(\e$B%*%W%7%g%s\e(B)
+@item <\e$B%b%8%e!<%kL>\e(B>-insinuate
+\e$B=i4|2==hM}$r9T$$$^$9\e(B
+@end table
+
+\e$B$^$?!"%"%I%*%s$N@bL@$r!"JQ?t\e(B @samp{<\e$B%b%8%e!<%kL>\e(B>-description} \e$B$K@_Dj$9\e(B
+\e$B$k$3$H$b$G$-$^$9!#$3$NJ8;zNs$O\e(B @kbd{M-x riece-command-list-addons} \e$B$K$h\e(B
+\e$B$k%"%I%*%s$N0lMwI=<($K;H$o$l$^$9!#\e(B
+
+\e$BM-8z2=!&L58z2=$KBP1~$7$?%"%I%*%s$O!"JQ?t\e(B @samp{<\e$B%b%8%e!<%kL>\e(B>-enabled}
+\e$B$K8=:_$N>uBV$rJ];}$7$^$9!#CM$,\e(B @samp{nil} \e$B$G$"$l$PL58z!"\e(B@samp{t} \e$B$G$"$l\e(B
+\e$B$PM-8z$G$9!#2C$($F!"0J2<$N4X?t$rDs6!$7$^$9!#\e(B
+
+@table @samp
+@item <\e$B%b%8%e!<%kL>\e(B>-enable
+\e$B%"%I%*%s$rM-8z$K$7$^$9\e(B
+@item <\e$B%b%8%e!<%kL>\e(B>-disable
+\e$B%"%I%*%s$rL58z$K$7$^$9\e(B
+@end table
+
+Riece \e$B$O5/F0;~$K0J2<$N=hM}$r9T$$$^$9!#\e(B
+
+@enumerate
+@item
+\e$BJQ?t\e(B @code{riece-addons} \e$B$KNs5s$5$l$?%b%8%e!<%k$rFI$_9~$`\e(B
+
+@item
+\e$B$=$l$>$l$N%b%8%e!<%k$KBP$7!"\e(B@samp{<\e$B%b%8%e!<%kL>\e(B>-requires} \e$B$,MQ0U$5$l$F$$$l$P8F$S=P$7$F0MB8%0%i%U$r:n$k\e(B
+
+@item
+\e$B0MB8%0%i%U$KBP$7$F%H%]%m%8%+%k%=!<%H\e(B (cf. tsort(1)) \e$B$r9T$&\e(B
+
+@item
+\e$BF@$i$l$?0MB8=g=x$K=>$C$F\e(B @samp{<\e$B%b%8%e!<%kL>\e(B>-insinuate} \e$B8F$S=P$9\e(B
+
+@item
+\e$B$b$7!"%"%I%*%s$,M-8z2=!&L58z2=$KBP1~$7$F$*$j!"L@<(E*$KL58z2=$5$l$F$$$J$1$l$P!"\e(B
+@samp{<\e$B%b%8%e!<%kL>\e(B>-enable}\e$B$r8F$S=P$9!#\e(B
+@end enumerate
+
+\e$B:n@.$7$?%"%I%*%s$O!"\e(B@code{load-path} \e$B$NDL$C$?%G%#%l%/%H%j!"$^$?$O\e(B
+@code{riece-addon-directory} (\e$B%G%U%)%k%H$G$O\e(B @file{~/.riece/addons/}) \e$B$K\e(B
+\e$BCV$/$3$H$GAH$_9~$_2DG=$J>uBV$K$J$j$^$9!#\e(B
+@vindex riece-addon-directory
+
+@node Handler hooks, , Writing add-ons, Development
+@section Handler hooks
+
+Riece \e$B$K$O!"%O%s%I%i%U%C%/$H8F$P$l$kFC<l$J%U%C%/$,$"$j$^$9!#$3$l$i$O\e(B IRC
+\e$B$N%a%C%;!<%8$r<u$1<h$C$?A08e$G<B9T$5$l$k%U%C%/$G$9!#\e(B
+
+\e$B@bL@$N$?$a$K\e(B @samp{message} \e$B$r\e(B IRC \e$B$N%a%C%;!<%8L>\e(B(PRIVMSG \e$B$J$I\e(B)\e$B$rA4$F>.\e(B
+\e$BJ8;z$K$7$?$b$N$H$7$^$9!#\e(B
+
+@table @code
+@item riece-<message>-hook
+@samp{message} \e$B$,FO$$$?$H$-$K:G=i$K8F$P$l$k%U%C%/\e(B
+@item riece-after-<message>-hook
+@samp{message} \e$B$N=hM}$,=*$o$C$?8e$K8F$P$l$k%U%C%/\e(B
+@end table
+
+\e$B$3$3$G\e(B @code{riece-<message>-hook} \e$B$NJV$jCM$K$O0UL#$,$"$j!"Hs\e(B nil \e$B$rJV$9\e(B
+\e$B$b$N$,$"$l$P!"$=$N8e$N=hM}$r$*$3$J$$$^$;$s!#$^$?!"$=$N>l9g$K$O\e(B
+@code{riece-after-<message>-hook} \e$B$b8F$S=P$5$l$^$;$s!#\e(B
+
+\e$B%U%C%/$N0z?t$O\e(B RFC2812 \e$B$N\e(B @samp{prefix} \e$B$H\e(B @samp{Parameters} \e$B$KAjEv$9$k\e(B
+2 \e$B$D$N0z?t$,EO$j$^$9!#\e(B
+