File: desktop.el.html

Save the Desktop, i.e.,
- some global variables
- the list of buffers with associated files. For each buffer also
- the major mode
- the default directory
- the point
- the mark & mark-active
- buffer-read-only
- some local variables
- frame and window configuration

To use this, use customize to turn on desktop-save-mode or add the following line somewhere in your init file:

(desktop-save-mode 1)

For further usage information, look at the section
(info "(emacs)Saving Emacs Sessions") in the GNU Emacs Manual.

When the desktop module is loaded, the function desktop-kill is added to the kill-emacs-query-functions. This function is responsible for saving the desktop and deleting the desktop lock file when Emacs is killed. In addition, an anonymous function is added to the after-init-hook. This function is responsible for loading the desktop when Emacs is started.

Special handling.
-----------------
Variables desktop-buffer-mode-handlers and desktop-minor-mode-handlers are supplied to handle special major and minor modes respectively. desktop-buffer-mode-handlers is an alist of major mode specific functions to restore a desktop buffer. Elements must have the form

   (MAJOR-MODE . RESTORE-BUFFER-FUNCTION).

Functions listed are called by desktop-create-buffer when desktop-read evaluates the desktop file. Buffers with a major mode not specified here, are restored by the default handler desktop-restore-file-buffer. desktop-minor-mode-handlers is an alist of functions to restore non-standard minor modes. Elements must have the form

   (MINOR-MODE . RESTORE-FUNCTION).

Functions are called by desktop-create-buffer to restore minor modes. Minor modes not specified here, are restored by the standard minor mode function. If you write a module that defines a major or minor mode that needs a special handler, then place code like

   (defun foo-restore-desktop-buffer
   ...
   (add-to-list 'desktop-buffer-mode-handlers
                '(foo-mode . foo-restore-desktop-buffer))

or

   (defun bar-desktop-restore
   ...
   (add-to-list 'desktop-minor-mode-handlers
                '(bar-mode . bar-desktop-restore))

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.
------------
Conventional minor modes (see node "Minor Mode Conventions" in the elisp manual) are handled in the following way: When desktop-save(var)/desktop-save(fun) saves the state of a buffer to the desktop file, it saves as desktop-minor-modes the list of names of those variables in minor-mode-alist that have a non-nil value. When desktop-create restores the buffer, each of the symbols in desktop-minor-modes is called as function with parameter 1. The variables desktop-minor-mode-table and desktop-minor-mode-handlers are used to handle non-conventional minor modes. desktop-save(var)/desktop-save(fun) uses desktop-minor-mode-table to map minor mode variables to minor mode functions before writing desktop-minor-modes. If a minor mode has a variable name that is different form its function name, an entry

   (NAME RESTORE-FUNCTION)

should be added to desktop-minor-mode-table. If a minor mode should not be restored, RESTORE-FUNCTION should be set to nil. desktop-create uses desktop-minor-mode-handlers to lookup minor modes that needs a restore function different from the usual minor mode function.
---------------------------------------------------------------------------

By the way: don't use desktop.el to customize Emacs -- the file .emacs in your home directory is used for that. Saving global default values for buffers is an example of misuse.

PLEASE NOTE: The kill ring can be saved as specified by the variable desktop-globals-to-save (by default it isn't). This may result in saving things you did not mean to keep. Use M-x desktop-clear RET.

Thanks to hetrick@phys.uva.nl (Jim Hetrick) for useful ideas.
           avk@rtsg.mot.com (Andrew V. Klein) for a Dired tip.
           chris@tecc.co.uk (Chris Boucher) for a mark tip.
           f89-kam@nada.kth.se (Klas Mellbourn) for a mh-e tip.
           kifer@cs.stonybrook.edu (M. Kifer) for a bug hunt.
           treese@lcs.mit.edu (Win Treese) for ange-ftp tips.
           pot@cnuce.cnr.it (Francesco Potortì) for misc. tips.
---------------------------------------------------------------------------
TODO:

Recognize more minor modes. Save mark rings.

Defined variables (44)

desktop-after-read-hookNormal hook run after a successful ‘desktop-read’.
desktop-auto-save-timeoutNumber of seconds of idle time before auto-saving the desktop.
desktop-base-file-nameName of file for Emacs desktop, excluding the directory part.
desktop-base-lock-nameName of lock file for Emacs desktop, excluding the directory part.
desktop-buffer-args-listList of args for ‘desktop-create-buffer’.
desktop-buffer-mode-handlersAlist of major mode specific functions to restore a desktop buffer.
desktop-buffers-not-to-saveRegexp identifying buffers that are to be excluded from saving.
desktop-buffers-not-to-save-functionFunction identifying buffers that are to be excluded from saving.
desktop-clear-preserve-buffersList of buffers that ‘desktop-clear’ should not delete.
desktop-delay-hookHooks run after all buffers are loaded; intended for internal use.
desktop-dirnameThe directory in which the desktop file should be saved.
desktop-file-checksumChecksum of the last auto-saved contents of the desktop file.
desktop-file-modtimeWhen the desktop file was last modified to the knowledge of this Emacs.
desktop-file-name-formatFormat in which desktop file names should be saved.
desktop-file-versionVersion number of desktop file format.
desktop-files-not-to-saveRegexp identifying files whose buffers are to be excluded from saving.
desktop-globals-to-clearList of global variables that ‘desktop-clear’ will clear.
desktop-globals-to-saveList of global variables saved by ‘desktop-save’.
desktop-headerHeader to place in Desktop file.
desktop-io-file-versionThe format version of the current desktop file (an integer) or nil.
desktop-lazy-idle-delayIdle delay before starting to create buffers.
desktop-lazy-verboseVerbose reporting of lazily created buffers.
desktop-load-locked-desktopSpecifies whether the desktop should be loaded if locked.
desktop-locals-to-saveList of local variables to save for each buffer.
desktop-minor-mode-handlersAlist of functions to restore non-standard minor modes.
desktop-minor-mode-tableTable mapping minor mode variables to minor mode functions.
desktop-missing-file-warningIf non-nil, offer to recreate the buffer of a deleted file.
desktop-modes-not-to-saveList of major modes whose buffers should not be saved.
desktop-native-file-versionFormat version of the current desktop package, an integer.
desktop-no-desktop-file-hookNormal hook run when ‘desktop-read’ can’t find a desktop file.
desktop-not-loaded-hookNormal hook run when the user declines to reuse a desktop file.
desktop-pathList of directories to search for the desktop file.
desktop-restore-eagerNumber of buffers to restore immediately.
desktop-restore-forces-onscreenIf t, restores frames that are fully offscreen onscreen instead.
desktop-restore-framesWhen non-nil, save and restore the frame and window configuration.
desktop-restore-in-current-displayControls how restoring of frames treats displays.
desktop-restore-reuses-framesIf t, restoring frames reuses existing frames.
desktop-saveSpecifies whether the desktop should be saved when it is killed.
desktop-save-bufferWhen non-nil, save buffer status in desktop file.
desktop-save-hookNormal hook run before the desktop is saved in a desktop file.
desktop-save-modeNon-nil if Desktop-Save mode is enabled.
desktop-save-mode-hookHook run after entering or leaving ‘desktop-save-mode’.
desktop-saved-framesetSaved state of all frames.
desktop-var-serdes-funsTable of serialization/deserialization functions for variables.

Defined functions (43)

desktop--check-dont-save(FRAME)
desktop--emacs-pid-running-p(PID)
desktop--get-file-modtime()
desktop--load-locked-desktop-p(OWNER)
desktop--v2s(VALUE)
desktop-access-file(FILENAME)
desktop-append-buffer-args(&rest ARGS)
desktop-auto-save()
desktop-auto-save-enable(&optional TIMEOUT)
desktop-auto-save-set-timer()
desktop-buffer(BUFFER-FILENAME BUFFER-NAME BUFFER-MAJORMODE MIM PT MK RO TL FC CFS CR BUFFER-MISC)
desktop-buffer-info(BUFFER)
desktop-change-dir(DIRNAME)
desktop-claim-lock(&optional DIRNAME)
desktop-clear()
desktop-create-buffer(FILE-VERSION BUFFER-FILENAME BUFFER-NAME BUFFER-MAJORMODE BUFFER-MINORMODES BUFFER-POINT BUFFER-MARK BUFFER-READONLY BUFFER-MISC &optional BUFFER-LOCALS COMPACTED-VARS &rest UNSUPPORTED)
desktop-file-name(FILENAME DIRNAME)
desktop-full-file-name(&optional DIRNAME)
desktop-full-lock-name(&optional DIRNAME)
desktop-idle-create-buffers()
desktop-kill()
desktop-lazy-abort()
desktop-lazy-complete()
desktop-lazy-create-buffer()
desktop-list*(&rest ARGS)
desktop-load-file(FUNCTION)
desktop-outvar(VARSPEC)
desktop-owner(&optional DIRNAME)
desktop-read(DIRNAME)
desktop-release-lock(&optional DIRNAME)
desktop-remove()
desktop-restore-file-buffer(BUFFER-FILENAME BUFFER-NAME BUFFER-MISC)
desktop-restore-frameset()
desktop-restoring-frameset-p()
desktop-revert()
desktop-save(DIRNAME &optional RELEASE ONLY-IF-CHANGED VERSION)
desktop-save-buffer-p(FILENAME BUFNAME MODE)
desktop-save-frameset()
desktop-save-in-desktop-dir()
desktop-save-mode(&optional ARG)
desktop-save-mode-off()
desktop-truncate(LIST N)
desktop-value-to-string(VALUE)

Defined faces (0)