Just got around to trying this. Same code works in 2.0.x. I ended up doing the template like this:
function template_main()
{
global $context, $settings, $options, $txt, $scripturl, $modSettings, $user_info;
echo '
<div id="recent" class="main_section">
<a id="top"></a>
<div class="pagelinks">', $context['page_index'], '</div>
<div class="cat_bar">
<h3 class="catbg">
<img src="', $settings['images_url'], '/post/xx.gif" alt="" class="icon" />',$txt['recent_posts'],'
</h3>
</div>';
foreach ($context['posts'] as $post)
{
echo '
<div class="', $post['alternate'] == 0 ? 'windowbg' : 'windowbg2', ' core_posts">
<span class="topslice"></span>
<div class="content">
<div class="counter">', $post['counter'], '</div>
<div class="topic_details">
<h5>', $post['board']['link'], ' / ', $post['link'], '</h5>';
if (in_array($post['poster']['id'], $user_info['ignoreusers']))
{
echo '
<span class="smalltext">« ', $txt['ignoring_user'], ' »</span>
</div>
</div>';
}
else
{
echo '
<span class="smalltext">« ', $txt['last_post'], ' ', $txt['by'], ' <strong>', $post['poster']['link'], ' </strong> ', $txt['on'], '<em> ', $post['time'], '</em> »</span>
After which it's just the standard 2.0.x code. It's quite tidy. I don't think it needs anything else (js bits to show posts, etc). The link to the post is still available, if anyone really wants to torture themselves and start a flame war with someone they can't stand.