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))
(unless (eq index nil)
(if next
(cl-decf index)
(cl-incf index)))
(cl-incf index)
(cl-decf index)))
;; Try to find the position register closest to point.
(dolist (register register-list)
(when (register-quicknav--is-current-buffer? register)
(let ((register-pos (register-quicknav--position register)))
(if next
(when (<= register-pos (point))
(setq index (cl-position register register-list)))
(when (and (not stop-searching) (>= register-pos (point)))
(setq index (cl-position register register-list)
stop-searching t))))))
(when (and (not stop-searching) (> register-pos (point)))
(setq index (cl-position register register-list)
stop-searching t))
(when (< register-pos (point))
(setq index (cl-position register register-list)))))))
;; If an index was found, set it to the next/previous register. If not, set
;; it to the first/last.
(if index
(progn
(when (> index (- (length register-list) 1))
(when (or (> index (- (length register-list) 1)) (< index 0))
(setq index nil))
(if next
(progn
(if (or (eq index nil) (eq index (- (length register-list) 1)))
(setq index 0)
(cl-incf index)))
(if (or (eq index nil) (eq index 0))
(setq index (- (length register-list) 1))
(cl-decf index)))
(if (or (eq index nil) (eq index (length register-list)))
(setq index 0)))
(if (or (eq index nil))
(setq index (- (length register-list) 1))))
(register-to-point (car (nth index register-list)))
(register-quicknav--last-register (nth index register-list)))
(register-to-point (car (car register-list)))