Mercurial > emacs
changeset 74891:181210a9cef5
(fancy-splash-last-input-event): New variable.
(fancy-splash-special-event-action): New function.
(fancy-splash-screens): Temporarily bind special events to it.
Execute command for saved special event before exiting from
recursive editing.
author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
---|---|
date | Mon, 25 Dec 2006 08:18:09 +0000 |
parents | 3c0aa07a07ec |
children | b064bb685ef7 |
files | lisp/startup.el |
diffstat | 1 files changed, 33 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/startup.el Mon Dec 25 01:08:43 2006 +0000 +++ b/lisp/startup.el Mon Dec 25 08:18:09 2006 +0000 @@ -1205,6 +1205,7 @@ (defvar fancy-splash-help-echo nil) (defvar fancy-splash-stop-time nil) (defvar fancy-splash-outer-buffer nil) +(defvar fancy-splash-last-input-event nil) (defun fancy-splash-insert (&rest args) "Insert text into the current buffer, with faces. @@ -1359,6 +1360,14 @@ (push last-command-event unread-command-events)) (throw 'exit nil)) +(defun fancy-splash-special-event-action () + "Save the last event and stop displaying the splash screen buffer. +This is an internal function used to turn off the splash screen after +the user caused an input event that is bound in `special-event-map'" + (interactive) + (setq fancy-splash-last-input-event last-input-event) + (throw 'exit nil)) + (defun fancy-splash-screens (&optional hide-on-input) "Display fancy splash screens when Emacs starts." @@ -1368,6 +1377,7 @@ splash-buffer (old-minor-mode-map-alist minor-mode-map-alist) (old-emulation-mode-map-alists emulation-mode-map-alists) + (old-special-event-map special-event-map) (frame (fancy-splash-frame)) timer) (save-selected-window @@ -1383,6 +1393,20 @@ (define-key map [t] 'fancy-splash-default-action) (define-key map [mouse-movement] 'ignore) (define-key map [mode-line t] 'ignore) + ;; Temporarily bind special events to + ;; fancy-splash-special-event-action so as to stop + ;; displaying splash screens with such events. + ;; Otherwise, drag-n-drop into splash screens may + ;; leave us in recursive editing with invisible + ;; cursors for a while. + (setq special-event-map (make-sparse-keymap)) + (map-keymap + (lambda (key def) + (define-key special-event-map (vector key) + (if (eq def 'ignore) + 'ignore + 'fancy-splash-special-event-action))) + old-special-event-map) (setq display-hourglass nil minor-mode-map-alist nil emulation-mode-map-alists nil @@ -1399,8 +1423,15 @@ (cancel-timer timer) (setq display-hourglass old-hourglass minor-mode-map-alist old-minor-mode-map-alist - emulation-mode-map-alists old-emulation-mode-map-alists) - (kill-buffer splash-buffer))))) + emulation-mode-map-alists old-emulation-mode-map-alists + special-event-map old-special-event-map) + (kill-buffer splash-buffer) + (when fancy-splash-last-input-event + (setq last-input-event fancy-splash-last-input-event + fancy-splash-last-input-event nil) + (command-execute (lookup-key special-event-map + (vector last-input-event)) + nil (vector last-input-event) t)))))) ;; If hide-on-input is nil, don't hide the buffer on input. (if (or (window-minibuffer-p) (window-dedicated-p (selected-window)))