Hum yeah it might take some time for the window to open, so I guess you could use the raw 321 as well (I made several test though, $window(channels list) always returns a value inside the list alias for me)
You are right for $1-, I rarely use the /list with parameters.
As for the status window, you can specify where you want the echo, echo -s will echo to the status window.
raw *:*:{
if ($istok(321 322 323,$numeric,32)) {
haltdef
if ($window(channels list)) window -h "channels list"
if ($numeric == 321) echo -s Listing channel..
elseif ($numeric == 322) echo -s $2 $chr(9) $3 $chr(9) $4-
else echo -s End of /list
}
}
alias list {
!list $1-
window -a "status window"
if ($window(channels list)) window -h "channels list"
}