annotate lisp/saveplace.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents 2b5cebd0da5e
children 33067598c22c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; saveplace.el --- automatically save place in files.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
6662
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
3 ;; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: Karl Fogel <kfogel@cs.oberlin.edu>
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Maintainer: FSF
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Created: July, 1993
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Keywords: bookmarks, placeholders
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; any later version.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13908
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13908
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13908
diff changeset
25 ;; Boston, MA 02111-1307, USA.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13908
diff changeset
26
15192
f2aaee52dfe1 Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15190
diff changeset
27 ;;; Commentary:
f2aaee52dfe1 Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15190
diff changeset
28
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; Automatically save place in files, so that visiting them later
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; (even during a different Emacs session) automatically moves point
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; to the saved position, when the file is first found. Uses the
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; value of buffer-local variable save-place to determine whether to
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; save position or not.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;;
6662
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
35 ;; Thanks to Stefan Schoef, who sent a patch with the
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
36 ;; `save-place-version-control' stuff in it.
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37
15192
f2aaee52dfe1 Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15190
diff changeset
38 ;;; Code:
f2aaee52dfe1 Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15190
diff changeset
39
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; this is what I was using during testing:
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; (define-key ctl-x-map "p" 'toggle-save-place)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42
17481
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
43 (defgroup save-place nil
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
44 "Automatically save place in files."
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
45 :group 'data)
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
46
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
47
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 (defvar save-place-alist nil
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 "Alist of saved places to go back to when revisiting files.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 Each element looks like (FILENAME . POSITION);
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 visiting file FILENAME goes automatically to position POSITION
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 rather than the beginning of the buffer.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 This alist is saved between Emacs sessions.")
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54
17481
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
55 (defcustom save-place nil
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 "*Non-nil means automatically save place in each file.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 This means when you visit a file, point goes to the last place
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 where it was when you previously visited the same file.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 This variable is automatically buffer-local.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 If you wish your place in any file to always be automatically saved,
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 simply put this in your `~/.emacs' file:
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63
17481
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
64 \(setq-default save-place t\)"
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
65 :type 'boolean
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
66 :group 'save-place)
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 (make-variable-buffer-local 'save-place)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69
17481
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
70 (defcustom save-place-file (convert-standard-filename "~/.emacs-places")
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
71 "*Name of the file that records `save-place-alist' value."
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
72 :type 'file
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
73 :group 'save-place)
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74
19979
8540d32e89cd (save-place-version-control): Make nil the default.
Richard M. Stallman <rms@gnu.org>
parents: 17481
diff changeset
75 (defcustom save-place-version-control nil
6662
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
76 "*Controls whether to make numbered backups of master save-place file.
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
77 It can have four values: t, nil, `never', and `nospecial'. The first
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
78 three have the same meaning that they do for the variable
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
79 `version-control', and the final value `nospecial' means just use the
17481
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
80 value of `version-control'."
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
81 :type '(radio (const :tag "Unconditionally" t)
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
82 (const :tag "For VC Files" nil)
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
83 (const never)
19979
8540d32e89cd (save-place-version-control): Make nil the default.
Richard M. Stallman <rms@gnu.org>
parents: 17481
diff changeset
84 (const :tag "Use value of `version-control'" nospecial))
17481
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
85 :group 'save-place)
6662
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
86
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 (defvar save-place-loaded nil
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 "Non-nil means that the `save-place-file' has been loaded.")
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89
17481
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
90 (defcustom save-place-limit nil
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
91 "Maximum number of entries to retain in the list; nil means no limit."
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
92 :type '(choice (integer :tag "Entries" :value 1)
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
93 (const :tag "No Limit" nil))
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
94 :group 'save-place)
13665
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
95
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 (defun toggle-save-place (&optional parg)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 "Toggle whether to save your place in this file between sessions.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 If this mode is enabled, point is recorded when you kill the buffer
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 or exit Emacs. Visiting this file again will go to that position,
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 even in a later Emacs session.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 If called with a prefix arg, the mode is enabled if and only if
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 the argument is positive.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 To save places automatically in all files, put this in your `.emacs' file:
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 \(setq-default save-place t\)"
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 (interactive "P")
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 (if (not buffer-file-name)
14357
31d994fe3123 (toggle-save-place): Fix message text.
Karl Heuer <kwzh@gnu.org>
parents: 14342
diff changeset
110 (message "Buffer `%s' not visiting a file" (buffer-name))
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 (if (and save-place (or (not parg) (<= parg 0)))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 (progn
14357
31d994fe3123 (toggle-save-place): Fix message text.
Karl Heuer <kwzh@gnu.org>
parents: 14342
diff changeset
113 (message "No place will be saved in this file")
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 (setq save-place nil))
14357
31d994fe3123 (toggle-save-place): Fix message text.
Karl Heuer <kwzh@gnu.org>
parents: 14342
diff changeset
115 (message "Place will be saved")
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 (setq save-place t))))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 (defun save-place-to-alist ()
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;; put filename and point in a cons box and then cons that onto the
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ;; front of the save-place-alist, if save-place is non-nil.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 ;; Otherwise, just delete that file from the alist.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 ;; first check to make sure alist has been loaded in from the master
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ;; file. If not, do so, then feel free to modify the alist. It
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;; will be saved again when Emacs is killed.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 (or save-place-loaded (load-save-place-alist-from-file))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 (if buffer-file-name
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 (progn
19980
2b5cebd0da5e (save-place-to-alist): Optimize out the degenerate
Karl Heuer <kwzh@gnu.org>
parents: 19979
diff changeset
128 (let ((cell (assoc buffer-file-name save-place-alist))
2b5cebd0da5e (save-place-to-alist): Optimize out the degenerate
Karl Heuer <kwzh@gnu.org>
parents: 19979
diff changeset
129 (position (if (not (eq major-mode 'hexl-mode))
2b5cebd0da5e (save-place-to-alist): Optimize out the degenerate
Karl Heuer <kwzh@gnu.org>
parents: 19979
diff changeset
130 (point)
2b5cebd0da5e (save-place-to-alist): Optimize out the degenerate
Karl Heuer <kwzh@gnu.org>
parents: 19979
diff changeset
131 (1+ (hexl-current-address)))))
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 (if cell
19980
2b5cebd0da5e (save-place-to-alist): Optimize out the degenerate
Karl Heuer <kwzh@gnu.org>
parents: 19979
diff changeset
133 (setq save-place-alist (delq cell save-place-alist)))
2b5cebd0da5e (save-place-to-alist): Optimize out the degenerate
Karl Heuer <kwzh@gnu.org>
parents: 19979
diff changeset
134 (if (and save-place
2b5cebd0da5e (save-place-to-alist): Optimize out the degenerate
Karl Heuer <kwzh@gnu.org>
parents: 19979
diff changeset
135 (not (= position 1))) ;; Optimize out the degenerate case.
2b5cebd0da5e (save-place-to-alist): Optimize out the degenerate
Karl Heuer <kwzh@gnu.org>
parents: 19979
diff changeset
136 (setq save-place-alist
2b5cebd0da5e (save-place-to-alist): Optimize out the degenerate
Karl Heuer <kwzh@gnu.org>
parents: 19979
diff changeset
137 (cons (cons buffer-file-name position)
2b5cebd0da5e (save-place-to-alist): Optimize out the degenerate
Karl Heuer <kwzh@gnu.org>
parents: 19979
diff changeset
138 save-place-alist)))))))
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 (defun save-place-alist-to-file ()
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (let ((file (expand-file-name save-place-file)))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (save-excursion
14342
942b8cf37599 (toggle-save-place, save-place-alist-to-file, load-save-place-alist-from-file): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
143 (message "Saving places to %s..." file)
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 (set-buffer (get-buffer-create " *Saved Places*"))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 (delete-region (point-min) (point-max))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 (if (file-readable-p file)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 (insert-file-contents file))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 (delete-region (point-min) (point-max))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 (goto-char (point-min))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 (print save-place-alist (current-buffer))
6662
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
151 (let ((version-control
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
152 (cond
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
153 ((null save-place-version-control) nil)
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
154 ((eq 'never save-place-version-control) 'never)
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
155 ((eq 'nospecial save-place-version-control) version-control)
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
156 (t
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
157 t))))
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
158 (write-file file)
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
159 (kill-buffer (current-buffer))
14342
942b8cf37599 (toggle-save-place, save-place-alist-to-file, load-save-place-alist-from-file): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
160 (message "Saving places to %s...done" file)))))
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 (defun load-save-place-alist-from-file ()
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 (if (not save-place-loaded)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 (progn
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 (setq save-place-loaded t)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 (let ((file (expand-file-name save-place-file)))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 ;; make sure that the alist does not get overwritten, and then
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 ;; load it if it exists:
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 (if (file-readable-p file)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 (save-excursion
14342
942b8cf37599 (toggle-save-place, save-place-alist-to-file, load-save-place-alist-from-file): Delete format call inside message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
171 (message "Loading places from %s..." save-place-file)
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 ;; don't want to use find-file because we have been
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 ;; adding hooks to it.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 (set-buffer (get-buffer-create " *Saved Places*"))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 (delete-region (point-min) (point-max))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 (insert-file-contents file)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 (goto-char (point-min))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (setq save-place-alist
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 (car (read-from-string
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 (buffer-substring (point-min) (point-max)))))
13665
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
181
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
182 ;; If there is a limit, and we're over it, then we'll
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
183 ;; have to truncate the end of the list:
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
184 (if save-place-limit
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
185 (if (<= save-place-limit 0)
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
186 ;; Zero gets special cased. I'm not thrilled
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
187 ;; with this, but the loop for >= 1 is tight.
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
188 (setq save-place-alist nil)
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
189 ;; Else the limit is >= 1, so enforce it by
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
190 ;; counting and then `setcdr'ing.
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
191 (let ((s save-place-alist)
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
192 (count 1))
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
193 (while s
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
194 (if (>= count save-place-limit)
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
195 (setcdr s nil)
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
196 (setq count (1+ count)))
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
197 (setq s (cdr s))))))
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
198
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 (kill-buffer (current-buffer))
16948
62b9178b858b (load-save-place-alist-from-file): Delete spurious t's.
Richard M. Stallman <rms@gnu.org>
parents: 15192
diff changeset
200 (message "Loading places from %s...done" file)))
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 nil))))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 (defun save-places-to-alist ()
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 ;; go through buffer-list, saving places to alist if save-place is
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 ;; non-nil, deleting them from alist if it is nil.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 (let ((buf-list (buffer-list)))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 (while buf-list
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 ;; put this into a save-excursion in case someone is counting on
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 ;; another function in kill-emacs-hook to act on the last buffer
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 ;; they were in:
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (save-excursion
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 (set-buffer (car buf-list))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 ;; save-place checks buffer-file-name too, but we can avoid
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 ;; overhead of function call by checking here too.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 (and buffer-file-name (save-place-to-alist))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 (setq buf-list (cdr buf-list))))))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217
6700
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
218 (defun save-place-find-file-hook ()
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
219 (or save-place-loaded (load-save-place-alist-from-file))
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
220 (let ((cell (assoc buffer-file-name save-place-alist)))
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
221 (if cell
15192
f2aaee52dfe1 Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15190
diff changeset
222 (progn
f2aaee52dfe1 Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15190
diff changeset
223 (or after-find-file-from-revert-buffer
f2aaee52dfe1 Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15190
diff changeset
224 (goto-char (cdr cell)))
6700
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
225 ;; and make sure it will be saved again for later
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
226 (setq save-place t)))))
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
227
6877
6347a8d838c8 (save-place-kill-emacs-hook): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents: 6700
diff changeset
228 (defun save-place-kill-emacs-hook ()
14768
ba3525471dae (save-place-kill-emacs-hook): Always call save-places-to-alist.
Richard M. Stallman <rms@gnu.org>
parents: 14753
diff changeset
229 ;; First update the alist. This loads the old save-place-file if nec.
ba3525471dae (save-place-kill-emacs-hook): Always call save-places-to-alist.
Richard M. Stallman <rms@gnu.org>
parents: 14753
diff changeset
230 (save-places-to-alist)
ba3525471dae (save-place-kill-emacs-hook): Always call save-places-to-alist.
Richard M. Stallman <rms@gnu.org>
parents: 14753
diff changeset
231 ;; Now save the alist in the file, if we have ever loaded the file
ba3525471dae (save-place-kill-emacs-hook): Always call save-places-to-alist.
Richard M. Stallman <rms@gnu.org>
parents: 14753
diff changeset
232 ;; (including just now).
14753
cf8ad47dc610 (save-place-kill-emacs-hook): Don't save
Richard M. Stallman <rms@gnu.org>
parents: 14357
diff changeset
233 (if save-place-loaded
14768
ba3525471dae (save-place-kill-emacs-hook): Always call save-places-to-alist.
Richard M. Stallman <rms@gnu.org>
parents: 14753
diff changeset
234 (save-place-alist-to-file)))
6700
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
235
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
236 (add-hook 'find-file-hooks 'save-place-find-file-hook t)
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
237
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
238 (add-hook 'kill-emacs-hook 'save-place-kill-emacs-hook)
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 (add-hook 'kill-buffer-hook 'save-place-to-alist)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 (provide 'saveplace) ; why not...
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 ;;; saveplace.el ends here
6700
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
245