+;; History page retrieval
+
+(defun elpher-history ()
+ "Show the history of pages leading to the current page
+in this buffer. Use \\[elpher-history-all] to see the entire history.
+This is rendered using `elpher-get-history-page' via `elpher-type-map'."
+ (interactive)
+ (elpher-visit-page
+ (elpher-make-page "Elpher History Page"
+ (elpher-make-special-address 'history))))
+
+(defun elpher-history-all ()
+ "Show the all the pages you've visited using Elpher.
+Use \\[elpher-history] to see just the history for the current buffer.
+This is rendered using `elpher-get-history-all-page' via `elpher-type-map'."
+ (interactive)
+ (elpher-visit-page
+ (elpher-make-page "Elpher History Of All Seen Pages"
+ (elpher-make-special-address 'history-all))))
+
+(defun elpher-get-history-page (renderer)
+ "Getter which displays the history page (RENDERER must be nil)."
+ (when renderer
+ (elpher-visit-previous-page)
+ (error "Command not supported for history page"))
+ (elpher-show-history elpher-history))
+
+(defun elpher-get-history-all-page (renderer)
+ "Getter which displays the history page (RENDERER must be nil)."
+ (when renderer
+ (elpher-visit-previous-page)
+ (error "Command not supported for history page"))
+ (elpher-show-history elpher-history-all))
+
+(defun elpher-show-history (pages)
+ "Show all PAGES in the Elpher buffer."
+ (elpher-with-clean-buffer
+ (if pages
+ (dolist (page pages)
+ (when page
+ (let ((display-string (elpher-page-display-string page))
+ (address (elpher-page-address page)))
+ (elpher-insert-index-record display-string address))))
+ (insert "No history items found.\n"))))
+