Actually search for next/previous register nearest to pos.

Simplified the logic, fixes the bug where you couldn't jump to the first
register from the start of the document or the last register from the end.
This commit is contained in:
tastytea 2020-03-08 05:01:53 +01:00
parent 4f9866fa85
commit 361b2c697a
Signed by: tastytea
GPG Key ID: CFC39497F1B26E07
1 changed files with 12 additions and 14 deletions

View File

@ -153,34 +153,32 @@ Works on markers and file-queries."
(stop-searching)) (stop-searching))
(unless (eq index nil) (unless (eq index nil)
(if next (if next
(cl-decf index) (cl-incf index)
(cl-incf index))) (cl-decf index)))
;; Try to find the position register closest to point. ;; Try to find the position register closest to point.
(dolist (register register-list) (dolist (register register-list)
(when (register-quicknav--is-current-buffer? register) (when (register-quicknav--is-current-buffer? register)
(let ((register-pos (register-quicknav--position register))) (let ((register-pos (register-quicknav--position register)))
(if next (if next
(when (<= register-pos (point)) (when (and (not stop-searching) (> register-pos (point)))
(setq index (cl-position register register-list))) (setq index (cl-position register register-list)
(when (and (not stop-searching) (>= register-pos (point))) stop-searching t))
(setq index (cl-position register register-list) (when (< register-pos (point))
stop-searching t)))))) (setq index (cl-position register register-list)))))))
;; If an index was found, set it to the next/previous register. If not, set ;; If an index was found, set it to the next/previous register. If not, set
;; it to the first/last. ;; it to the first/last.
(if index (if index
(progn (progn
(when (> index (- (length register-list) 1)) (when (or (> index (- (length register-list) 1)) (< index 0))
(setq index nil)) (setq index nil))
(if next (if next
(progn (progn
(if (or (eq index nil) (eq index (- (length register-list) 1))) (if (or (eq index nil) (eq index (length register-list)))
(setq index 0) (setq index 0)))
(cl-incf index))) (if (or (eq index nil))
(if (or (eq index nil) (eq index 0)) (setq index (- (length register-list) 1))))
(setq index (- (length register-list) 1))
(cl-decf index)))
(register-to-point (car (nth index register-list))) (register-to-point (car (nth index register-list)))
(register-quicknav--last-register (nth index register-list))) (register-quicknav--last-register (nth index register-list)))
(register-to-point (car (car register-list))) (register-to-point (car (car register-list)))