branch: externals/devdocs commit a3177fde9ed48c1b1bc0a17f0e08338dc3f67e37 Author: Augusto Stoffel <arstof...@gmail.com> Commit: Augusto Stoffel <arstof...@gmail.com>
Add devdocs-peruse and previous/next page commands --- devdocs.el | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/devdocs.el b/devdocs.el index d922f9e..1baa003 100644 --- a/devdocs.el +++ b/devdocs.el @@ -264,8 +264,8 @@ This is an alist containing `entries', `pages' and `types'." (defvar devdocs-header-line '(:eval (let-alist (car devdocs--stack) (concat (devdocs--doc-title .doc) - devdocs-separator .type - devdocs-separator .name)))) + (and .type devdocs-separator) .type + (and .name devdocs-separator) .name)))) (define-derived-mode devdocs-mode special-mode "DevDocs" "Major mode for viewing DevDocs documents." @@ -316,12 +316,31 @@ with the order of appearance in the text." (interactive "p") (devdocs-next-entry (- count))) +(defun devdocs-next-page (count) + "Go forward COUNT pages in this document." + (interactive "p") + (let-alist (car devdocs--stack) + (let* ((pages (alist-get 'pages (devdocs--index .doc))) + (page (+ count (seq-position pages (devdocs--path-file .path)))) + (path (or (ignore-error 'args-out-of-range (seq-elt pages page)) + (user-error (if (< count 0) "No previous page" "No next page"))))) + (devdocs--render `((doc . ,.doc) + (path . ,path) + (name . ,(format "%s/%s" (1+ page) (length pages)))))))) + +(defun devdocs-previous-page (count) + "Go backward COUNT entries in this document." + (interactive "p") + (devdocs-next-page (- count))) + (let ((map devdocs-mode-map)) (define-key map [tab] 'forward-button) (define-key map [backtab] 'backward-button) (define-key map "i" 'devdocs-lookup) (define-key map "p" 'devdocs-previous-entry) (define-key map "n" 'devdocs-next-entry) + (define-key map "[" 'devdocs-previous-page) + (define-key map "]" 'devdocs-next-page) (define-key map "l" 'devdocs-go-back) (define-key map "r" 'devdocs-go-forward) (define-key map "." 'devdocs-goto-target)) @@ -496,6 +515,16 @@ If INITIAL-INPUT is not nil, insert it into the minibuffer." (devdocs-goto-target) (recenter 0)))) +;;;###autoload +(defun devdocs-peruse (doc) + "Read a document from the first page." + (interactive (list (devdocs--read-document "Peruse documentation: "))) + (let ((pages (alist-get 'pages (devdocs--index doc)))) + (pop-to-buffer + (devdocs--render `((path . ,(seq-first pages)) + (doc . ,doc) + (name . ,(format "%s/%s" 1 (length pages)))))))) + ;;; Compatibility with the old devdocs package ;;;###autoload