1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-16 17:19:41 +00:00

* 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
This commit is contained in:
Glenn Morris 2015-05-25 23:27:55 -07:00
parent 816a2b369d
commit db87b14e7c

View File

@ -83,8 +83,10 @@
;; (add-to-list 'desktop-minor-mode-handlers
;; '(bar-mode . bar-desktop-restore))
;; in the module itself, and make sure that the mode function is
;; autoloaded. See the docstrings of `desktop-buffer-mode-handlers' and
;; in the module itself. The 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 its definition.
;; See the docstrings of `desktop-buffer-mode-handlers' and
;; `desktop-minor-mode-handlers' for more info.
;; Minor modes.
@ -520,7 +522,9 @@ code like
(add-to-list 'desktop-buffer-mode-handlers
'(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
(put 'desktop-buffer-mode-handlers 'risky-local-variable t)
@ -585,7 +589,9 @@ code like
(add-to-list 'desktop-minor-mode-handlers
'(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'.")
@ -1352,9 +1358,18 @@ after that many seconds of idle time."
nil)))
(defun desktop-load-file (function)
"Load the file where auto loaded FUNCTION is defined."
(when (fboundp function)
(autoload-do-load (symbol-function function) function)))
"Load the file where auto loaded FUNCTION is defined.
If FUNCTION is not currently defined, guess the library that defines it
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, ...;
@ -1572,9 +1587,6 @@ If there are no buffers left to create, kill the timer."
(desktop-read)
(setq inhibit-startup-screen t)))))
;; So we can restore vc-dir buffers.
(autoload 'vc-dir-mode "vc-dir" nil t)
(provide 'desktop)
;;; desktop.el ends here