Index: trac/wiki/formatter.py
===================================================================
--- trac/wiki/formatter.py	(revision 4232)
+++ trac/wiki/formatter.py	(working copy)
@@ -230,10 +230,11 @@
     _processor_re = re.compile('#\!([\w+-][\w+-/]*)')
     _anchor_re = re.compile('[^\w:.-]+', re.UNICODE)
 
-    def __init__(self, env, req=None, absurls=False, db=None):
+    def __init__(self, env, req=None, absurls=False, db=None, itemurl=None):
         self.env = env
         self.req = req
         self._db = db
+        self._itemurl = itemurl
         self._absurls = absurls
         self._anchors = {}
         self._open_tags = []
@@ -428,6 +429,8 @@
     def _make_relative_link(self, url, text):
         if url.startswith('//'): # only the protocol will be kept
             return html.A(text, class_="ext-link", href=url)
+        elif self._itemurl and url and url[0] in "#.": # hash ref
+            return html.A(text, href=self._itemurl+url)
         else:
             return html.A(text, href=url)
 
@@ -861,8 +864,8 @@
     """
     flavor = 'oneliner'
 
-    def __init__(self, env, absurls=False, db=None, req=None):
-        Formatter.__init__(self, env, req, absurls, db)
+    def __init__(self, env, absurls=False, db=None, req=None, itemurl=None):
+        Formatter.__init__(self, env, req, absurls, db, itemurl)
 
     # Override a few formatters to disable some wiki syntax in "oneliner"-mode
     def _list_formatter(self, match, fullmatch): return match
@@ -998,19 +1001,19 @@
 # -- wiki_to_* helper functions
 
 def wiki_to_html(wikitext, env, req, db=None,
-                 absurls=False, escape_newlines=False):
+                 absurls=False, escape_newlines=False, itemurl=None):
     if not wikitext:
         return Markup()
     out = StringIO()
-    Formatter(env, req, absurls, db).format(wikitext, out, escape_newlines)
+    Formatter(env, req, absurls, db, itemurl=itemurl).format(wikitext, out, escape_newlines)
     return Markup(out.getvalue())
 
 def wiki_to_oneliner(wikitext, env, db=None, shorten=False, absurls=False,
-                     req=None):
+                     req=None, itemurl=None):
     if not wikitext:
         return Markup()
     out = StringIO()
-    OneLinerFormatter(env, absurls, db, req=req).format(wikitext, out, shorten)
+    OneLinerFormatter(env, absurls, db, itemurl=itemurl, req=req).format(wikitext, out, shorten)
     return Markup(out.getvalue())
 
 def wiki_to_outline(wikitext, env, db=None,
Index: templates/timeline.html
===================================================================
--- templates/timeline.html	(revision 4232)
+++ templates/timeline.html	(working copy)
@@ -42,7 +42,7 @@
             </a></dt>
             <dd class="${event.kind}" py:with="wikify = event.use_oneliner and wiki_to_oneliner or wiki_to_html">
               ${event.markup}
-              <py:if test="event.message">${wikify(event.message)}</py:if>
+              <py:if test="event.message">${wikify(event.message, itemurl=event.href)}</py:if>
             </dd>
           </py:for>
         </dl>

