Commit db87b14e authored by Glenn Morris's avatar Glenn Morris

* lisp/desktop.el: If modes aren't autoloaded, try simple guesswork.

(desktop-load-file): Guess that "foobar" defines "foobar-mode".
(desktop-buffer-mode-handlers, desktop-minor-mode-handlers):
Doc updates.
(vc-dir-mode): Remove unnecessary autoload.

; Ref: http://debbugs.gnu.org/19226#14
parent 816a2b36
...@@ -83,8 +83,10 @@ ...@@ -83,8 +83,10 @@
;; (add-to-list 'desktop-minor-mode-handlers ;; (add-to-list 'desktop-minor-mode-handlers
;; '(bar-mode . bar-desktop-restore)) ;; '(bar-mode . bar-desktop-restore))
;; in the module itself, and make sure that the mode function is ;; in the module itself. The mode function must either be autoloaded,
;; autoloaded. See the docstrings of `desktop-buffer-mode-handlers' and ;; or of the form "foobar-mode" and defined in library "foobar", so that
;; desktop can guess how to load its definition.
;; See the docstrings of `desktop-buffer-mode-handlers' and
;; `desktop-minor-mode-handlers' for more info. ;; `desktop-minor-mode-handlers' for more info.
;; Minor modes. ;; Minor modes.
...@@ -520,7 +522,9 @@ code like ...@@ -520,7 +522,9 @@ code like
(add-to-list 'desktop-buffer-mode-handlers (add-to-list 'desktop-buffer-mode-handlers
'(foo-mode . foo-restore-desktop-buffer)) '(foo-mode . foo-restore-desktop-buffer))
Furthermore the major mode function must be autoloaded.") The major mode function must either be autoloaded, or of the form
\"foobar-mode\" and defined in library \"foobar\", so that desktop
can guess how to load the mode's definition.")
;;;###autoload ;;;###autoload
(put 'desktop-buffer-mode-handlers 'risky-local-variable t) (put 'desktop-buffer-mode-handlers 'risky-local-variable t)
...@@ -585,7 +589,9 @@ code like ...@@ -585,7 +589,9 @@ code like
(add-to-list 'desktop-minor-mode-handlers (add-to-list 'desktop-minor-mode-handlers
'(foo-mode . foo-desktop-restore)) '(foo-mode . foo-desktop-restore))
Furthermore the minor mode function must be autoloaded. The minor mode function must either be autoloaded, or of the form
\"foobar-mode\" and defined in library \"foobar\", so that desktop
can guess how to load the mode's definition.
See also `desktop-minor-mode-table'.") See also `desktop-minor-mode-table'.")
...@@ -1352,9 +1358,18 @@ after that many seconds of idle time." ...@@ -1352,9 +1358,18 @@ after that many seconds of idle time."
nil))) nil)))
(defun desktop-load-file (function) (defun desktop-load-file (function)
"Load the file where auto loaded FUNCTION is defined." "Load the file where auto loaded FUNCTION is defined.
(when (fboundp function) If FUNCTION is not currently defined, guess the library that defines it
(autoload-do-load (symbol-function function) function))) and try to load that."
(if (fboundp function)
(autoload-do-load (symbol-function function) function)
;; Guess that foobar-mode is defined in foobar.
;; TODO rather than guessing or requiring an autoload, the desktop
;; file should record the name of the library.
(let ((name (symbol-name function)))
(if (string-match "\\`\\(.*\\)-mode\\'" name)
(with-demoted-errors "Require error in desktop-load-file: %S"
(require (intern (match-string 1 name)) nil t))))))
;; ---------------------------------------------------------------------------- ;; ----------------------------------------------------------------------------
;; Create a buffer, load its file, set its mode, ...; ;; Create a buffer, load its file, set its mode, ...;
...@@ -1572,9 +1587,6 @@ If there are no buffers left to create, kill the timer." ...@@ -1572,9 +1587,6 @@ If there are no buffers left to create, kill the timer."
(desktop-read) (desktop-read)
(setq inhibit-startup-screen t))))) (setq inhibit-startup-screen t)))))
;; So we can restore vc-dir buffers.
(autoload 'vc-dir-mode "vc-dir" nil t)
(provide 'desktop) (provide 'desktop)
;;; desktop.el ends here ;;; desktop.el ends here
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment