annotate lisp/desktop.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 6c9f59d296d3
children 417b1e4d63cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; desktop.el --- save partial status of Emacs when killed
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64674
diff changeset
3 ;; Copyright (C) 1993, 1994, 1995, 1997, 2000, 2001, 2002, 2003,
107543
c56cc351f300 Close bug#5755.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
4 ;; 2004, 2005, 2006, 2007, 2008, 2009, 2010
c56cc351f300 Close bug#5755.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
5 ;; Free Software Foundation, Inc.
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Author: Morten Welinder <terra@diku.dk>
27577
beed019fbf10 Fix keywords comment.
Dave Love <fx@gnu.org>
parents: 23699
diff changeset
8 ;; Keywords: convenience
5314
e65e125e5334 Add keywords.
Richard M. Stallman <rms@gnu.org>
parents: 4830
diff changeset
9 ;; Favourite-brand-of-beer: None, I hate beer.
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94425
diff changeset
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94425
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94425
diff changeset
16 ;; (at your option) any later version.
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; GNU General Public License for more details.
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94425
diff changeset
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
28 ;; Save the Desktop, i.e.,
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
29 ;; - some global variables
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
30 ;; - the list of buffers with associated files. For each buffer also
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
31 ;; - the major mode
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
32 ;; - the default directory
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
33 ;; - the point
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
34 ;; - the mark & mark-active
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
35 ;; - buffer-read-only
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
36 ;; - some local variables
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
38 ;; To use this, use customize to turn on desktop-save-mode or add the
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
39 ;; following line somewhere in your .emacs file:
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
40 ;;
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
41 ;; (desktop-save-mode 1)
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
42 ;;
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
43 ;; For further usage information, look at the section
102698
33bfc7807109 Comment.
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
44 ;; (info "(emacs)Saving Emacs Sessions") in the GNU Emacs Manual.
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
46 ;; When the desktop module is loaded, the function `desktop-kill' is
77115
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
47 ;; added to the `kill-emacs-hook'. This function is responsible for
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
48 ;; saving the desktop when Emacs is killed. Furthermore an anonymous
77115
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
49 ;; function is added to the `after-init-hook'. This function is
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
50 ;; responsible for loading the desktop when Emacs is started.
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
51
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
52 ;; Special handling.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
53 ;; -----------------
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
54 ;; Variables `desktop-buffer-mode-handlers' and `desktop-minor-mode-handlers'
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
55 ;; are supplied to handle special major and minor modes respectively.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
56 ;; `desktop-buffer-mode-handlers' is an alist of major mode specific functions
77115
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
57 ;; to restore a desktop buffer. Elements must have the form
68775
01a75c5115e7 (desktop-outvar): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
58 ;;
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
59 ;; (MAJOR-MODE . RESTORE-BUFFER-FUNCTION).
68775
01a75c5115e7 (desktop-outvar): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
60 ;;
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
61 ;; Functions listed are called by `desktop-create-buffer' when `desktop-read'
77115
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
62 ;; evaluates the desktop file. Buffers with a major mode not specified here,
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
63 ;; are restored by the default handler `desktop-restore-file-buffer'.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
64 ;; `desktop-minor-mode-handlers' is an alist of functions to restore
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
65 ;; non-standard minor modes. Elements must have the form
68775
01a75c5115e7 (desktop-outvar): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
66 ;;
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
67 ;; (MINOR-MODE . RESTORE-FUNCTION).
68775
01a75c5115e7 (desktop-outvar): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
68 ;;
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
69 ;; Functions are called by `desktop-create-buffer' to restore minor modes.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
70 ;; Minor modes not specified here, are restored by the standard minor mode
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
71 ;; function. If you write a module that defines a major or minor mode that
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
72 ;; needs a special handler, then place code like
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
73
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
74 ;; (defun foo-restore-desktop-buffer
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
75 ;; ...
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
76 ;; (add-to-list 'desktop-buffer-mode-handlers
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
77 ;; '(foo-mode . foo-restore-desktop-buffer))
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
78
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
79 ;; or
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
80
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
81 ;; (defun bar-desktop-restore
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
82 ;; ...
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
83 ;; (add-to-list 'desktop-minor-mode-handlers
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
84 ;; '(bar-mode . bar-desktop-restore))
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
85
94425
780f88412851 (desktop-minor-mode-table): Add `savehist-mode'.
Juanma Barranquero <lekktu@gmail.com>
parents: 94026
diff changeset
86 ;; in the module itself, and make sure that the mode function is
77115
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
87 ;; autoloaded. See the docstrings of `desktop-buffer-mode-handlers' and
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
88 ;; `desktop-minor-mode-handlers' for more info.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
89
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
90 ;; Minor modes.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
91 ;; ------------
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
92 ;; Conventional minor modes (see node "Minor Mode Conventions" in the elisp
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
93 ;; manual) are handled in the following way:
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
94 ;; When `desktop-save' saves the state of a buffer to the desktop file, it
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
95 ;; saves as `desktop-minor-modes' the list of names of those variables in
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
96 ;; `minor-mode-alist' that have a non-nil value.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
97 ;; When `desktop-create' restores the buffer, each of the symbols in
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
98 ;; `desktop-minor-modes' is called as function with parameter 1.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
99 ;; The variables `desktop-minor-mode-table' and `desktop-minor-mode-handlers'
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
100 ;; are used to handle non-conventional minor modes. `desktop-save' uses
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
101 ;; `desktop-minor-mode-table' to map minor mode variables to minor mode
77115
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
102 ;; functions before writing `desktop-minor-modes'. If a minor mode has a
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
103 ;; variable name that is different form its function name, an entry
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
104
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
105 ;; (NAME RESTORE-FUNCTION)
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
106
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
107 ;; should be added to `desktop-minor-mode-table'. If a minor mode should not
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
108 ;; be restored, RESTORE-FUNCTION should be set to nil. `desktop-create' uses
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
109 ;; `desktop-minor-mode-handlers' to lookup minor modes that needs a restore
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
110 ;; function different from the usual minor mode function.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
111 ;; ---------------------------------------------------------------------------
28719
f56c181fb849 (desktop-save): Save list of minor modes.
Gerd Moellmann <gerd@gnu.org>
parents: 27577
diff changeset
112
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
113 ;; By the way: don't use desktop.el to customize Emacs -- the file .emacs
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
114 ;; in your home directory is used for that. Saving global default values
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
115 ;; for buffers is an example of misuse.
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
116
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
117 ;; PLEASE NOTE: The kill ring can be saved as specified by the variable
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
118 ;; `desktop-globals-to-save' (by default it isn't). This may result in saving
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
119 ;; things you did not mean to keep. Use M-x desktop-clear RET.
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
120
7240
195e64dad1eb (desktop-files-not-to-save): New variable to exclude certain files -- magic
Karl Heuer <kwzh@gnu.org>
parents: 7200
diff changeset
121 ;; Thanks to hetrick@phys.uva.nl (Jim Hetrick) for useful ideas.
195e64dad1eb (desktop-files-not-to-save): New variable to exclude certain files -- magic
Karl Heuer <kwzh@gnu.org>
parents: 7200
diff changeset
122 ;; avk@rtsg.mot.com (Andrew V. Klein) for a dired tip.
195e64dad1eb (desktop-files-not-to-save): New variable to exclude certain files -- magic
Karl Heuer <kwzh@gnu.org>
parents: 7200
diff changeset
123 ;; chris@tecc.co.uk (Chris Boucher) for a mark tip.
195e64dad1eb (desktop-files-not-to-save): New variable to exclude certain files -- magic
Karl Heuer <kwzh@gnu.org>
parents: 7200
diff changeset
124 ;; f89-kam@nada.kth.se (Klas Mellbourn) for a mh-e tip.
195e64dad1eb (desktop-files-not-to-save): New variable to exclude certain files -- magic
Karl Heuer <kwzh@gnu.org>
parents: 7200
diff changeset
125 ;; kifer@sbkifer.cs.sunysb.edu (M. Kifer) for a bug hunt.
11224
f7f101a90cd4 (desktop-save): Use dired-directory as name
Richard M. Stallman <rms@gnu.org>
parents: 10777
diff changeset
126 ;; treese@lcs.mit.edu (Win Treese) for ange-ftp tips.
14172
da563949c7d7 (desktop-read): Do nothing in batch mode.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
127 ;; pot@cnuce.cnr.it (Francesco Potorti`) for misc. tips.
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
128 ;; ---------------------------------------------------------------------------
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
129 ;; TODO:
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
130 ;;
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
131 ;; Save window configuration.
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
132 ;; Recognize more minor modes.
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
133 ;; Save mark rings.
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 ;;; Code:
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
137 (defvar desktop-file-version "206"
54206
ecf0e7a0567a (desktop-file-version, desktop-after-read-hook): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 52996
diff changeset
138 "Version number of desktop file format.
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
139 Written into the desktop file and used at desktop read to provide
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
140 backward compatibility.")
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
141
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
142 ;; ----------------------------------------------------------------------------
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
143 ;; USER OPTIONS -- settings you might want to play with.
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
144 ;; ----------------------------------------------------------------------------
17411
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17204
diff changeset
145
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17204
diff changeset
146 (defgroup desktop nil
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17204
diff changeset
147 "Save status of Emacs when you exit."
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17204
diff changeset
148 :group 'frames)
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17204
diff changeset
149
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
150 ;;;###autoload
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
151 (define-minor-mode desktop-save-mode
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
152 "Toggle desktop saving mode.
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
153 With numeric ARG, turn desktop saving on if ARG is positive, off
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
154 otherwise. If desktop saving is turned on, the state of Emacs is
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
155 saved from one session to another. See variable `desktop-save'
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
156 and function `desktop-read' for details."
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
157 :global t
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
158 :group 'desktop)
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
159
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
160 ;; Maintained for backward compatibility
64674
b110ecf69f54 (desktop-save-buffer): Fix typos in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 64566
diff changeset
161 (define-obsolete-variable-alias 'desktop-enable
b110ecf69f54 (desktop-save-buffer): Fix typos in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 64566
diff changeset
162 'desktop-save-mode "22.1")
20526
ec0a8ccddd6c (desktop-enable): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18581
diff changeset
163
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
164 (defun desktop-save-mode-off ()
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
165 "Disable `desktop-save-mode'. Provided for use in hooks."
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
166 (desktop-save-mode 0))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
167
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
168 (defcustom desktop-save 'ask-if-new
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
169 "Specifies whether the desktop should be saved when it is killed.
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
170 A desktop is killed when the user changes desktop or quits Emacs.
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
171 Possible values are:
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
172 t -- always save.
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
173 ask -- always ask.
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
174 ask-if-new -- ask if no desktop file exists, otherwise just save.
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
175 ask-if-exists -- ask if desktop file exists, otherwise don't save.
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
176 if-exists -- save if desktop file exists, otherwise don't save.
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
177 nil -- never save.
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
178 The desktop is never saved when `desktop-save-mode' is nil.
64490
e22e42dbaf76 (desktop-enable, desktop-buffer-modes-to-save, (desktop-buffer-misc-functions,
Juanma Barranquero <lekktu@gmail.com>
parents: 64254
diff changeset
179 The variables `desktop-dirname' and `desktop-base-file-name'
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
180 determine where the desktop is saved."
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
181 :type
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
182 '(choice
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
183 (const :tag "Always save" t)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
184 (const :tag "Always ask" ask)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
185 (const :tag "Ask if desktop file is new, else do save" ask-if-new)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
186 (const :tag "Ask if desktop file exists, else don't save" ask-if-exists)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
187 (const :tag "Save if desktop file exists, else don't" if-exists)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
188 (const :tag "Never save" nil))
58140
b72ba185298b (desktop-buffer-mode-handlers, desktop-after-read-hook,
Lars Hansen <larsh@soem.dk>
parents: 57038
diff changeset
189 :group 'desktop
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59487
diff changeset
190 :version "22.1")
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
191
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
192 (defcustom desktop-load-locked-desktop 'ask
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
193 "Specifies whether the desktop should be loaded if locked.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
194 Possible values are:
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
195 t -- load anyway.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
196 nil -- don't load.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
197 ask -- ask the user.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
198 If the value is nil, or `ask' and the user chooses not to load the desktop,
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
199 the normal hook `desktop-not-loaded-hook' is run."
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
200 :type
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
201 '(choice
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
202 (const :tag "Load anyway" t)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
203 (const :tag "Don't load" nil)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
204 (const :tag "Ask the user" ask))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
205 :group 'desktop
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
206 :version "22.2")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
207
94026
85846e73fafe Move non-autoloaded define-obsolete-variable-alias calls for
Glenn Morris <rgm@gnu.org>
parents: 92944
diff changeset
208 (define-obsolete-variable-alias 'desktop-basefilename
85846e73fafe Move non-autoloaded define-obsolete-variable-alias calls for
Glenn Morris <rgm@gnu.org>
parents: 92944
diff changeset
209 'desktop-base-file-name "22.1")
85846e73fafe Move non-autoloaded define-obsolete-variable-alias calls for
Glenn Morris <rgm@gnu.org>
parents: 92944
diff changeset
210
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
211 (defcustom desktop-base-file-name
16037
a1e88c05b53c (desktop-basefilename): Use convert-standard-filename.
Richard M. Stallman <rms@gnu.org>
parents: 14756
diff changeset
212 (convert-standard-filename ".emacs.desktop")
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
213 "Name of file for Emacs desktop, excluding the directory part."
20526
ec0a8ccddd6c (desktop-enable): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18581
diff changeset
214 :type 'file
ec0a8ccddd6c (desktop-enable): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18581
diff changeset
215 :group 'desktop)
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
217 (defcustom desktop-base-lock-name
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
218 (convert-standard-filename ".emacs.desktop.lock")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
219 "Name of lock file for Emacs desktop, excluding the directory part."
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
220 :type 'file
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
221 :group 'desktop
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
222 :version "22.2")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
223
105031
7700dc1d76fd (desktop-path): Check user-emacs-directory.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103978
diff changeset
224 (defcustom desktop-path (list "." user-emacs-directory "~")
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
225 "List of directories to search for the desktop file.
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
226 The base name of the file is specified in `desktop-base-file-name'."
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
227 :type '(repeat directory)
58140
b72ba185298b (desktop-buffer-mode-handlers, desktop-after-read-hook,
Lars Hansen <larsh@soem.dk>
parents: 57038
diff changeset
228 :group 'desktop
110225
941667e2cb4c * desktop.el (desktop-path): Bump :version after 2009-09-15 change.
Glenn Morris <rgm@gnu.org>
parents: 108932
diff changeset
229 :version "23.2") ; user-emacs-directory added
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
230
17411
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17204
diff changeset
231 (defcustom desktop-missing-file-warning nil
70653
019755175634 (desktop-missing-file-warning): Fix docstring.
Lars Hansen <larsh@soem.dk>
parents: 70644
diff changeset
232 "If non-nil, offer to recreate the buffer of a deleted file.
55155
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
233 Also pause for a moment to display message about errors signaled in
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
234 `desktop-buffer-mode-handlers'.
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
235
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
236 If nil, just print error messages in the message buffer."
17411
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17204
diff changeset
237 :type 'boolean
58140
b72ba185298b (desktop-buffer-mode-handlers, desktop-after-read-hook,
Lars Hansen <larsh@soem.dk>
parents: 57038
diff changeset
238 :group 'desktop
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59487
diff changeset
239 :version "22.1")
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
241 (defcustom desktop-no-desktop-file-hook nil
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
242 "Normal hook run when `desktop-read' can't find a desktop file.
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
243 Run in the directory in which the desktop file was sought.
61236
65075d5373df (desktop-no-desktop-file-hook, desktop-after-read-hook): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 59996
diff changeset
244 May be used to show a dired buffer."
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
245 :type 'hook
58140
b72ba185298b (desktop-buffer-mode-handlers, desktop-after-read-hook,
Lars Hansen <larsh@soem.dk>
parents: 57038
diff changeset
246 :group 'desktop
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59487
diff changeset
247 :version "22.1")
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
248
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
249 (defcustom desktop-not-loaded-hook nil
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
250 "Normal hook run when the user declines to re-use a desktop file.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
251 Run in the directory in which the desktop file was found.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
252 May be used to deal with accidental multiple Emacs jobs."
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
253 :type 'hook
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
254 :group 'desktop
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
255 :options '(desktop-save-mode-off save-buffers-kill-emacs)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
256 :version "22.2")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
257
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
258 (defcustom desktop-after-read-hook nil
54206
ecf0e7a0567a (desktop-file-version, desktop-after-read-hook): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 52996
diff changeset
259 "Normal hook run after a successful `desktop-read'.
61236
65075d5373df (desktop-no-desktop-file-hook, desktop-after-read-hook): Fix docstring.
Lute Kamstra <lute@gnu.org>
parents: 59996
diff changeset
260 May be used to show a buffer list."
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
261 :type 'hook
58140
b72ba185298b (desktop-buffer-mode-handlers, desktop-after-read-hook,
Lars Hansen <larsh@soem.dk>
parents: 57038
diff changeset
262 :group 'desktop
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
263 :options '(list-buffers)
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59487
diff changeset
264 :version "22.1")
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
265
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
266 (defcustom desktop-save-hook nil
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
267 "Normal hook run before the desktop is saved in a desktop file.
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
268 Run with the desktop buffer current with only the header present.
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
269 May be used to add to the desktop code or to truncate history lists,
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
270 for example."
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
271 :type 'hook
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
272 :group 'desktop)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
273
57038
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
274 (defcustom desktop-globals-to-save
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
275 '(desktop-missing-file-warning
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
276 tags-file-name
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
277 tags-table-list
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
278 search-ring
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
279 regexp-search-ring
103723
a18909b5a393 * desktop.el (desktop-globals-to-save): Add file-name-history (Bug#2750).
Chong Yidong <cyd@stupidchicken.com>
parents: 102698
diff changeset
280 register-alist
a18909b5a393 * desktop.el (desktop-globals-to-save): Add file-name-history (Bug#2750).
Chong Yidong <cyd@stupidchicken.com>
parents: 102698
diff changeset
281 file-name-history)
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
282 "List of global variables saved by `desktop-save'.
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
283 An element may be variable name (a symbol) or a cons cell of the form
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
284 \(VAR . MAX-SIZE), which means to truncate VAR's value to at most
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
285 MAX-SIZE elements (if the value is a list) before saving the value.
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
286 Feature: Saving `kill-ring' implies saving `kill-ring-yank-pointer'."
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
287 :type '(repeat (restricted-sexp :match-alternatives (symbolp consp)))
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
288 :group 'desktop)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
289
57038
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
290 (defcustom desktop-globals-to-clear
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
291 '(kill-ring
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
292 kill-ring-yank-pointer
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
293 search-ring
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
294 search-ring-yank-pointer
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
295 regexp-search-ring
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
296 regexp-search-ring-yank-pointer)
59412
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
297 "List of global variables that `desktop-clear' will clear.
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
298 An element may be variable name (a symbol) or a cons cell of the form
64490
e22e42dbaf76 (desktop-enable, desktop-buffer-modes-to-save, (desktop-buffer-misc-functions,
Juanma Barranquero <lekktu@gmail.com>
parents: 64254
diff changeset
299 \(VAR . FORM). Symbols are set to nil and for cons cells VAR is set
e22e42dbaf76 (desktop-enable, desktop-buffer-modes-to-save, (desktop-buffer-misc-functions,
Juanma Barranquero <lekktu@gmail.com>
parents: 64254
diff changeset
300 to the value obtained by evaluating FORM."
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
301 :type '(repeat (restricted-sexp :match-alternatives (symbolp consp)))
58140
b72ba185298b (desktop-buffer-mode-handlers, desktop-after-read-hook,
Lars Hansen <larsh@soem.dk>
parents: 57038
diff changeset
302 :group 'desktop
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59487
diff changeset
303 :version "22.1")
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
305 (defcustom desktop-clear-preserve-buffers
108932
21c602686f38 Close bug#6336.
Glenn Morris <rgm@gnu.org>
parents: 107543
diff changeset
306 '("\\*scratch\\*" "\\*Messages\\*" "\\*server\\*" "\\*tramp/.+\\*"
21c602686f38 Close bug#6336.
Glenn Morris <rgm@gnu.org>
parents: 107543
diff changeset
307 "\\*Warnings\\*")
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
308 "List of buffers that `desktop-clear' should not delete.
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
309 Each element is a regular expression. Buffers with a name matched by any of
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
310 these won't be deleted."
108932
21c602686f38 Close bug#6336.
Glenn Morris <rgm@gnu.org>
parents: 107543
diff changeset
311 :version "23.3" ; added Warnings - bug#6336
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
312 :type '(repeat string)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
313 :group 'desktop)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
314
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
315 ;;;###autoload
57038
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
316 (defcustom desktop-locals-to-save
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
317 '(desktop-locals-to-save ; Itself! Think it over.
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
318 truncate-lines
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
319 case-fold-search
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
320 case-replace
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
321 fill-column
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
322 overwrite-mode
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
323 change-log-default-name
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
324 line-number-mode
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
325 column-number-mode
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
326 size-indication-mode
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
327 buffer-file-coding-system
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
328 indent-tabs-mode
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
329 tab-width
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
330 indicate-buffer-boundaries
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
331 indicate-empty-lines
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
332 show-trailing-whitespace)
10595
06fa5b312280 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 9776
diff changeset
333 "List of local variables to save for each buffer.
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
334 The variables are saved only when they really are local. Conventional minor
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
335 modes are restored automatically; they should not be listed here."
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
336 :type '(repeat symbol)
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
337 :group 'desktop)
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
338
103958
f261612c30a6 (desktop-buffers-not-to-save): Default value is nil. Accept nil in
Eli Zaretskii <eliz@gnu.org>
parents: 103872
diff changeset
339 (defcustom desktop-buffers-not-to-save nil
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
340 "Regexp identifying buffers that are to be excluded from saving."
103958
f261612c30a6 (desktop-buffers-not-to-save): Default value is nil. Accept nil in
Eli Zaretskii <eliz@gnu.org>
parents: 103872
diff changeset
341 :type '(choice (const :tag "None" nil)
f261612c30a6 (desktop-buffers-not-to-save): Default value is nil. Accept nil in
Eli Zaretskii <eliz@gnu.org>
parents: 103872
diff changeset
342 regexp)
103978
53e741f0367a (desktop-buffers-not-to-save): Set :version tag.
Glenn Morris <rgm@gnu.org>
parents: 103958
diff changeset
343 :version "23.2" ; set to nil
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
344 :group 'desktop)
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
346 ;; Skip tramp and ange-ftp files
17411
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17204
diff changeset
347 (defcustom desktop-files-not-to-save
103958
f261612c30a6 (desktop-buffers-not-to-save): Default value is nil. Accept nil in
Eli Zaretskii <eliz@gnu.org>
parents: 103872
diff changeset
348 "\\(^/[^/:]*:\\|(ftp)$\\)"
17411
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17204
diff changeset
349 "Regexp identifying files whose buffers are to be excluded from saving."
103958
f261612c30a6 (desktop-buffers-not-to-save): Default value is nil. Accept nil in
Eli Zaretskii <eliz@gnu.org>
parents: 103872
diff changeset
350 :type '(choice (const :tag "None" nil)
f261612c30a6 (desktop-buffers-not-to-save): Default value is nil. Accept nil in
Eli Zaretskii <eliz@gnu.org>
parents: 103872
diff changeset
351 regexp)
17411
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17204
diff changeset
352 :group 'desktop)
7240
195e64dad1eb (desktop-files-not-to-save): New variable to exclude certain files -- magic
Karl Heuer <kwzh@gnu.org>
parents: 7200
diff changeset
353
66278
8926d6f2f267 (desktop-buffers-not-to-save): Remove TAGS from the default value.
Juri Linkov <juri@jurta.org>
parents: 66037
diff changeset
354 ;; We skip TAGS files to save time (tags-file-name is saved instead).
8926d6f2f267 (desktop-buffers-not-to-save): Remove TAGS from the default value.
Juri Linkov <juri@jurta.org>
parents: 66037
diff changeset
355 (defcustom desktop-modes-not-to-save
8926d6f2f267 (desktop-buffers-not-to-save): Remove TAGS from the default value.
Juri Linkov <juri@jurta.org>
parents: 66037
diff changeset
356 '(tags-table-mode)
32366
40d8b29df57e (desktop-modes-not-to-save): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30853
diff changeset
357 "List of major modes whose buffers should not be saved."
40d8b29df57e (desktop-modes-not-to-save): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30853
diff changeset
358 :type '(repeat symbol)
40d8b29df57e (desktop-modes-not-to-save): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30853
diff changeset
359 :group 'desktop)
40d8b29df57e (desktop-modes-not-to-save): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30853
diff changeset
360
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
361 (defcustom desktop-file-name-format 'absolute
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
362 "Format in which desktop file names should be saved.
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
363 Possible values are:
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
364 absolute -- Absolute file name.
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
365 tilde -- Relative to ~.
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
366 local -- Relative to directory of desktop file."
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
367 :type '(choice (const absolute) (const tilde) (const local))
58140
b72ba185298b (desktop-buffer-mode-handlers, desktop-after-read-hook,
Lars Hansen <larsh@soem.dk>
parents: 57038
diff changeset
368 :group 'desktop
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59487
diff changeset
369 :version "22.1")
14755
3d473ed8c718 Global vars mam, fn, bn renamed.
Richard M. Stallman <rms@gnu.org>
parents: 14754
diff changeset
370
59412
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
371 (defcustom desktop-restore-eager t
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
372 "Number of buffers to restore immediately.
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
373 Remaining buffers are restored lazily (when Emacs is idle).
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
374 If value is t, all buffers are restored immediately."
59436
1b7f2dc9f5f6 (desktop-restore-eager): Fix typo in type.
David Kastrup <dak@gnu.org>
parents: 59412
diff changeset
375 :type '(choice (const t) integer)
59412
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
376 :group 'desktop
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59487
diff changeset
377 :version "22.1")
59412
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
378
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
379 (defcustom desktop-lazy-verbose t
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
380 "Verbose reporting of lazily created buffers."
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
381 :type 'boolean
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
382 :group 'desktop
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59487
diff changeset
383 :version "22.1")
59412
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
384
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
385 (defcustom desktop-lazy-idle-delay 5
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
386 "Idle delay before starting to create buffers.
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
387 See `desktop-restore-eager'."
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
388 :type 'integer
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
389 :group 'desktop
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59487
diff changeset
390 :version "22.1")
59412
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
391
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
392 ;;;###autoload
55155
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
393 (defvar desktop-save-buffer nil
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
394 "When non-nil, save buffer status in desktop file.
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
395 This variable becomes buffer local when set.
55155
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
396
64674
b110ecf69f54 (desktop-save-buffer): Fix typos in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 64566
diff changeset
397 If the value is a function, it is called by `desktop-save' with argument
b110ecf69f54 (desktop-save-buffer): Fix typos in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 64566
diff changeset
398 DESKTOP-DIRNAME to obtain auxiliary information to save in the desktop
55155
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
399 file along with the state of the buffer for which it was called.
32447
cfae1c82d702 Added extensible special buffer support to desktop.el. See the
John Wiegley <johnw@newartisans.com>
parents: 32366
diff changeset
400
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
401 When file names are returned, they should be formatted using the call
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
402 \"(desktop-file-name FILE-NAME DESKTOP-DIRNAME)\".
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
403
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
404 Later, when `desktop-read' evaluates the desktop file, auxiliary information
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
405 is passed as the argument DESKTOP-BUFFER-MISC to functions in
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
406 `desktop-buffer-mode-handlers'.")
55155
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
407 (make-variable-buffer-local 'desktop-save-buffer)
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
408 (make-obsolete-variable 'desktop-buffer-modes-to-save
64490
e22e42dbaf76 (desktop-enable, desktop-buffer-modes-to-save, (desktop-buffer-misc-functions,
Juanma Barranquero <lekktu@gmail.com>
parents: 64254
diff changeset
409 'desktop-save-buffer "22.1")
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
410 (make-obsolete-variable 'desktop-buffer-misc-functions
64490
e22e42dbaf76 (desktop-enable, desktop-buffer-modes-to-save, (desktop-buffer-misc-functions,
Juanma Barranquero <lekktu@gmail.com>
parents: 64254
diff changeset
411 'desktop-save-buffer "22.1")
32447
cfae1c82d702 Added extensible special buffer support to desktop.el. See the
John Wiegley <johnw@newartisans.com>
parents: 32366
diff changeset
412
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
413 ;;;###autoload
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
414 (defvar desktop-buffer-mode-handlers
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
415 nil
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
416 "Alist of major mode specific functions to restore a desktop buffer.
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
417 Functions listed are called by `desktop-create-buffer' when `desktop-read'
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
418 evaluates the desktop file. List elements must have the form
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
419
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
420 (MAJOR-MODE . RESTORE-BUFFER-FUNCTION).
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
421
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
422 Buffers with a major mode not specified here, are restored by the default
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
423 handler `desktop-restore-file-buffer'.
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
424
55413
f30ad6214291 (desktop-buffer-mode-handlers): Fix docstring.
Lars Hansen <larsh@soem.dk>
parents: 55179
diff changeset
425 Handlers are called with argument list
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
426
55418
b92f1b7ca228 (desktop-buffer-mode-handlers): Fix docstring.
Lars Hansen <larsh@soem.dk>
parents: 55413
diff changeset
427 (DESKTOP-BUFFER-FILE-NAME DESKTOP-BUFFER-NAME DESKTOP-BUFFER-MISC)
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
428
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
429 Furthermore, they may use the following variables:
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
430
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
431 desktop-file-version
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
432 desktop-buffer-major-mode
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
433 desktop-buffer-minor-modes
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
434 desktop-buffer-point
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
435 desktop-buffer-mark
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
436 desktop-buffer-read-only
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
437 desktop-buffer-locals
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
438
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
439 If a handler returns a buffer, then the saved mode settings
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
440 and variable values for that buffer are copied into it.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
441
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
442 Modules that define a major mode that needs a special handler should contain
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
443 code like
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
444
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
445 (defun foo-restore-desktop-buffer
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
446 ...
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
447 (add-to-list 'desktop-buffer-mode-handlers
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
448 '(foo-mode . foo-restore-desktop-buffer))
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
449
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
450 Furthermore the major mode function must be autoloaded.")
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
451
64963
527df96e5eda Put autoload cookie at risky-local-variable declarations.
Andreas Schwab <schwab@suse.de>
parents: 64893
diff changeset
452 ;;;###autoload
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
453 (put 'desktop-buffer-mode-handlers 'risky-local-variable t)
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
454 (make-obsolete-variable 'desktop-buffer-handlers
64490
e22e42dbaf76 (desktop-enable, desktop-buffer-modes-to-save, (desktop-buffer-misc-functions,
Juanma Barranquero <lekktu@gmail.com>
parents: 64254
diff changeset
455 'desktop-buffer-mode-handlers "22.1")
32447
cfae1c82d702 Added extensible special buffer support to desktop.el. See the
John Wiegley <johnw@newartisans.com>
parents: 32366
diff changeset
456
28719
f56c181fb849 (desktop-save): Save list of minor modes.
Gerd Moellmann <gerd@gnu.org>
parents: 27577
diff changeset
457 (defcustom desktop-minor-mode-table
f56c181fb849 (desktop-save): Save list of minor modes.
Gerd Moellmann <gerd@gnu.org>
parents: 27577
diff changeset
458 '((auto-fill-function auto-fill-mode)
67560
2d2062823ea5 (desktop-minor-mode-table): Add vc-dired-mode with nil.
Juri Linkov <juri@jurta.org>
parents: 66278
diff changeset
459 (vc-mode nil)
85771
a7aa5ee6bc3a Revert bad erc-track change; ignore erc-track-minor-mode properly in desktop
Michael Olson <mwolson@gnu.org>
parents: 85697
diff changeset
460 (vc-dired-mode nil)
94425
780f88412851 (desktop-minor-mode-table): Add `savehist-mode'.
Juanma Barranquero <lekktu@gmail.com>
parents: 94026
diff changeset
461 (erc-track-minor-mode nil)
780f88412851 (desktop-minor-mode-table): Add `savehist-mode'.
Juanma Barranquero <lekktu@gmail.com>
parents: 94026
diff changeset
462 (savehist-mode nil))
28719
f56c181fb849 (desktop-save): Save list of minor modes.
Gerd Moellmann <gerd@gnu.org>
parents: 27577
diff changeset
463 "Table mapping minor mode variables to minor mode functions.
f56c181fb849 (desktop-save): Save list of minor modes.
Gerd Moellmann <gerd@gnu.org>
parents: 27577
diff changeset
464 Each entry has the form (NAME RESTORE-FUNCTION).
f56c181fb849 (desktop-save): Save list of minor modes.
Gerd Moellmann <gerd@gnu.org>
parents: 27577
diff changeset
465 NAME is the name of the buffer-local variable indicating that the minor
f56c181fb849 (desktop-save): Save list of minor modes.
Gerd Moellmann <gerd@gnu.org>
parents: 27577
diff changeset
466 mode is active. RESTORE-FUNCTION is the function to activate the minor mode.
77991
a5fe5ff427e0 (desktop-minor-mode-table): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 77115
diff changeset
467 RESTORE-FUNCTION nil means don't try to restore the minor mode.
28719
f56c181fb849 (desktop-save): Save list of minor modes.
Gerd Moellmann <gerd@gnu.org>
parents: 27577
diff changeset
468 Only minor modes for which the name of the buffer-local variable
55871
27173676bedf (desktop-save): Don't save minor modes without a known mode initialization function.
Lars Hansen <larsh@soem.dk>
parents: 55418
diff changeset
469 and the name of the minor mode function are different have to be added to
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
470 this table. See also `desktop-minor-mode-handlers'."
28719
f56c181fb849 (desktop-save): Save list of minor modes.
Gerd Moellmann <gerd@gnu.org>
parents: 27577
diff changeset
471 :type 'sexp
f56c181fb849 (desktop-save): Save list of minor modes.
Gerd Moellmann <gerd@gnu.org>
parents: 27577
diff changeset
472 :group 'desktop)
f56c181fb849 (desktop-save): Save list of minor modes.
Gerd Moellmann <gerd@gnu.org>
parents: 27577
diff changeset
473
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
474 ;;;###autoload
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
475 (defvar desktop-minor-mode-handlers
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
476 nil
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
477 "Alist of functions to restore non-standard minor modes.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
478 Functions are called by `desktop-create-buffer' to restore minor modes.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
479 List elements must have the form
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
480
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
481 (MINOR-MODE . RESTORE-FUNCTION).
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
482
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
483 Minor modes not specified here, are restored by the standard minor mode
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
484 function.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
485
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
486 Handlers are called with argument list
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
487
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
488 (DESKTOP-BUFFER-LOCALS)
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
489
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
490 Furthermore, they may use the following variables:
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
491
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
492 desktop-file-version
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
493 desktop-buffer-file-name
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
494 desktop-buffer-name
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
495 desktop-buffer-major-mode
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
496 desktop-buffer-minor-modes
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
497 desktop-buffer-point
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
498 desktop-buffer-mark
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
499 desktop-buffer-read-only
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
500 desktop-buffer-misc
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
501
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
502 When a handler is called, the buffer has been created and the major mode has
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
503 been set, but local variables listed in desktop-buffer-locals has not yet been
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
504 created and set.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
505
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
506 Modules that define a minor mode that needs a special handler should contain
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
507 code like
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
508
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
509 (defun foo-desktop-restore
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
510 ...
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
511 (add-to-list 'desktop-minor-mode-handlers
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
512 '(foo-mode . foo-desktop-restore))
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
513
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
514 Furthermore the minor mode function must be autoloaded.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
515
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
516 See also `desktop-minor-mode-table'.")
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
517
64963
527df96e5eda Put autoload cookie at risky-local-variable declarations.
Andreas Schwab <schwab@suse.de>
parents: 64893
diff changeset
518 ;;;###autoload
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
519 (put 'desktop-minor-mode-handlers 'risky-local-variable t)
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
520
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
521 ;; ----------------------------------------------------------------------------
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
522 (defvar desktop-dirname nil
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
523 "The directory in which the desktop file should be saved.")
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
525 (defun desktop-full-file-name (&optional dirname)
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
526 "Return the full name of the desktop file in DIRNAME.
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
527 DIRNAME omitted or nil means use `desktop-dirname'."
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
528 (expand-file-name desktop-base-file-name (or dirname desktop-dirname)))
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
529
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
530 (defun desktop-full-lock-name (&optional dirname)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
531 "Return the full name of the desktop lock file in DIRNAME.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
532 DIRNAME omitted or nil means use `desktop-dirname'."
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
533 (expand-file-name desktop-base-lock-name (or dirname desktop-dirname)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
534
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 (defconst desktop-header
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
536 ";; --------------------------------------------------------------------------
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
537 ;; Desktop File for Emacs
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
538 ;; --------------------------------------------------------------------------
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 " "*Header to place in Desktop file.")
5788
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
540
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
541 (defvar desktop-delay-hook nil
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
542 "Hooks run after all buffers are loaded; intended for internal use.")
20526
ec0a8ccddd6c (desktop-enable): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18581
diff changeset
543
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
544 ;; ----------------------------------------------------------------------------
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
545 ;; Desktop file conflict detection
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
546 (defvar desktop-file-modtime nil
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
547 "When the desktop file was last modified to the knowledge of this Emacs.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
548 Used to detect desktop file conflicts.")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
549
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
550 (defun desktop-owner (&optional dirname)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
551 "Return the PID of the Emacs process that owns the desktop file in DIRNAME.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
552 Return nil if no desktop file found or no Emacs process is using it.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
553 DIRNAME omitted or nil means use `desktop-dirname'."
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
554 (let (owner)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
555 (and (file-exists-p (desktop-full-lock-name dirname))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
556 (condition-case nil
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
557 (with-temp-buffer
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
558 (insert-file-contents-literally (desktop-full-lock-name dirname))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
559 (goto-char (point-min))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
560 (setq owner (read (current-buffer)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
561 (integerp owner))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
562 (error nil))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
563 owner)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
564
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
565 (defun desktop-claim-lock (&optional dirname)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
566 "Record this Emacs process as the owner of the desktop file in DIRNAME.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
567 DIRNAME omitted or nil means use `desktop-dirname'."
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
568 (write-region (number-to-string (emacs-pid)) nil
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
569 (desktop-full-lock-name dirname)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
570
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
571 (defun desktop-release-lock (&optional dirname)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
572 "Remove the lock file for the desktop in DIRNAME.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
573 DIRNAME omitted or nil means use `desktop-dirname'."
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
574 (let ((file (desktop-full-lock-name dirname)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
575 (when (file-exists-p file) (delete-file file))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
576
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
577 ;; ----------------------------------------------------------------------------
54206
ecf0e7a0567a (desktop-file-version, desktop-after-read-hook): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 52996
diff changeset
578 (defun desktop-truncate (list n)
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
579 "Truncate LIST to at most N elements destructively."
54206
ecf0e7a0567a (desktop-file-version, desktop-after-read-hook): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 52996
diff changeset
580 (let ((here (nthcdr (1- n) list)))
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
581 (when (consp here)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
582 (setcdr here nil))))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
583
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
584 ;; ----------------------------------------------------------------------------
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
585 ;;;###autoload
18581
45f27efe77c7 (desktop-clear-preserve-buffers): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18527
diff changeset
586 (defun desktop-clear ()
45f27efe77c7 (desktop-clear-preserve-buffers): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18527
diff changeset
587 "Empty the Desktop.
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
588 This kills all buffers except for internal ones and those with names matched by
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
589 a regular expression in the list `desktop-clear-preserve-buffers'.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
590 Furthermore, it clears the variables listed in `desktop-globals-to-clear'."
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 (interactive)
59412
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
592 (desktop-lazy-abort)
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
593 (dolist (var desktop-globals-to-clear)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
594 (if (symbolp var)
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
595 (eval `(setq-default ,var nil))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
596 (eval `(setq-default ,(car var) ,(cdr var)))))
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
597 (let ((buffers (buffer-list))
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
598 (preserve-regexp (concat "^\\("
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
599 (mapconcat (lambda (regexp)
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
600 (concat "\\(" regexp "\\)"))
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
601 desktop-clear-preserve-buffers
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
602 "\\|")
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
603 "\\)$")))
18581
45f27efe77c7 (desktop-clear-preserve-buffers): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18527
diff changeset
604 (while buffers
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
605 (let ((bufname (buffer-name (car buffers))))
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
606 (or
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
607 (null bufname)
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
608 (string-match preserve-regexp bufname)
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
609 ;; Don't kill buffers made for internal purposes.
64519
a9ca2e64f9c1 (desktop-enable, desktop-basefilename): Declare with
Juanma Barranquero <lekktu@gmail.com>
parents: 64490
diff changeset
610 (and (not (equal bufname "")) (eq (aref bufname 0) ?\s))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
611 (kill-buffer (car buffers))))
18581
45f27efe77c7 (desktop-clear-preserve-buffers): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18527
diff changeset
612 (setq buffers (cdr buffers))))
5314
e65e125e5334 Add keywords.
Richard M. Stallman <rms@gnu.org>
parents: 4830
diff changeset
613 (delete-other-windows))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
614
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
615 ;; ----------------------------------------------------------------------------
5788
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
616 (add-hook 'kill-emacs-hook 'desktop-kill)
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
617
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 (defun desktop-kill ()
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
619 "If `desktop-save-mode' is non-nil, do what `desktop-save' says to do.
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
620 If the desktop should be saved and `desktop-dirname'
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
621 is nil, ask the user where to save the desktop."
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
622 (when (and desktop-save-mode
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
623 (let ((exists (file-exists-p (desktop-full-file-name))))
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
624 (or (eq desktop-save t)
108132
5e9162ac53b2 desktop.el (desktop-kill): ask-if-new: Ask if desktop file exists,
Jan D. <jan.h.d@swipnet.se>
parents: 107543
diff changeset
625 (and exists (eq desktop-save 'if-exists))
5e9162ac53b2 desktop.el (desktop-kill): ask-if-new: Ask if desktop file exists,
Jan D. <jan.h.d@swipnet.se>
parents: 107543
diff changeset
626 ;; If it exists, but we aren't using it, we are going
5e9162ac53b2 desktop.el (desktop-kill): ask-if-new: Ask if desktop file exists,
Jan D. <jan.h.d@swipnet.se>
parents: 107543
diff changeset
627 ;; to ask for a new directory below.
5e9162ac53b2 desktop.el (desktop-kill): ask-if-new: Ask if desktop file exists,
Jan D. <jan.h.d@swipnet.se>
parents: 107543
diff changeset
628 (and exists desktop-dirname (eq desktop-save 'ask-if-new))
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
629 (and
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
630 (or (memq desktop-save '(ask ask-if-new))
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
631 (and exists (eq desktop-save 'ask-if-exists)))
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
632 (y-or-n-p "Save desktop? ")))))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
633 (unless desktop-dirname
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
634 (setq desktop-dirname
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
635 (file-name-as-directory
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
636 (expand-file-name
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
637 (read-directory-name "Directory for desktop file: " nil nil t)))))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
638 (condition-case err
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
639 (desktop-save desktop-dirname t)
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
640 (file-error
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
641 (unless (yes-or-no-p "Error while saving the desktop. Ignore? ")
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
642 (signal (car err) (cdr err))))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
643 ;; If we own it, we don't anymore.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
644 (when (eq (emacs-pid) (desktop-owner)) (desktop-release-lock)))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
645
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
646 ;; ----------------------------------------------------------------------------
14754
9955249f9b0f (desktop-list*): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14172
diff changeset
647 (defun desktop-list* (&rest args)
9955249f9b0f (desktop-list*): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14172
diff changeset
648 (if (null (cdr args))
9955249f9b0f (desktop-list*): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14172
diff changeset
649 (car args)
9955249f9b0f (desktop-list*): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14172
diff changeset
650 (setq args (nreverse args))
9955249f9b0f (desktop-list*): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14172
diff changeset
651 (let ((value (cons (nth 1 args) (car args))))
9955249f9b0f (desktop-list*): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14172
diff changeset
652 (setq args (cdr (cdr args)))
9955249f9b0f (desktop-list*): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14172
diff changeset
653 (while args
9955249f9b0f (desktop-list*): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14172
diff changeset
654 (setq value (cons (car args) value))
9955249f9b0f (desktop-list*): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14172
diff changeset
655 (setq args (cdr args)))
9955249f9b0f (desktop-list*): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14172
diff changeset
656 value)))
9955249f9b0f (desktop-list*): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14172
diff changeset
657
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
658 ;; ----------------------------------------------------------------------------
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
659 (defun desktop-buffer-info (buffer)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
660 (set-buffer buffer)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
661 (list
91841
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
662 ;; base name of the buffer; replaces the buffer name if managed by uniquify
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
663 (and (fboundp 'uniquify-buffer-base-name) (uniquify-buffer-base-name))
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
664 ;; basic information
78110
33c9a00ace1e (desktop-buffer-info, desktop-save): Use `desktop-dirname' instead of `dirname'.
Juanma Barranquero <lekktu@gmail.com>
parents: 78046
diff changeset
665 (desktop-file-name (buffer-file-name) desktop-dirname)
91841
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
666 (buffer-name)
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
667 major-mode
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
668 ;; minor modes
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
669 (let (ret)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
670 (mapc
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
671 #'(lambda (minor-mode)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
672 (and (boundp minor-mode)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
673 (symbol-value minor-mode)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
674 (let* ((special (assq minor-mode desktop-minor-mode-table))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
675 (value (cond (special (cadr special))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
676 ((functionp minor-mode) minor-mode))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
677 (when value (add-to-list 'ret value)))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
678 (mapcar #'car minor-mode-alist))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
679 ret)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
680 ;; point and mark, and read-only status
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
681 (point)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
682 (list (mark t) mark-active)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
683 buffer-read-only
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
684 ;; auxiliary information
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
685 (when (functionp desktop-save-buffer)
78110
33c9a00ace1e (desktop-buffer-info, desktop-save): Use `desktop-dirname' instead of `dirname'.
Juanma Barranquero <lekktu@gmail.com>
parents: 78046
diff changeset
686 (funcall desktop-save-buffer desktop-dirname))
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
687 ;; local variables
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
688 (let ((locals desktop-locals-to-save)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
689 (loclist (buffer-local-variables))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
690 (ll))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
691 (while locals
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
692 (let ((here (assq (car locals) loclist)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
693 (if here
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
694 (setq ll (cons here ll))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
695 (when (member (car locals) loclist)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
696 (setq ll (cons (car locals) ll)))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
697 (setq locals (cdr locals)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
698 ll)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
699
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
700 ;; ----------------------------------------------------------------------------
54206
ecf0e7a0567a (desktop-file-version, desktop-after-read-hook): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 52996
diff changeset
701 (defun desktop-internal-v2s (value)
10595
06fa5b312280 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 9776
diff changeset
702 "Convert VALUE to a pair (QUOTE . TXT); (eval (read TXT)) gives VALUE.
06fa5b312280 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 9776
diff changeset
703 TXT is a string that when read and evaluated yields value.
06fa5b312280 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 9776
diff changeset
704 QUOTE may be `may' (value may be quoted),
06fa5b312280 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 9776
diff changeset
705 `must' (values must be quoted), or nil (value may not be quoted)."
5788
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
706 (cond
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
707 ((or (numberp value) (null value) (eq t value) (keywordp value))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
708 (cons 'may (prin1-to-string value)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
709 ((stringp value)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
710 (let ((copy (copy-sequence value)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
711 (set-text-properties 0 (length copy) nil copy)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
712 ;; Get rid of text properties because we cannot read them
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
713 (cons 'may (prin1-to-string copy))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
714 ((symbolp value)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
715 (cons 'must (prin1-to-string value)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
716 ((vectorp value)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
717 (let* ((special nil)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
718 (pass1 (mapcar
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
719 (lambda (el)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
720 (let ((res (desktop-internal-v2s el)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
721 (if (null (car res))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
722 (setq special t))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
723 res))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
724 value)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
725 (if special
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
726 (cons nil (concat "(vector "
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
727 (mapconcat (lambda (el)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
728 (if (eq (car el) 'must)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
729 (concat "'" (cdr el))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
730 (cdr el)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
731 pass1
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
732 " ")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
733 ")"))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
734 (cons 'may (concat "[" (mapconcat 'cdr pass1 " ") "]")))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
735 ((consp value)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
736 (let ((p value)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
737 newlist
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
738 use-list*
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
739 anynil)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
740 (while (consp p)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
741 (let ((q.txt (desktop-internal-v2s (car p))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
742 (or anynil (setq anynil (null (car q.txt))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
743 (setq newlist (cons q.txt newlist)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
744 (setq p (cdr p)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
745 (if p
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
746 (let ((last (desktop-internal-v2s p)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
747 (or anynil (setq anynil (null (car last))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
748 (or anynil
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
749 (setq newlist (cons '(must . ".") newlist)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
750 (setq use-list* t)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
751 (setq newlist (cons last newlist))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
752 (setq newlist (nreverse newlist))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
753 (if anynil
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
754 (cons nil
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
755 (concat (if use-list* "(desktop-list* " "(list ")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
756 (mapconcat (lambda (el)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
757 (if (eq (car el) 'must)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
758 (concat "'" (cdr el))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
759 (cdr el)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
760 newlist
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
761 " ")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
762 ")"))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
763 (cons 'must
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
764 (concat "(" (mapconcat 'cdr newlist " ") ")")))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
765 ((subrp value)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
766 (cons nil (concat "(symbol-function '"
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
767 (substring (prin1-to-string value) 7 -1)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
768 ")")))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
769 ((markerp value)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
770 (let ((pos (prin1-to-string (marker-position value)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
771 (buf (prin1-to-string (buffer-name (marker-buffer value)))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
772 (cons nil (concat "(let ((mk (make-marker)))"
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
773 " (add-hook 'desktop-delay-hook"
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
774 " (list 'lambda '() (list 'set-marker mk "
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
775 pos " (get-buffer " buf ")))) mk)"))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
776 (t ; save as text
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
777 (cons 'may "\"Unprintable entity\""))))
5788
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
778
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
779 ;; ----------------------------------------------------------------------------
54206
ecf0e7a0567a (desktop-file-version, desktop-after-read-hook): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 52996
diff changeset
780 (defun desktop-value-to-string (value)
10595
06fa5b312280 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 9776
diff changeset
781 "Convert VALUE to a string that when read evaluates to the same value.
06fa5b312280 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 9776
diff changeset
782 Not all types of values are supported."
5788
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
783 (let* ((print-escape-newlines t)
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
784 (float-output-format nil)
54206
ecf0e7a0567a (desktop-file-version, desktop-after-read-hook): Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 52996
diff changeset
785 (quote.txt (desktop-internal-v2s value))
5788
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
786 (quote (car quote.txt))
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
787 (txt (cdr quote.txt)))
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
788 (if (eq quote 'must)
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
789 (concat "'" txt)
913f27480fad (desktop-internal-v2s): Allow saving of markers and subrs.
Richard M. Stallman <rms@gnu.org>
parents: 5465
diff changeset
790 txt)))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
791
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
792 ;; ----------------------------------------------------------------------------
13154
f86e18ff3736 (desktop-outvar): Support truncation.
Richard M. Stallman <rms@gnu.org>
parents: 11224
diff changeset
793 (defun desktop-outvar (varspec)
f86e18ff3736 (desktop-outvar): Support truncation.
Richard M. Stallman <rms@gnu.org>
parents: 11224
diff changeset
794 "Output a setq statement for variable VAR to the desktop file.
f86e18ff3736 (desktop-outvar): Support truncation.
Richard M. Stallman <rms@gnu.org>
parents: 11224
diff changeset
795 The argument VARSPEC may be the variable name VAR (a symbol),
68775
01a75c5115e7 (desktop-outvar): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
796 or a cons cell of the form (VAR . MAX-SIZE),
13154
f86e18ff3736 (desktop-outvar): Support truncation.
Richard M. Stallman <rms@gnu.org>
parents: 11224
diff changeset
797 which means to truncate VAR's value to at most MAX-SIZE elements
f86e18ff3736 (desktop-outvar): Support truncation.
Richard M. Stallman <rms@gnu.org>
parents: 11224
diff changeset
798 \(if the value is a list) before saving the value."
f86e18ff3736 (desktop-outvar): Support truncation.
Richard M. Stallman <rms@gnu.org>
parents: 11224
diff changeset
799 (let (var size)
f86e18ff3736 (desktop-outvar): Support truncation.
Richard M. Stallman <rms@gnu.org>
parents: 11224
diff changeset
800 (if (consp varspec)
f86e18ff3736 (desktop-outvar): Support truncation.
Richard M. Stallman <rms@gnu.org>
parents: 11224
diff changeset
801 (setq var (car varspec) size (cdr varspec))
f86e18ff3736 (desktop-outvar): Support truncation.
Richard M. Stallman <rms@gnu.org>
parents: 11224
diff changeset
802 (setq var varspec))
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
803 (when (boundp var)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
804 (when (and (integerp size)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
805 (> size 0)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
806 (listp (eval var)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
807 (desktop-truncate (eval var) size))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
808 (insert "(setq "
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
809 (symbol-name var)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
810 " "
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
811 (desktop-value-to-string (symbol-value var))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
812 ")\n"))))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
813
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
814 ;; ----------------------------------------------------------------------------
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
815 (defun desktop-save-buffer-p (filename bufname mode &rest dummy)
55155
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
816 "Return t if buffer should have its state saved in the desktop file.
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
817 FILENAME is the visited file name, BUFNAME is the buffer name, and
68775
01a75c5115e7 (desktop-outvar): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
818 MODE is the major mode.
01a75c5115e7 (desktop-outvar): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
819 \n\(fn FILENAME BUFNAME MODE)"
107543
c56cc351f300 Close bug#5755.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
820 (let ((case-fold-search nil)
c56cc351f300 Close bug#5755.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
821 dired-skip)
103958
f261612c30a6 (desktop-buffers-not-to-save): Default value is nil. Accept nil in
Eli Zaretskii <eliz@gnu.org>
parents: 103872
diff changeset
822 (and (not (and (stringp desktop-buffers-not-to-save)
f261612c30a6 (desktop-buffers-not-to-save): Default value is nil. Accept nil in
Eli Zaretskii <eliz@gnu.org>
parents: 103872
diff changeset
823 (not filename)
f261612c30a6 (desktop-buffers-not-to-save): Default value is nil. Accept nil in
Eli Zaretskii <eliz@gnu.org>
parents: 103872
diff changeset
824 (string-match desktop-buffers-not-to-save bufname)))
55155
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
825 (not (memq mode desktop-modes-not-to-save))
107543
c56cc351f300 Close bug#5755.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
826 ;; FIXME this is broken if desktop-files-not-to-save is nil.
55155
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
827 (or (and filename
103958
f261612c30a6 (desktop-buffers-not-to-save): Default value is nil. Accept nil in
Eli Zaretskii <eliz@gnu.org>
parents: 103872
diff changeset
828 (stringp desktop-files-not-to-save)
55155
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
829 (not (string-match desktop-files-not-to-save filename)))
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
830 (and (eq mode 'dired-mode)
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
831 (with-current-buffer bufname
107543
c56cc351f300 Close bug#5755.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
832 (not (setq dired-skip
c56cc351f300 Close bug#5755.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
833 (string-match desktop-files-not-to-save
c56cc351f300 Close bug#5755.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
834 default-directory)))))
55155
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
835 (and (null filename)
107543
c56cc351f300 Close bug#5755.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
836 (null dired-skip) ; bug#5755
55155
519f44af960a (desktop-buffer-misc-data-function): Rename to desktop-save-buffer and change docstring.
Lars Hansen <larsh@soem.dk>
parents: 55059
diff changeset
837 (with-current-buffer bufname desktop-save-buffer))))))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
838
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
839 ;; ----------------------------------------------------------------------------
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
840 (defun desktop-file-name (filename dirname)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
841 "Convert FILENAME to format specified in `desktop-file-name-format'.
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
842 DIRNAME must be the directory in which the desktop file will be saved."
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
843 (cond
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
844 ((not filename) nil)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
845 ((eq desktop-file-name-format 'tilde)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
846 (let ((relative-name (file-relative-name (expand-file-name filename) "~")))
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
847 (cond
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
848 ((file-name-absolute-p relative-name) relative-name)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
849 ((string= "./" relative-name) "~/")
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
850 ((string= "." relative-name) "~")
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
851 (t (concat "~/" relative-name)))))
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
852 ((eq desktop-file-name-format 'local) (file-relative-name filename dirname))
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
853 (t (expand-file-name filename))))
48143
8c7919f99581 (desktop-relative-file-names): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 43831
diff changeset
854
90951
3619e7770f2e Merge from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 90918 81324
diff changeset
855
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
856 ;; ----------------------------------------------------------------------------
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
857 ;;;###autoload
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
858 (defun desktop-save (dirname &optional release)
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
859 "Save the desktop in a desktop file.
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
860 Parameter DIRNAME specifies where to save the desktop file.
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
861 Optional parameter RELEASE says whether we're done with this desktop.
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
862 See also `desktop-base-file-name'."
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 (interactive "DDirectory to save desktop file in: ")
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
864 (setq desktop-dirname (file-name-as-directory (expand-file-name dirname)))
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 (save-excursion
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
866 (let ((eager desktop-restore-eager)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
867 (new-modtime (nth 5 (file-attributes (desktop-full-file-name)))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
868 (when
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
869 (or (not new-modtime) ; nothing to overwrite
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
870 (equal desktop-file-modtime new-modtime)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
871 (yes-or-no-p (if desktop-file-modtime
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
872 (if (> (float-time new-modtime) (float-time desktop-file-modtime))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
873 "Desktop file is more recent than the one loaded. Save anyway? "
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
874 "Desktop file isn't the one loaded. Overwrite it? ")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
875 "Current desktop was not loaded from a file. Overwrite this desktop file? "))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
876 (unless release (error "Desktop file conflict")))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
877
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
878 ;; If we're done with it, release the lock.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
879 ;; Otherwise, claim it if it's unclaimed or if we created it.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
880 (if release
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
881 (desktop-release-lock)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
882 (unless (and new-modtime (desktop-owner)) (desktop-claim-lock)))
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
884 (with-temp-buffer
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
885 (insert
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
886 ";; -*- mode: emacs-lisp; coding: emacs-mule; -*-\n"
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
887 desktop-header
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
888 ";; Created " (current-time-string) "\n"
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
889 ";; Desktop file format version " desktop-file-version "\n"
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
890 ";; Emacs version " emacs-version "\n")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
891 (save-excursion (run-hooks 'desktop-save-hook))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
892 (goto-char (point-max))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
893 (insert "\n;; Global section:\n")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
894 (mapc (function desktop-outvar) desktop-globals-to-save)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
895 (when (memq 'kill-ring desktop-globals-to-save)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
896 (insert
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
897 "(setq kill-ring-yank-pointer (nthcdr "
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
898 (int-to-string (- (length kill-ring) (length kill-ring-yank-pointer)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
899 " kill-ring))\n"))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
900
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
901 (insert "\n;; Buffer section -- buffers listed in same order as in buffer list:\n")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
902 (dolist (l (mapcar 'desktop-buffer-info (buffer-list)))
91841
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
903 (let ((base (pop l)))
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
904 (when (apply 'desktop-save-buffer-p l)
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
905 (insert "("
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
906 (if (or (not (integerp eager))
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
907 (if (zerop eager)
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
908 nil
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
909 (setq eager (1- eager))))
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
910 "desktop-create-buffer"
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
911 "desktop-append-buffer-args")
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
912 " "
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
913 desktop-file-version)
92328
04dddf68dfc0 (desktop-save): Save the buffer name if the uniquified base name is empty.
Juanma Barranquero <lekktu@gmail.com>
parents: 91841
diff changeset
914 ;; If there's a non-empty base name, we save it instead of the buffer name
04dddf68dfc0 (desktop-save): Save the buffer name if the uniquified base name is empty.
Juanma Barranquero <lekktu@gmail.com>
parents: 91841
diff changeset
915 (when (and base (not (string= base "")))
04dddf68dfc0 (desktop-save): Save the buffer name if the uniquified base name is empty.
Juanma Barranquero <lekktu@gmail.com>
parents: 91841
diff changeset
916 (setcar (nthcdr 1 l) base))
91841
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
917 (dolist (e l)
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
918 (insert "\n " (desktop-value-to-string e)))
93224b3daf2a (uniquify-managed): Don't defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 91810
diff changeset
919 (insert ")\n\n"))))
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
920
78110
33c9a00ace1e (desktop-buffer-info, desktop-save): Use `desktop-dirname' instead of `dirname'.
Juanma Barranquero <lekktu@gmail.com>
parents: 78046
diff changeset
921 (setq default-directory desktop-dirname)
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
922 (let ((coding-system-for-write 'emacs-mule))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
923 (write-region (point-min) (point-max) (desktop-full-file-name) nil 'nomessage))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
924 ;; We remember when it was modified (which is presumably just now).
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
925 (setq desktop-file-modtime (nth 5 (file-attributes (desktop-full-file-name)))))))))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
926
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
927 ;; ----------------------------------------------------------------------------
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
928 ;;;###autoload
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 (defun desktop-remove ()
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
930 "Delete desktop file in `desktop-dirname'.
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
931 This function also sets `desktop-dirname' to nil."
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 (interactive)
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
933 (when desktop-dirname
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
934 (let ((filename (desktop-full-file-name)))
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
935 (setq desktop-dirname nil)
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
936 (when (file-exists-p filename)
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
937 (delete-file filename)))))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
938
59412
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
939 (defvar desktop-buffer-args-list nil
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
940 "List of args for `desktop-create-buffer'.")
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
941
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
942 (defvar desktop-lazy-timer nil)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
943
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
944 ;; ----------------------------------------------------------------------------
21303
346595905ae4 (desktop-load-default): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 20772
diff changeset
945 ;;;###autoload
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
946 (defun desktop-read (&optional dirname)
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
947 "Read and process the desktop file in directory DIRNAME.
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
948 Look for a desktop file in DIRNAME, or if DIRNAME is omitted, look in
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
949 directories listed in `desktop-path'. If a desktop file is found, it
64490
e22e42dbaf76 (desktop-enable, desktop-buffer-modes-to-save, (desktop-buffer-misc-functions,
Juanma Barranquero <lekktu@gmail.com>
parents: 64254
diff changeset
950 is processed and `desktop-after-read-hook' is run. If no desktop file
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
951 is found, clear the desktop and run `desktop-no-desktop-file-hook'.
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
952 This function is a no-op when Emacs is running in batch mode.
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
953 It returns t if a desktop file was loaded, nil otherwise."
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
954 (interactive)
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
955 (unless noninteractive
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
956 (setq desktop-dirname
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
957 (file-name-as-directory
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
958 (expand-file-name
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
959 (or
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
960 ;; If DIRNAME is specified, use it.
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
961 (and (< 0 (length dirname)) dirname)
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
962 ;; Otherwise search desktop file in desktop-path.
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
963 (let ((dirs desktop-path))
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
964 (while (and dirs
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
965 (not (file-exists-p
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
966 (desktop-full-file-name (car dirs)))))
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
967 (setq dirs (cdr dirs)))
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
968 (and dirs (car dirs)))
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
969 ;; If not found and `desktop-path' is non-nil, use its first element.
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
970 (and desktop-path (car desktop-path))
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
971 ;; Default: Home directory.
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
972 "~"))))
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
973 (if (file-exists-p (desktop-full-file-name))
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
974 ;; Desktop file found, but is it already in use?
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
975 (let ((desktop-first-buffer nil)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
976 (desktop-buffer-ok-count 0)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
977 (desktop-buffer-fail-count 0)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
978 (owner (desktop-owner))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
979 ;; Avoid desktop saving during evaluation of desktop buffer.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
980 (desktop-save nil))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
981 (if (and owner
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
982 (memq desktop-load-locked-desktop '(nil ask))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
983 (or (null desktop-load-locked-desktop)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
984 (not (y-or-n-p (format "Warning: desktop file appears to be in use by PID %s.\n\
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
985 Using it may cause conflicts. Use it anyway? " owner)))))
92364
4cf1d5a7cc52 (desktop-read): Set `desktop-dirname' to nil before running
Juanma Barranquero <lekktu@gmail.com>
parents: 92328
diff changeset
986 (let ((default-directory desktop-dirname))
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
987 (setq desktop-dirname nil)
92364
4cf1d5a7cc52 (desktop-read): Set `desktop-dirname' to nil before running
Juanma Barranquero <lekktu@gmail.com>
parents: 92328
diff changeset
988 (run-hooks 'desktop-not-loaded-hook)
4cf1d5a7cc52 (desktop-read): Set `desktop-dirname' to nil before running
Juanma Barranquero <lekktu@gmail.com>
parents: 92328
diff changeset
989 (unless desktop-dirname
4cf1d5a7cc52 (desktop-read): Set `desktop-dirname' to nil before running
Juanma Barranquero <lekktu@gmail.com>
parents: 92328
diff changeset
990 (message "Desktop file in use; not loaded.")))
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
991 (desktop-lazy-abort)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
992 ;; Evaluate desktop buffer and remember when it was modified.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
993 (load (desktop-full-file-name) t t t)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
994 (setq desktop-file-modtime (nth 5 (file-attributes (desktop-full-file-name))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
995 ;; If it wasn't already, mark it as in-use, to bother other
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
996 ;; desktop instances.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
997 (unless owner
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
998 (condition-case nil
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
999 (desktop-claim-lock)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1000 (file-error (message "Couldn't record use of desktop file")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1001 (sit-for 1))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1002
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1003 ;; `desktop-create-buffer' puts buffers at end of the buffer list.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1004 ;; We want buffers existing prior to evaluating the desktop (and
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1005 ;; not reused) to be placed at the end of the buffer list, so we
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1006 ;; move them here.
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1007 (mapc 'bury-buffer
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1008 (nreverse (cdr (memq desktop-first-buffer (nreverse (buffer-list))))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1009 (switch-to-buffer (car (buffer-list)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1010 (run-hooks 'desktop-delay-hook)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1011 (setq desktop-delay-hook nil)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1012 (run-hooks 'desktop-after-read-hook)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1013 (message "Desktop: %d buffer%s restored%s%s."
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1014 desktop-buffer-ok-count
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1015 (if (= 1 desktop-buffer-ok-count) "" "s")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1016 (if (< 0 desktop-buffer-fail-count)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1017 (format ", %d failed to restore" desktop-buffer-fail-count)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1018 "")
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1019 (if desktop-buffer-args-list
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1020 (format ", %d to restore lazily"
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1021 (length desktop-buffer-args-list))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1022 ""))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1023 t))
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1024 ;; No desktop file found.
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1025 (desktop-clear)
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1026 (let ((default-directory desktop-dirname))
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1027 (run-hooks 'desktop-no-desktop-file-hook))
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1028 (message "No desktop file.")
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1029 nil)))
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1030
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1031 ;; ----------------------------------------------------------------------------
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1032 ;; Maintained for backward compatibility
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1033 ;;;###autoload
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 (defun desktop-load-default ()
10595
06fa5b312280 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 9776
diff changeset
1035 "Load the `default' start-up library manually.
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1036 Also inhibit further loading of it."
64674
b110ecf69f54 (desktop-save-buffer): Fix typos in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 64566
diff changeset
1037 (unless inhibit-default-init ; safety check
b110ecf69f54 (desktop-save-buffer): Fix typos in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 64566
diff changeset
1038 (load "default" t t)
b110ecf69f54 (desktop-save-buffer): Fix typos in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 64566
diff changeset
1039 (setq inhibit-default-init t)))
b110ecf69f54 (desktop-save-buffer): Fix typos in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 64566
diff changeset
1040 (make-obsolete 'desktop-load-default
b110ecf69f54 (desktop-save-buffer): Fix typos in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 64566
diff changeset
1041 'desktop-save-mode "22.1")
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1042
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1043 ;; ----------------------------------------------------------------------------
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1044 ;;;###autoload
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1045 (defun desktop-change-dir (dirname)
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1046 "Change to desktop saved in DIRNAME.
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1047 Kill the desktop as specified by variables `desktop-save-mode' and
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1048 `desktop-save', then clear the desktop and load the desktop file in
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1049 directory DIRNAME."
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1050 (interactive "DChange to directory: ")
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1051 (setq dirname (file-name-as-directory (expand-file-name dirname desktop-dirname)))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1052 (desktop-kill)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1053 (desktop-clear)
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1054 (desktop-read dirname))
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59487
diff changeset
1055
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1056 ;; ----------------------------------------------------------------------------
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1057 ;;;###autoload
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1058 (defun desktop-save-in-desktop-dir ()
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1059 "Save the desktop in directory `desktop-dirname'."
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1060 (interactive)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1061 (if desktop-dirname
64674
b110ecf69f54 (desktop-save-buffer): Fix typos in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 64566
diff changeset
1062 (desktop-save desktop-dirname)
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1063 (call-interactively 'desktop-save))
100906
43e72c1cf36e * desktop.el (desktop-save-in-desktop-dir): Use `abbreviate-file-name'
Juanma Barranquero <lekktu@gmail.com>
parents: 100171
diff changeset
1064 (message "Desktop saved in %s" (abbreviate-file-name desktop-dirname)))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1065
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1066 ;; ----------------------------------------------------------------------------
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1067 ;;;###autoload
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1068 (defun desktop-revert ()
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1069 "Revert to the last loaded desktop."
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1070 (interactive)
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1071 (unless desktop-dirname
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1072 (error "Unknown desktop directory"))
71453
bef13fc7f695 (desktop-full-file-name): New function.
Lars Hansen <larsh@soem.dk>
parents: 70653
diff changeset
1073 (unless (file-exists-p (desktop-full-file-name))
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1074 (error "No desktop file found"))
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1075 (desktop-clear)
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1076 (desktop-read desktop-dirname))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1077
77115
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1078 (defvar desktop-buffer-major-mode)
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1079 (defvar desktop-buffer-locals)
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
1080 ;; ----------------------------------------------------------------------------
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1081 (defun desktop-restore-file-buffer (desktop-buffer-file-name
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1082 desktop-buffer-name
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1083 desktop-buffer-misc)
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1084 "Restore a file buffer."
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1085 (when desktop-buffer-file-name
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1086 (if (or (file-exists-p desktop-buffer-file-name)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1087 (let ((msg (format "Desktop: File \"%s\" no longer exists."
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1088 desktop-buffer-file-name)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1089 (if desktop-missing-file-warning
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1090 (y-or-n-p (concat msg " Re-create buffer? "))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1091 (message "%s" msg)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1092 nil)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1093 (let* ((auto-insert nil) ; Disable auto insertion
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1094 (coding-system-for-read
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1095 (or coding-system-for-read
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1096 (cdr (assq 'buffer-file-coding-system
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1097 desktop-buffer-locals))))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1098 (buf (find-file-noselect desktop-buffer-file-name)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1099 (condition-case nil
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1100 (switch-to-buffer buf)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1101 (error (pop-to-buffer buf)))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1102 (and (not (eq major-mode desktop-buffer-major-mode))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1103 (functionp desktop-buffer-major-mode)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1104 (funcall desktop-buffer-major-mode))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1105 buf)
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1106 nil)))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1107
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1108 (defun desktop-load-file (function)
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1109 "Load the file where auto loaded FUNCTION is defined."
66037
89bec3b605ff (desktop-load-file): Do nothing when FUNCTION is nil.
Lars Hansen <larsh@soem.dk>
parents: 65582
diff changeset
1110 (when function
68344
ffdb60daf52a (desktop-load-file): Check for `fboundp' before calling `symbol-function'.
Juri Linkov <juri@jurta.org>
parents: 67560
diff changeset
1111 (let ((fcell (and (fboundp function) (symbol-function function))))
66037
89bec3b605ff (desktop-load-file): Do nothing when FUNCTION is nil.
Lars Hansen <larsh@soem.dk>
parents: 65582
diff changeset
1112 (when (and (listp fcell)
89bec3b605ff (desktop-load-file): Do nothing when FUNCTION is nil.
Lars Hansen <larsh@soem.dk>
parents: 65582
diff changeset
1113 (eq 'autoload (car fcell)))
89bec3b605ff (desktop-load-file): Do nothing when FUNCTION is nil.
Lars Hansen <larsh@soem.dk>
parents: 65582
diff changeset
1114 (load (cadr fcell))))))
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1115
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
1116 ;; ----------------------------------------------------------------------------
55179
28874a527b36 Fix comment.
Juri Linkov <juri@jurta.org>
parents: 55155
diff changeset
1117 ;; Create a buffer, load its file, set its mode, ...;
28874a527b36 Fix comment.
Juri Linkov <juri@jurta.org>
parents: 55155
diff changeset
1118 ;; called from Desktop file only.
40210
01666fd1b210 (desktop-last-buffer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38798
diff changeset
1119
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1120 ;; Just to silence the byte compiler.
77115
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1121
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1122 (defvar desktop-first-buffer) ; Dynamically bound in `desktop-read'
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1123
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1124 ;; Bound locally in `desktop-read'.
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1125 (defvar desktop-buffer-ok-count)
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1126 (defvar desktop-buffer-fail-count)
40210
01666fd1b210 (desktop-last-buffer): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38798
diff changeset
1127
57038
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1128 (defun desktop-create-buffer
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1129 (desktop-file-version
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1130 desktop-buffer-file-name
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1131 desktop-buffer-name
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1132 desktop-buffer-major-mode
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1133 desktop-buffer-minor-modes
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1134 desktop-buffer-point
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1135 desktop-buffer-mark
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1136 desktop-buffer-read-only
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1137 desktop-buffer-misc
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1138 &optional
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1139 desktop-buffer-locals)
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1140 ;; To make desktop files with relative file names possible, we cannot
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1141 ;; allow `default-directory' to change. Therefore we save current buffer.
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1142 (save-current-buffer
64893
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1143 ;; Give major mode module a chance to add a handler.
2c0fe8b09aaa (desktop-buffer-mode-handlers): Make
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1144 (desktop-load-file desktop-buffer-major-mode)
57038
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1145 (let ((buffer-list (buffer-list))
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1146 (result
92944
6dea71380597 (desktop-create-buffer): Don't catch errors if debug-on-error is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92364
diff changeset
1147 (condition-case-no-debug err
57038
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1148 (funcall (or (cdr (assq desktop-buffer-major-mode
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1149 desktop-buffer-mode-handlers))
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1150 'desktop-restore-file-buffer)
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1151 desktop-buffer-file-name
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1152 desktop-buffer-name
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1153 desktop-buffer-misc)
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1154 (error
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1155 (message "Desktop: Can't load buffer %s: %s"
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1156 desktop-buffer-name
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1157 (error-message-string err))
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1158 (when desktop-missing-file-warning (sit-for 1))
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1159 nil))))
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1160 (if (bufferp result)
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1161 (setq desktop-buffer-ok-count (1+ desktop-buffer-ok-count))
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1162 (setq desktop-buffer-fail-count (1+ desktop-buffer-fail-count))
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1163 (setq result nil))
51107
0c33d2fd9ae4 (desktop-save): Ensure parameter is expanded and ends with a slash before
Juanma Barranquero <lekktu@gmail.com>
parents: 50642
diff changeset
1164 ;; Restore buffer list order with new buffer at end. Don't change
0c33d2fd9ae4 (desktop-save): Ensure parameter is expanded and ends with a slash before
Juanma Barranquero <lekktu@gmail.com>
parents: 50642
diff changeset
1165 ;; the order for old desktop files (old desktop module behaviour).
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1166 (unless (< desktop-file-version 206)
58537
619031e477a8 (desktop-read): Replace mapcar with mapc.
Lars Hansen <larsh@soem.dk>
parents: 58180
diff changeset
1167 (mapc 'bury-buffer buffer-list)
51107
0c33d2fd9ae4 (desktop-save): Ensure parameter is expanded and ends with a slash before
Juanma Barranquero <lekktu@gmail.com>
parents: 50642
diff changeset
1168 (when result (bury-buffer result)))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1169 (when result
51107
0c33d2fd9ae4 (desktop-save): Ensure parameter is expanded and ends with a slash before
Juanma Barranquero <lekktu@gmail.com>
parents: 50642
diff changeset
1170 (unless (or desktop-first-buffer (< desktop-file-version 206))
0c33d2fd9ae4 (desktop-save): Ensure parameter is expanded and ends with a slash before
Juanma Barranquero <lekktu@gmail.com>
parents: 50642
diff changeset
1171 (setq desktop-first-buffer result))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1172 (set-buffer result)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1173 (unless (equal (buffer-name) desktop-buffer-name)
79237
80e25357226e (uniquify-managed): Pacify byte compiler.
Juanma Barranquero <lekktu@gmail.com>
parents: 78236
diff changeset
1174 (rename-buffer desktop-buffer-name t))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1175 ;; minor modes
57038
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1176 (cond ((equal '(t) desktop-buffer-minor-modes) ; backwards compatible
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1177 (auto-fill-mode 1))
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1178 ((equal '(nil) desktop-buffer-minor-modes) ; backwards compatible
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1179 (auto-fill-mode 0))
791b0637af6d (desktop-clear-preserve-buffers): Remove make-obsolete-variable.
Lars Hansen <larsh@soem.dk>
parents: 55871
diff changeset
1180 (t
77115
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1181 (dolist (minor-mode desktop-buffer-minor-modes)
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1182 ;; Give minor mode module a chance to add a handler.
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1183 (desktop-load-file minor-mode)
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1184 (let ((handler (cdr (assq minor-mode desktop-minor-mode-handlers))))
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1185 (if handler
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1186 (funcall handler desktop-buffer-locals)
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1187 (when (functionp minor-mode)
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1188 (funcall minor-mode 1)))))))
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1189 ;; Even though point and mark are non-nil when written by
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1190 ;; `desktop-save', they may be modified by handlers wanting to set
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1191 ;; point or mark themselves.
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1192 (when desktop-buffer-point
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1193 (goto-char
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1194 (condition-case err
77115
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1195 ;; Evaluate point. Thus point can be something like
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1196 ;; '(search-forward ...
55059
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1197 (eval desktop-buffer-point)
fa9573e2db2a (desktop-buffer-mode-handlers): New variabel. Alist
Lars Hansen <larsh@soem.dk>
parents: 54206
diff changeset
1198 (error (message "%s" (error-message-string err)) 1))))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1199 (when desktop-buffer-mark
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1200 (if (consp desktop-buffer-mark)
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1201 (progn
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1202 (set-mark (car desktop-buffer-mark))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1203 (setq mark-active (car (cdr desktop-buffer-mark))))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1204 (set-mark desktop-buffer-mark)))
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1205 ;; Never override file system if the file really is read-only marked.
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1206 (when desktop-buffer-read-only (setq buffer-read-only desktop-buffer-read-only))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1207 (while desktop-buffer-locals
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1208 (let ((this (car desktop-buffer-locals)))
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1209 (if (consp this)
78046
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1210 ;; an entry of this form `(symbol . value)'
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1211 (progn
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1212 (make-local-variable (car this))
c395c022a035 (desktop-read): Run `desktop-not-loaded-hook' in the directory where the desktop
Juanma Barranquero <lekktu@gmail.com>
parents: 77991
diff changeset
1213 (set (car this) (cdr this)))
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1214 ;; an entry of the form `symbol'
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1215 (make-local-variable this)
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1216 (makunbound this)))
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1217 (setq desktop-buffer-locals (cdr desktop-buffer-locals)))))))
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
1218
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1219 ;; ----------------------------------------------------------------------------
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
1220 ;; Backward compatibility -- update parameters to 205 standards.
14755
3d473ed8c718 Global vars mam, fn, bn renamed.
Richard M. Stallman <rms@gnu.org>
parents: 14754
diff changeset
1221 (defun desktop-buffer (desktop-buffer-file-name desktop-buffer-name
3d473ed8c718 Global vars mam, fn, bn renamed.
Richard M. Stallman <rms@gnu.org>
parents: 14754
diff changeset
1222 desktop-buffer-major-mode
14756
aabf776c3b6a Global var `misc' renamed.
Richard M. Stallman <rms@gnu.org>
parents: 14755
diff changeset
1223 mim pt mk ro tl fc cfs cr desktop-buffer-misc)
14755
3d473ed8c718 Global vars mam, fn, bn renamed.
Richard M. Stallman <rms@gnu.org>
parents: 14754
diff changeset
1224 (desktop-create-buffer 205 desktop-buffer-file-name desktop-buffer-name
14756
aabf776c3b6a Global var `misc' renamed.
Richard M. Stallman <rms@gnu.org>
parents: 14755
diff changeset
1225 desktop-buffer-major-mode (cdr mim) pt mk ro
aabf776c3b6a Global var `misc' renamed.
Richard M. Stallman <rms@gnu.org>
parents: 14755
diff changeset
1226 desktop-buffer-misc
5465
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
1227 (list (cons 'truncate-lines tl)
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
1228 (cons 'fill-column fc)
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
1229 (cons 'case-fold-search cfs)
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
1230 (cons 'case-replace cr)
9fcfca1caec7 (desktop-buffer-mh): New function for mh mail system.
Richard M. Stallman <rms@gnu.org>
parents: 5314
diff changeset
1231 (cons 'overwrite-mode (car mim)))))
50532
4737239e4dad (desktop-buffer-file): Restore major-mode if it is different from the normal
Juanma Barranquero <lekktu@gmail.com>
parents: 50507
diff changeset
1232
59412
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1233 (defun desktop-append-buffer-args (&rest args)
64490
e22e42dbaf76 (desktop-enable, desktop-buffer-modes-to-save, (desktop-buffer-misc-functions,
Juanma Barranquero <lekktu@gmail.com>
parents: 64254
diff changeset
1234 "Append ARGS at end of `desktop-buffer-args-list'.
59412
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1235 ARGS must be an argument list for `desktop-create-buffer'."
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1236 (setq desktop-buffer-args-list (nconc desktop-buffer-args-list (list args)))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1237 (unless desktop-lazy-timer
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1238 (setq desktop-lazy-timer
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1239 (run-with-idle-timer desktop-lazy-idle-delay t 'desktop-idle-create-buffers))))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1240
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1241 (defun desktop-lazy-create-buffer ()
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1242 "Pop args from `desktop-buffer-args-list', create buffer and bury it."
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1243 (when desktop-buffer-args-list
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1244 (let* ((remaining (length desktop-buffer-args-list))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1245 (args (pop desktop-buffer-args-list))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1246 (buffer-name (nth 2 args))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1247 (msg (format "Desktop lazily opening %s (%s remaining)..."
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1248 buffer-name remaining)))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1249 (when desktop-lazy-verbose
65582
4d1085b02d64 Message format spec fixes (1)
Deepak Goel <deego@gnufans.org>
parents: 64963
diff changeset
1250 (message "%s" msg))
59412
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1251 (let ((desktop-first-buffer nil)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1252 (desktop-buffer-ok-count 0)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1253 (desktop-buffer-fail-count 0))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1254 (apply 'desktop-create-buffer args)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1255 (run-hooks 'desktop-delay-hook)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1256 (setq desktop-delay-hook nil)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1257 (bury-buffer (get-buffer buffer-name))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1258 (when desktop-lazy-verbose
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1259 (message "%s%s" msg (if (> desktop-buffer-ok-count 0) "done" "failed")))))))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1260
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1261 (defun desktop-idle-create-buffers ()
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1262 "Create buffers until the user does something, then stop.
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1263 If there are no buffers left to create, kill the timer."
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1264 (let ((repeat 1))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1265 (while (and repeat desktop-buffer-args-list)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1266 (save-window-excursion
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1267 (desktop-lazy-create-buffer))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1268 (setq repeat (sit-for 0.2))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1269 (unless desktop-buffer-args-list
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1270 (cancel-timer desktop-lazy-timer)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1271 (setq desktop-lazy-timer nil)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1272 (message "Lazy desktop load complete")
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1273 (sit-for 3)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1274 (message "")))))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1275
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1276 (defun desktop-lazy-complete ()
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1277 "Run the desktop load to completion."
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1278 (interactive)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1279 (let ((desktop-lazy-verbose t))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1280 (while desktop-buffer-args-list
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1281 (save-window-excursion
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1282 (desktop-lazy-create-buffer)))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1283 (message "Lazy desktop load complete")))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1284
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1285 (defun desktop-lazy-abort ()
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1286 "Abort lazy loading of the desktop."
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1287 (interactive)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1288 (when desktop-lazy-timer
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1289 (cancel-timer desktop-lazy-timer)
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1290 (setq desktop-lazy-timer nil))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1291 (when desktop-buffer-args-list
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1292 (setq desktop-buffer-args-list nil)
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105031
diff changeset
1293 (when (called-interactively-p 'interactive)
59412
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1294 (message "Lazy desktop load aborted"))))
0ddd142616f1 (desktop-restore-eager, desktop-lazy-verbose, desktop-lazy-idle-delay):
Lars Hansen <larsh@soem.dk>
parents: 58537
diff changeset
1295
4830
a61307ac474e Internal clean-up. Save information about current
Richard M. Stallman <rms@gnu.org>
parents: 3405
diff changeset
1296 ;; ----------------------------------------------------------------------------
52674
7490e5357dba A lot of comments updated.
Lars Hansen <larsh@soem.dk>
parents: 52457
diff changeset
1297 ;; When `desktop-save-mode' is non-nil and "--no-desktop" is not specified on the
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1298 ;; command line, we do the rest of what it takes to use desktop, but do it
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1299 ;; after finishing loading the init file.
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1300 ;; We cannot use `command-switch-alist' to process "--no-desktop" because these
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1301 ;; functions are processed after `after-init-hook'.
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1302 (add-hook
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1303 'after-init-hook
77115
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1304 (lambda ()
50507
110c0e29159c Handle multiple desktop files in different dirs.
Richard M. Stallman <rms@gnu.org>
parents: 48143
diff changeset
1305 (let ((key "--no-desktop"))
61638
ef63bf685348 Make "--no-desktop" turn off `desktop-save-mode'.
Lars Hansen <larsh@soem.dk>
parents: 61236
diff changeset
1306 (when (member key command-line-args)
ef63bf685348 Make "--no-desktop" turn off `desktop-save-mode'.
Lars Hansen <larsh@soem.dk>
parents: 61236
diff changeset
1307 (setq command-line-args (delete key command-line-args))
ef63bf685348 Make "--no-desktop" turn off `desktop-save-mode'.
Lars Hansen <larsh@soem.dk>
parents: 61236
diff changeset
1308 (setq desktop-save-mode nil)))
91810
81c282959319 (after-init-hook): Set inhibit-startup-screen to t
Juri Linkov <juri@jurta.org>
parents: 91327
diff changeset
1309 (when desktop-save-mode
81c282959319 (after-init-hook): Set inhibit-startup-screen to t
Juri Linkov <juri@jurta.org>
parents: 91327
diff changeset
1310 (desktop-read)
81c282959319 (after-init-hook): Set inhibit-startup-screen to t
Juri Linkov <juri@jurta.org>
parents: 91327
diff changeset
1311 (setq inhibit-startup-screen t))))
20526
ec0a8ccddd6c (desktop-enable): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18581
diff changeset
1312
3405
b48f023e8e29 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3404
diff changeset
1313 (provide 'desktop)
3404
777e0d4f775a Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1314
77115
7596f1771948 (desktop-save, desktop-create-buffer): Replace mapcar with dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76978
diff changeset
1315 ;; arch-tag: 221907c3-1771-4fd3-9c2e-c6f700c6ede9
32366
40d8b29df57e (desktop-modes-not-to-save): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30853
diff changeset
1316 ;;; desktop.el ends here