unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Kevin Rodgers <kevin.d.rodgers@gmail.com>
Subject: Re: momentary-string-display
Date: Thu, 28 Dec 2006 21:47:15 -0700	[thread overview]
Message-ID: <en26kh$f0e$1@sea.gmane.org> (raw)
In-Reply-To: <E1Gzg8n-0002hy-4X@fencepost.gnu.org>

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))))

   \f
   ;;;; 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)))))

   \f
   ;;;; Overlay operations


-- 
Kevin Rodgers
Denver, Colorado, USA

  parent reply	other threads:[~2006-12-29  4:47 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-27  1:18 momentary-string-display Juanma Barranquero
2006-12-27 21:16 ` momentary-string-display Richard Stallman
2006-12-27 23:53   ` momentary-string-display Juanma Barranquero
2006-12-29 15:44     ` momentary-string-display Richard Stallman
2007-01-02 23:58       ` momentary-string-display Juanma Barranquero
2006-12-29  4:47   ` Kevin Rodgers [this message]
2006-12-29 22:58     ` momentary-string-display Richard Stallman
2007-01-03  8:53       ` momentary-string-display Kevin Rodgers
2007-01-04  1:41         ` momentary-string-display Stephen Leake
2007-01-04  2:31         ` momentary-string-display Richard Stallman
2007-01-04 15:31           ` momentary-string-display Kevin Rodgers
2007-01-04 22:34             ` momentary-string-display Richard Stallman
2007-01-04 23:18               ` momentary-string-display Juanma Barranquero
2007-01-05 19:09                 ` momentary-string-display Richard Stallman
2007-01-05  7:05               ` momentary-string-display Stephen Leake
2007-01-06  2:54                 ` momentary-string-display Richard Stallman
2007-01-06  7:36                   ` momentary-string-display Stephen Leake
2007-01-07  3:47                     ` momentary-string-display Richard Stallman
2007-01-07 14:41                       ` momentary-string-display Stephen Leake
2007-01-02 22:54   ` momentary-string-display Tak Ota
2007-01-03 21:11     ` momentary-string-display Richard Stallman
2007-01-03 21:36       ` momentary-string-display Tak Ota

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='en26kh$f0e$1@sea.gmane.org' \
    --to=kevin.d.rodgers@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).