Xchat and other IRC clients have an option to display a bar delimiting the read and unread messages. Here is one implementation for ERC :
(eval-after-load 'erc-track
'(progn
(defun erc-bar-move-back (n)
"Moves back n message lines. Ignores wrapping, and server messages."
(interactive "nHow many lines ? ")
(re-search-backward "^.*<.*>" nil t n))
(defun erc-bar-update-overlay ()
"Update the overlay for current buffer, based on the content of
erc-modified-channels-alist. Should be executed on window change."
(interactive)
(let* ((info (assq (current-buffer) erc-modified-channels-alist))
(count (cadr info)))
(if (and info (> count erc-bar-threshold))
(save-excursion
(end-of-buffer)
(when (erc-bar-move-back count)
(let ((inhibit-field-text-motion t))
(move-overlay erc-bar-overlay
(line-beginning-position)
(line-end-position)
(current-buffer)))))
(delete-overlay erc-bar-overlay))))
(defvar erc-bar-threshold 1
"Display bar when there are more than erc-bar-threshold unread messages.")
(defvar erc-bar-overlay nil
"Overlay used to set bar")
(setq erc-bar-overlay (make-overlay 0 0))
(overlay-put erc-bar-overlay 'face '(:underline "black"))
;;put the hook before erc-modified-channels-update
(defadvice erc-track-mode (after erc-bar-setup-hook
(&rest args) activate)
;;remove and add, so we know it's in the first place
(remove-hook 'window-configuration-change-hook 'erc-bar-update-overlay)
(add-hook 'window-configuration-change-hook 'erc-bar-update-overlay))
(add-hook 'erc-send-completed-hook (lambda (str)
(erc-bar-update-overlay)))))
Beta code, feel free to change it. Contact at smeuuh at themailfromgoogle dot com