changeset 32141:ad30e402b113

(fancy-splash-pending-command): New variable. (fancy-splash-pre-command): New function. (fancy-splash-screens): Rewritten. (command-line-1): If fancy-splash-pending-command is set, call it interactively.
author Gerd Moellmann <gerd@gnu.org>
date Wed, 04 Oct 2000 19:01:37 +0000
parents 6c61e0dbf542
children 7fc69e4d84b5
files lisp/startup.el
diffstat 1 files changed, 72 insertions(+), 48 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/startup.el	Wed Oct 04 19:00:10 2000 +0000
+++ b/lisp/startup.el	Wed Oct 04 19:01:37 2000 +0000
@@ -495,7 +495,7 @@
 	     (if purify-flag
 		 (garbage-collect))))
       (setq submap (cdr submap))))
-  (setq define-key-rebound-commands t))
+    (setq define-key-rebound-commands t))
 
 (defun command-line ()
   (setq command-line-default-directory default-directory)
@@ -998,40 +998,51 @@
   (throw 'exit nil))
 
 
+(defvar fancy-splash-pending-command nil
+  "If non-nil, a command to be executed after the splash screen display.")
+
+(defun fancy-splash-pre-command ()
+  (unless (memq this-command
+		'(ignore fancy-splash-default-action browse-url))
+    (setq fancy-splash-pending-command this-command)
+    (throw 'exit nil)))
+
+
 (defun fancy-splash-screens ()
   "Display fancy splash screens when Emacs starts."
-  (let ((old-buffer (current-buffer)))
-    (setq fancy-splash-help-echo (startup-echo-area-message))
-    (switch-to-buffer "GNU Emacs")
-    (let ((old-local-map (current-local-map))
-	  (old-global-map (current-global-map))
-	  (old-busy-cursor display-busy-cursor)
-	  (splash-buffer (current-buffer))
-	  (show-help-function nil)
-	  (fontification-functions nil)
-	  timer)
-      (unwind-protect
-	  (let ((map (make-sparse-keymap)))
-	    (setq map (nconc map '((t . fancy-splash-default-action))))
-	    (define-key map [mouse-movement] 'ignore)
-	    (define-key map [menu-bar] (lookup-key old-global-map [menu-bar]))
-	    (define-key map [tool-bar] (lookup-key old-global-map [tool-bar]))
-	    (use-global-map map)
-	    (use-local-map nil)
-	    (setq cursor-type nil
-		  display-busy-cursor nil
-		  mode-line-format
-		  (propertize "---- %b %-" 'face '(:weight bold)))
-	    (setq timer (run-with-timer 0 5 #'fancy-splash-screens-1
-					splash-buffer))
-	    (recursive-edit))
-	(use-local-map old-local-map)
-	(use-global-map old-global-map)
-	(cancel-timer timer)
-	(switch-to-buffer old-buffer)
-	(kill-buffer splash-buffer)
-	(erase-buffer)
-	(setq display-busy-cursor old-busy-cursor)))))
+  (setq fancy-splash-help-echo (startup-echo-area-message))
+  (switch-to-buffer "GNU Emacs")
+  (let ((old-global-map (current-global-map))
+	(old-busy-cursor display-busy-cursor)
+	(splash-buffer (current-buffer))
+	;; Don't update menu bindings in the following.  Since
+	;; C-x etc. are not bound in the map installed below,
+	;; there wouldn't be any bindings shown otherwise.
+	(update-menu-bindings nil)
+	timer)
+    (unwind-protect
+	(let ((map (nconc (make-sparse-keymap)
+			  '((t . fancy-splash-default-action))))
+	      (show-help-function nil))
+	  (use-global-map map)
+	  (use-local-map nil)
+	  (define-key map [mouse-movement] 'ignore)
+	  (define-key map [menu-bar] (lookup-key old-global-map [menu-bar]))
+	  (define-key map [tool-bar] (lookup-key old-global-map [tool-bar]))
+	  (setq cursor-type nil
+		display-busy-cursor nil
+		mode-line-format
+		(propertize "---- %b %-" 'face '(:weight bold))
+		timer (run-with-timer 0 5 #'fancy-splash-screens-1
+				      splash-buffer))
+	  (add-hook 'pre-command-hook 'fancy-splash-pre-command)
+	  (recursive-edit))
+      (trace-to-stderr "EXITTT\n")
+      (cancel-timer timer)
+      (remove-hook 'pre-command-hook 'fancy-splash-pre-command)
+      (use-global-map old-global-map)
+      (setq display-busy-cursor old-busy-cursor)
+      (kill-buffer splash-buffer))))
 
 
 (defun startup-echo-area-message ()
@@ -1093,19 +1104,22 @@
 	     ;; display the startup message; otherwise, the settings
 	     ;; won't take effect until the user gives the first
 	     ;; keystroke, and that's distracting.
-	     (if (fboundp 'frame-notice-user-settings)
-		 (frame-notice-user-settings))
+	     (when (fboundp 'frame-notice-user-settings)
+	       (frame-notice-user-settings))
 
-	     (and window-setup-hook
-		  (run-hooks 'window-setup-hook))
-	     (setq window-setup-hook nil)
+	     (when window-setup-hook
+	       (run-hooks 'window-setup-hook)
+	       (setq window-setup-hook nil))
+	     
+ 	     (when (memq window-system '(x w32))
+ 	       (precompute-menubar-bindings))
+ 	     (setq menubar-bindings-done t)
+	     
 	     ;; Do this now to avoid an annoying delay if the user
 	     ;; clicks the menu bar during the sit-for.
-	     (when (memq window-system '(x w32))
-	       (precompute-menubar-bindings))
-	     (setq menubar-bindings-done t)
 	     (when (= (buffer-size) 0)
-	       (let ((buffer-undo-list t))
+	       (let ((buffer-undo-list t)
+		     (wait-for-input t))
 		 (unwind-protect
 		     (when (not (input-pending-p))
 		       (goto-char (point-max))
@@ -1116,11 +1130,15 @@
 		       (if (eq system-type 'gnu/linux)
 			   (insert ", one component of a Linux-based GNU system."))
 		       (insert "\n")
+		       
 		       (if (assq 'display (frame-parameters))
+			   
 			   (if (or (and (display-color-p)
 					(image-type-available-p 'xpm))
 				   (image-type-available-p 'pbm))
-			       (fancy-splash-screens)
+			       (progn
+				 (setq wait-for-input nil)
+				 (fancy-splash-screens))
 			     (progn
 			       (insert "\
 You can do basic editing with the menu bar and scroll bar using the mouse.
@@ -1139,6 +1157,7 @@
 			       (insert "\n\n" (emacs-version)
 				       "
 Copyright (C) 2000 Free Software Foundation, Inc.")))
+			 
 			 ;; If keys have their default meanings,
 			 ;; use precomputed string to save lots of time.
 			 (if (and (eq (key-binding "\C-h") 'help-command)
@@ -1219,13 +1238,18 @@
 		       (goto-char (point-min))
 
 		       (set-buffer-modified-p nil)
-		       (sit-for 120)
-		       )
+		       (when wait-for-input
+			 (sit-for 120)))
+		   
 		   (with-current-buffer (get-buffer "*scratch*")
 		     (erase-buffer)
-		     (and initial-scratch-message
-			  (insert initial-scratch-message))
-		     (set-buffer-modified-p nil)))))))
+		     (when initial-scratch-message
+		       (insert initial-scratch-message))
+		     (set-buffer-modified-p nil))
+
+		   (when fancy-splash-pending-command
+		     (call-interactively fancy-splash-pending-command)))))))
+    
     ;; Delay 2 seconds after the init file error message
     ;; was displayed, so user can read it.
     (if init-file-had-error