;;; show-old-window-pos.el --- Show old window position in buffer after changes. ;; Version: 2 (defgroup show-old-window-pos nil "Indicate the old window position for a bit when scrolling." :version "23.1" :group 'windows) (defface show-old-window-pos-fringe '((t (:foreground "cyan"))) "Face for old window position fringe mark." :group 'show-old-window-pos :version "23.1") (defcustom show-old-window-pos-linger-time 2 "How long the fringe marks showing old window position should be visible for." :type 'integer :group 'show-old-window-pos :version "23.1") (defvar show-old-window-pos-overlay nil) (defun show-old-window-pos-overlay-update-pos () (or show-old-window-pos-overlay (setq show-old-window-pos-overlay (make-overlay (window-start) (- (window-end) 1) (window-buffer)))) (move-overlay show-old-window-pos-overlay (window-start) (- (window-end) 1) (window-buffer)) (show-old-window-pos-overlay-showhide) (redisplay)) (defun show-old-window-pos-overlay-showhide () (when show-old-window-pos-overlay (if (equal (window-start) (overlay-start show-old-window-pos-overlay)) (overlay-put show-old-window-pos-overlay 'before-string nil) (overlay-put show-old-window-pos-overlay 'before-string (concat (propertize "[" 'display (list 'left-fringe 'top-left-angle 'show-old-window-pos-fringe)) (propertize "[" 'display (list 'right-fringe 'top-right-angle 'show-old-window-pos-fringe))))) (if (equal (- (window-end) 1) (overlay-end show-old-window-pos-overlay)) (overlay-put show-old-window-pos-overlay 'after-string nil) (overlay-put show-old-window-pos-overlay 'after-string (concat (propertize "]" 'display (list 'left-fringe 'bottom-left-angle 'show-old-window-pos-fringe)) (propertize "]" 'display (list 'right-fringe 'bottom-right-angle 'show-old-window-pos-fringe))))))) (define-minor-mode show-old-window-pos-mode "Toggle show-old-window-pos-mode" :global t :group 'show-old-window-pos :init-value nil (if show-old-window-pos-mode (progn (run-with-idle-timer 0 t 'show-old-window-pos-overlay-showhide) (run-with-idle-timer show-old-window-pos-linger-time t 'show-old-window-pos-overlay-update-pos)) (cancel-function-timers 'show-old-window-pos-overlay-showhide) (cancel-function-timers 'show-old-window-pos-overlay-update-pos) (and show-old-window-pos-overlay (delete-overlay show-old-window-pos-overlay)))) (provide 'show-old-window-pos)