branch: externals/bufferlo commit e6514ae63177ef4e93c22281ddcf32c313cd8791 Author: shipmints <shipmi...@gmail.com> Commit: shipmints <shipmi...@gmail.com>
Reduce visual flashing on frame restoration, subsequent resizing, and buffer list setting. --- bufferlo.el | 80 +++++++++++++++++++++++++++++++------------------------------ 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/bufferlo.el b/bufferlo.el index c83a77111f..2e90424728 100644 --- a/bufferlo.el +++ b/bufferlo.el @@ -1920,45 +1920,47 @@ the message after successfully restoring the bookmark." (setq frameset (car (read-from-string frameset-str))) (if (not (frameset-valid-p frameset)) (message "Bufferlo session bookmark %s: invalid frameset" bookmark-name) - (let ((default-frame-alist) - (inhibit-redisplay nil)) ; prevent blinking and redisplay costs REVIEW: buffer loading progress messages will be inhibited and perhaps prompts? - (when (ignore-errors - (frameset-restore frameset - :filters - (when (memq bufferlo-frameset-restore-geometry '(bufferlo nil)) - (let ((filtered-alist (copy-tree frameset-persistent-filter-alist))) - (mapc (lambda (sym) (setf (alist-get sym filtered-alist) :never)) - (seq-union bufferlo--frameset-restore-filter bufferlo-frameset-restore-filter)) - filtered-alist)) - :reuse-frames nil - :force-display t - :force-onscreen (display-graphic-p) - :cleanup-frames nil) - t) - (dolist (frame (frame-list)) - (with-selected-frame frame - (when (frame-parameter nil 'bufferlo--frame-to-restore) - (when-let (fbm-name (frame-parameter nil 'bufferlo-bookmark-frame-name)) - (let ((bufferlo-bookmark-frame-load-make-frame nil) - (bufferlo-bookmark-frame-duplicate-policy 'allow) - (bufferlo-bookmark-frame-load-policy 'replace-frame-adopt-loaded-bookmark) - (bufferlo--bookmark-handler-no-message t)) - (bookmark-jump fbm-name #'ignore)) - (when (and - (display-graphic-p frame) - (eq bufferlo-frameset-restore-geometry 'bufferlo)) - (set-frame-position nil - (frame-parameter nil 'bufferlo--frame-left) - (frame-parameter nil 'bufferlo--frame-top)) - (set-frame-size nil - (frame-parameter nil 'bufferlo--frame-pixel-width) - (frame-parameter nil 'bufferlo--frame-pixel-height) - 'pixelwise)) - (set-frame-parameter nil 'bufferlo--frame-to-restore nil)) - (raise-frame frame)))))) - (unless (or no-message bufferlo--bookmark-handler-no-message) - (message "Restored bufferlo session bookmark %s %s" - bookmark-name bufferlo-bookmark-names)))))))) + (when (ignore-errors + (with-temp-buffer + (let ((default-frame-alist) + (inhibit-redisplay t)) + (frameset-restore frameset + :filters + (when (memq bufferlo-frameset-restore-geometry '(bufferlo nil)) + (let ((filtered-alist (copy-tree frameset-persistent-filter-alist))) + (mapc (lambda (sym) (setf (alist-get sym filtered-alist) :never)) + (seq-union bufferlo--frameset-restore-filter bufferlo-frameset-restore-filter)) + filtered-alist)) + :reuse-frames nil + :force-display t + :force-onscreen (display-graphic-p) + :cleanup-frames nil))) + t) + (dolist (frame (frame-list)) + (with-selected-frame frame + (when (frame-parameter nil 'bufferlo--frame-to-restore) + (lower-frame) ; attempt to reduce visual flashing + (when-let (fbm-name (frame-parameter nil 'bufferlo-bookmark-frame-name)) + (let ((bufferlo-bookmark-frame-load-make-frame nil) + (bufferlo-bookmark-frame-duplicate-policy 'allow) + (bufferlo-bookmark-frame-load-policy 'replace-frame-adopt-loaded-bookmark) + (bufferlo--bookmark-handler-no-message t)) + (bookmark-jump fbm-name #'ignore)) + (when (and + (display-graphic-p frame) + (eq bufferlo-frameset-restore-geometry 'bufferlo)) + (set-frame-position nil + (frame-parameter nil 'bufferlo--frame-left) + (frame-parameter nil 'bufferlo--frame-top)) + (set-frame-size nil + (frame-parameter nil 'bufferlo--frame-pixel-width) + (frame-parameter nil 'bufferlo--frame-pixel-height) + 'pixelwise)) + (set-frame-parameter nil 'bufferlo--frame-to-restore nil)) + (raise-frame)))))) + (unless (or no-message bufferlo--bookmark-handler-no-message) + (message "Restored bufferlo session bookmark %s %s" + bookmark-name bufferlo-bookmark-names))))))) (put #'bufferlo--bookmark-session-handler 'bookmark-handler-type "B-Sess") ; short name here as bookmark-bmenu-list hard codes width of 8 chars