mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-27 07:37:33 +00:00
(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.
This commit is contained in:
parent
92ad3e9f49
commit
d3f4ab736a
@ -1205,6 +1205,7 @@ Values less than twice `fancy-splash-delay' are ignored."
|
||||
(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 @@ mouse."
|
||||
(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 @@ mouse."
|
||||
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 @@ mouse."
|
||||
(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 @@ mouse."
|
||||
(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)))
|
||||
|
Loading…
Reference in New Issue
Block a user