diff options
author | Sean Allred <code@seanallred.com> | 2014-11-26 08:24:23 -0500 |
---|---|---|
committer | Sean Allred <code@seanallred.com> | 2014-11-26 08:24:23 -0500 |
commit | 8cbc523812a069b82048f3a4bad088682913274c (patch) | |
tree | 3cc2587b05ff0eb9fca5a71e33120f20fe0b7d91 | |
parent | 5df6ffd2874dca9c5e0bdbe55ac112e1d4612da5 (diff) | |
parent | a104916864ab053fff81dcdcba71e6b8af219913 (diff) |
Merge pull request #104 from vermiculus/preseve-position-on-refresh
Preseve position on refresh
-rw-r--r-- | sx-question-list.el | 24 | ||||
-rw-r--r-- | sx-question-mode.el | 10 |
2 files changed, 22 insertions, 12 deletions
diff --git a/sx-question-list.el b/sx-question-list.el index 2965ede..fbed4ea 100644 --- a/sx-question-list.el +++ b/sx-question-list.el @@ -371,19 +371,25 @@ a new list before redisplaying." (setq sx-question-list--unread-count 0) (unless no-update (setq sx-question-list--pages-so-far 1)) - (let ((question-list - (or (and no-update sx-question-list--dataset) - (and (functionp sx-question-list--refresh-function) - (funcall sx-question-list--refresh-function)) - (and (functionp sx-question-list--next-page-function) - (funcall sx-question-list--next-page-function 1)) - sx-question-list--dataset))) + (let* ((question-list + (or (and no-update sx-question-list--dataset) + (and (functionp sx-question-list--refresh-function) + (funcall sx-question-list--refresh-function)) + (and (functionp sx-question-list--next-page-function) + (funcall sx-question-list--next-page-function 1)) + sx-question-list--dataset)) + ;; Preserve window positioning. + (window (get-buffer-window (current-buffer))) + (old-start (when window (window-start window)))) (setq sx-question-list--dataset question-list) ;; Print the result. (setq tabulated-list-entries (mapcar sx-question-list--print-function - (cl-remove-if #'sx-question--hidden-p question-list)))) - (when redisplay (tabulated-list-print 'remember))) + (cl-remove-if #'sx-question--hidden-p question-list))) + (when redisplay (tabulated-list-print 'remember)) + (when window + (set-window-start window old-start))) + (sx-message "Done.")) (defcustom sx-question-list-ago-string " ago" "String appended to descriptions of the time since something happened. diff --git a/sx-question-mode.el b/sx-question-mode.el index 70b8866..b2f4604 100644 --- a/sx-question-mode.el +++ b/sx-question-mode.el @@ -595,15 +595,19 @@ With non-nil prefix argument NO-UPDATE, just redisplay, don't query the api." (interactive "P") (sx-question-mode--ensure-mode) - (let ((point (point))) + (let ((point (point)) + (line (count-screen-lines + (window-start) (point)))) (sx-question-mode--erase-and-print-question (if no-update sx-question-mode--data (sx-assoc-let sx-question-mode--data (sx-question-get-question .site .question_id)))) (goto-char point) - (when (get-buffer-window (current-buffer)) - (recenter)))) + (when (equal (selected-window) + (get-buffer-window (current-buffer))) + (recenter line))) + (sx-message "Done.")) (defun sx-question-mode--ensure-mode () "Ensures we are in question mode, erroring otherwise." |