emacs-devel
[Top][All Lists]
Advanced

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

Re: momentary-string-display


From: Kevin Rodgers
Subject: Re: momentary-string-display
Date: Thu, 28 Dec 2006 21:47:15 -0700
User-agent: Thunderbird 1.5.0.9 (Macintosh/20061207)

Richard Stallman wrote:
It would be clean to make momentary-string-display use overlays
and not change the buffer text at all.  Would you like to try
writing that?  But let's not delay the release for it.

I'd like to try.  Note that I removed all the code that tries to
compensate for the text being inserted in such a way that its end or
start is not displayed in the selected window (under the assumption that
the display engine will DTRT with the overlay); but it should be
possible to restore that code, replacing the reference to message-end
with (+ pos (length string)).

I also added a small feature: a new face, used to display the text.


*** subr.el~    Thu Dec 11 09:37:00 2006
--- subr.el     Thu Dec 28 21:26:33 2006
***************
*** 1884,1889 ****
--- 1884,1894 ----
    (if all (save-excursion (set-buffer (other-buffer))))
    (set-buffer-modified-p (buffer-modified-p)))

+ (defface momentary
+   '((t (:inherit mode-line)))
+   "Face for momentarily displaying text in the current buffer."
+   :group 'display)
+
  (defun momentary-string-display (string pos &optional exit-char message)
    "Momentarily display STRING in the buffer at POS.
  Display remains until next event is input.
***************
*** 1894,1923 ****
  Display MESSAGE (optional fourth arg) in the echo area.
  If MESSAGE is nil, instructions to type EXIT-CHAR are displayed there."
    (or exit-char (setq exit-char ?\s))
!   (let ((inhibit-read-only t)
!       ;; Don't modify the undo list at all.
!       (buffer-undo-list t)
!       (modified (buffer-modified-p))
!       (name buffer-file-name)
!       insert-end)
      (unwind-protect
        (progn
!         (save-excursion
!           (goto-char pos)
!           ;; defeat file locking... don't try this at home, kids!
!           (setq buffer-file-name nil)
!           (insert-before-markers string)
!           (setq insert-end (point))
!           ;; If the message end is off screen, recenter now.
!           (if (< (window-end nil t) insert-end)
!               (recenter (/ (window-height) 2)))
!           ;; If that pushed message start off the screen,
!           ;; scroll to start it at the top of the screen.
!           (move-to-window-line 0)
!           (if (> (point) pos)
!               (progn
!                 (goto-char pos)
!                 (recenter 0))))
          (message (or message "Type %s to continue editing.")
                   (single-key-description exit-char))
          (let (char)
--- 1899,1909 ----
  Display MESSAGE (optional fourth arg) in the echo area.
  If MESSAGE is nil, instructions to type EXIT-CHAR are displayed there."
    (or exit-char (setq exit-char ?\s))
!   (let ((momentary-overlay (make-overlay pos pos nil t)))
      (unwind-protect
        (progn
!         (overlay-put momentary-overlay 'before-string
!                      (propertize string 'face 'momentary))
          (message (or message "Type %s to continue editing.")
                   (single-key-description exit-char))
          (let (char)
***************
*** 1937,1947 ****
              (or (eq char exit-char)
                  (eq char (event-convert-list exit-char))
                  (setq unread-command-events (list char))))))
!       (if insert-end
!         (save-excursion
!           (delete-region pos insert-end)))
!       (setq buffer-file-name name)
!       (set-buffer-modified-p modified))))

  
  ;;;; Overlay operations
--- 1923,1930 ----
              (or (eq char exit-char)
                  (eq char (event-convert-list exit-char))
                  (setq unread-command-events (list char))))))
!       (when (overlay-get momentary-overlay 'before-string)
!       (delete-overlay momentary-overlay)))))

  
  ;;;; Overlay operations


--
Kevin Rodgers
Denver, Colorado, USA





reply via email to

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