annotate lisp/saveplace.el @ 17846:c427501449a1

(display_text_line): Move the code to fill out the line with the newline's face to the end of the newline code. Add changes (commented out) to record ellipsis positions in charstarts.
author Richard M. Stallman <rms@gnu.org>
date Fri, 16 May 1997 07:32:59 +0000
parents e2757a9ccbe9
children 8540d32e89cd
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
17481
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
75 (defcustom save-place-version-control 'nospecial
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)
e2757a9ccbe9 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16948
diff changeset
84 (const :tag "Use value of version-control" nospecial))
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
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 (let ((cell (assoc buffer-file-name save-place-alist)))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 (if cell
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 (setq save-place-alist (delq cell save-place-alist))))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 (if save-place
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 (setq save-place-alist
15192
f2aaee52dfe1 Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15190
diff changeset
133 (cons (cons buffer-file-name
f2aaee52dfe1 Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15190
diff changeset
134 (if (not (eq major-mode 'hexl-mode))
13600
4c8f65a17dc9 (save-place-to-alist): Handle hexl-mode specially.
Richard M. Stallman <rms@gnu.org>
parents: 8711
diff changeset
135 (point)
4c8f65a17dc9 (save-place-to-alist): Handle hexl-mode specially.
Richard M. Stallman <rms@gnu.org>
parents: 8711
diff changeset
136 (1+ (hexl-current-address))))
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 save-place-alist))))))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 (defun save-place-alist-to-file ()
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 (let ((file (expand-file-name save-place-file)))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (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
142 (message "Saving places to %s..." file)
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 (set-buffer (get-buffer-create " *Saved Places*"))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 (delete-region (point-min) (point-max))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 (if (file-readable-p file)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 (insert-file-contents file))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 (delete-region (point-min) (point-max))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 (goto-char (point-min))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 (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
150 (let ((version-control
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
151 (cond
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
152 ((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
153 ((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
154 ((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
155 (t
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 (write-file file)
bc7bc2a395c6 (save-place-version-control): New var, for determining
Richard M. Stallman <rms@gnu.org>
parents: 4596
diff changeset
158 (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
159 (message "Saving places to %s...done" file)))))
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 (defun load-save-place-alist-from-file ()
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 (if (not save-place-loaded)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 (progn
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 (setq save-place-loaded t)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 (let ((file (expand-file-name save-place-file)))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 ;; make sure that the alist does not get overwritten, and then
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 ;; load it if it exists:
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 (if (file-readable-p file)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 (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
170 (message "Loading places from %s..." save-place-file)
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 ;; don't want to use find-file because we have been
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 ;; adding hooks to it.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 (set-buffer (get-buffer-create " *Saved Places*"))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 (delete-region (point-min) (point-max))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 (insert-file-contents file)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 (goto-char (point-min))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 (setq save-place-alist
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (car (read-from-string
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 (buffer-substring (point-min) (point-max)))))
13665
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
180
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
181 ;; 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
182 ;; have to truncate the end of the list:
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
183 (if save-place-limit
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
184 (if (<= save-place-limit 0)
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
185 ;; Zero gets special cased. I'm not thrilled
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
186 ;; 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
187 (setq save-place-alist nil)
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
188 ;; 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
189 ;; counting and then `setcdr'ing.
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
190 (let ((s save-place-alist)
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
191 (count 1))
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
192 (while s
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
193 (if (>= count save-place-limit)
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
194 (setcdr s nil)
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
195 (setq count (1+ count)))
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
196 (setq s (cdr s))))))
abc765f9bee3 (save-place-limit): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13600
diff changeset
197
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 (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
199 (message "Loading places from %s...done" file)))
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 nil))))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 (defun save-places-to-alist ()
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 ;; 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
204 ;; non-nil, deleting them from alist if it is nil.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 (let ((buf-list (buffer-list)))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 (while buf-list
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 ;; 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
208 ;; 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
209 ;; they were in:
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 (save-excursion
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (set-buffer (car buf-list))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 ;; save-place checks buffer-file-name too, but we can avoid
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 ;; overhead of function call by checking here too.
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 (and buffer-file-name (save-place-to-alist))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 (setq buf-list (cdr buf-list))))))
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216
6700
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
217 (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
218 (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
219 (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
220 (if cell
15192
f2aaee52dfe1 Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15190
diff changeset
221 (progn
f2aaee52dfe1 Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15190
diff changeset
222 (or after-find-file-from-revert-buffer
f2aaee52dfe1 Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 15190
diff changeset
223 (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
224 ;; 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
225 (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
226
6877
6347a8d838c8 (save-place-kill-emacs-hook): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents: 6700
diff changeset
227 (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
228 ;; 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
229 (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
230 ;; 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
231 ;; (including just now).
14753
cf8ad47dc610 (save-place-kill-emacs-hook): Don't save
Richard M. Stallman <rms@gnu.org>
parents: 14357
diff changeset
232 (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
233 (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
234
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
235 (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
236
db2292ce4894 (save-place-find-file-hook, save-place-kill-emacs-hook): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 6662
diff changeset
237 (add-hook 'kill-emacs-hook 'save-place-kill-emacs-hook)
4596
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 (add-hook 'kill-buffer-hook 'save-place-to-alist)
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 (provide 'saveplace) ; why not...
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242
e357d85a087f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 ;;; 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
244