Sorry, ignore my first post, I found a bug (return of ":" I didn't consider), and also forgot to replace $me with %who on the two $comchan()'s, still a good reference for the comments. I also reduced the double regex, while it was shorter character wise, it felt wasteful to use the 2nd just to reference $comchan() as \1 for the 3 spots...

Code
alias idl {
  var %who = $1 , %ret = $regsubex($str($chr(32),$calc($comchan(%who,0) -1)),//g,$+($nick($comchan(%who,\n),%who).idle,:,$left($nick($comchan(%who,\n),%who,a,r).pnick,1),$comchan(%who,\n)))

  ;== If $str(<space>,-1) (IE no common channels) we wind up with ONE zero-width spot (since $str() returned $null), which has no idle and no channel name so you wind up getting a return of ":", reset the var to null.
  if (%ret == :) { var %ret = $null }

  if ($query(%who)) { var %ret = %ret $+($query(%who).idle,:Query) }
  if ($chat(%who)) { var %ret = %ret $+($chat(%who).idle,:Chat) }

  var %ret = $regsubex($sorttok(%ret,32,n),/(\d+)\x3a([^ ]+|$)/g,$+(\2,[,$dur(\1),]))

  $iif($isid,return,echo -a) %ret
}
alias dur { return $regsubex(dur,$duration($1),/([a-z]+|\s)/gi,$iif(\1 != $chr(32),$left(\1,1))) }

/idl Talon
%#swiftirc[23m34s] +#minecraft[40m54s] Query[58m49s] #programming[59m59s]

/idl Dragon
@#swiftirc[15m3s] ~#programming[36m30s] ~#minecraft[36m30s]