help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: overlays and movement


From: Manuel Giraud
Subject: Re: overlays and movement
Date: Tue, 28 Jun 2022 17:56:38 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (berkeley-unix)

Hi,

FWIW, here is what I wanted to do. It is not super fast but quite
usable.
--8<---------------cut here---------------start------------->8---
;; Fog
(defvar up-fog nil)
(defvar down-fog nil)
(defvar fog-distance 10)

(defun up-fog-end ()
  (save-excursion
    (if (zerop (forward-line (- (+ fog-distance 1))))
        (progn (end-of-line)
               (point))
      (point-min))))

(defun down-fog-start ()
  (save-excursion
    (forward-line (+ fog-distance 1))
    (beginning-of-line)
    (point)))

(defface fog
  '((t :foreground "grey90" :background "grey95"))
  "Fog face.")

(defun maybe-move-fog ()
  (while-no-input
    (redisplay)
    (let ((new-end (up-fog-end))
          (new-start (down-fog-start)))
      (when (or (/= (overlay-end up-fog) new-end)
                (/= (overlay-start down-fog) new-start))
        (move-overlay up-fog (point-min) new-end)
        (move-overlay down-fog new-start (point-max))))))

(defun fog-on ()
  (maybe-move-fog)
  (overlay-put up-fog 'face 'fog)
  (overlay-put down-fog 'face 'fog))

(defun fog-off ()
  (overlay-put up-fog 'face nil)
  (overlay-put down-fog 'face nil))

(define-minor-mode fog-mode
  "Minor fog mode"
  :lighter " fog"
  (if fog-mode
      (progn
        (setq up-fog (make-overlay 1 1)
              down-fog (make-overlay 1 1))
        (fog-on)
        (add-hook 'post-command-hook 'maybe-move-fog 0 t))
    (fog-off)
    (remove-hook 'post-command-hook 'maybe-move-fog t)
    (delete-overlay up-fog)
    (delete-overlay down-fog)
    (setq up-fog nil down-fog nil)))
--8<---------------cut here---------------end--------------->8---
-- 
Manuel Giraud



reply via email to

[Prev in Thread] Current Thread [Next in Thread]