summaryrefslogtreecommitdiff
path: root/lisp/saveplace.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/saveplace.el')
-rw-r--r--lisp/saveplace.el229
1 files changed, 0 insertions, 229 deletions
diff --git a/lisp/saveplace.el b/lisp/saveplace.el
deleted file mode 100644
index 364e766dcb0..00000000000
--- a/lisp/saveplace.el
+++ /dev/null
@@ -1,229 +0,0 @@
-;;; saveplace.el --- automatically save place in files.
-
-;; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
-
-;; Author: Karl Fogel <kfogel@cs.oberlin.edu>
-;; Maintainer: FSF
-;; Created: July, 1993
-;; Keywords: bookmarks, placeholders
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; Automatically save place in files, so that visiting them later
-;; (even during a different Emacs session) automatically moves point
-;; to the saved position, when the file is first found. Uses the
-;; value of buffer-local variable save-place to determine whether to
-;; save position or not.
-;;
-;; Thanks to Stefan Schoef, who sent a patch with the
-;; `save-place-version-control' stuff in it.
-
-;;; Code:
-
-;; this is what I was using during testing:
-;; (define-key ctl-x-map "p" 'toggle-save-place)
-
-(defvar save-place-alist nil
- "Alist of saved places to go back to when revisiting files.
-Each element looks like (FILENAME . POSITION);
-visiting file FILENAME goes automatically to position POSITION
-rather than the beginning of the buffer.
-This alist is saved between Emacs sessions.")
-
-(defvar save-place nil
- "*Non-nil means automatically save place in each file.
-This means when you visit a file, point goes to the last place
-where it was when you previously visited the same file.
-This variable is automatically buffer-local.
-
-If you wish your place in any file to always be automatically saved,
-simply put this in your `~/.emacs' file:
-
-\(setq-default save-place t\)")
-
-(make-variable-buffer-local 'save-place)
-
-(defvar save-place-file (convert-standard-filename "~/.emacs-places")
- "*Name of the file that records `save-place-alist' value.")
-
-(defvar save-place-version-control 'nospecial
- "*Controls whether to make numbered backups of master save-place file.
-It can have four values: t, nil, `never', and `nospecial'. The first
-three have the same meaning that they do for the variable
-`version-control', and the final value `nospecial' means just use the
-value of `version-control'.")
-
-(defvar save-place-loaded nil
- "Non-nil means that the `save-place-file' has been loaded.")
-
-(defvar save-place-limit nil
- "Maximum number of entries to retain in the list; nil means no limit.")
-
-(defun toggle-save-place (&optional parg)
- "Toggle whether to save your place in this file between sessions.
-If this mode is enabled, point is recorded when you kill the buffer
-or exit Emacs. Visiting this file again will go to that position,
-even in a later Emacs session.
-
-If called with a prefix arg, the mode is enabled if and only if
-the argument is positive.
-
-To save places automatically in all files, put this in your `.emacs' file:
-
-\(setq-default save-place t\)"
- (interactive "P")
- (if (not buffer-file-name)
- (message "Buffer `%s' not visiting a file" (buffer-name))
- (if (and save-place (or (not parg) (<= parg 0)))
- (progn
- (message "No place will be saved in this file")
- (setq save-place nil))
- (message "Place will be saved")
- (setq save-place t))))
-
-(defun save-place-to-alist ()
- ;; put filename and point in a cons box and then cons that onto the
- ;; front of the save-place-alist, if save-place is non-nil.
- ;; Otherwise, just delete that file from the alist.
- ;; first check to make sure alist has been loaded in from the master
- ;; file. If not, do so, then feel free to modify the alist. It
- ;; will be saved again when Emacs is killed.
- (or save-place-loaded (load-save-place-alist-from-file))
- (if buffer-file-name
- (progn
- (let ((cell (assoc buffer-file-name save-place-alist)))
- (if cell
- (setq save-place-alist (delq cell save-place-alist))))
- (if save-place
- (setq save-place-alist
- (cons (cons buffer-file-name
- (if (not (eq major-mode 'hexl-mode))
- (point)
- (1+ (hexl-current-address))))
- save-place-alist))))))
-
-(defun save-place-alist-to-file ()
- (let ((file (expand-file-name save-place-file)))
- (save-excursion
- (message "Saving places to %s..." file)
- (set-buffer (get-buffer-create " *Saved Places*"))
- (delete-region (point-min) (point-max))
- (if (file-readable-p file)
- (insert-file-contents file))
- (delete-region (point-min) (point-max))
- (goto-char (point-min))
- (print save-place-alist (current-buffer))
- (let ((version-control
- (cond
- ((null save-place-version-control) nil)
- ((eq 'never save-place-version-control) 'never)
- ((eq 'nospecial save-place-version-control) version-control)
- (t
- t))))
- (write-file file)
- (kill-buffer (current-buffer))
- (message "Saving places to %s...done" file)))))
-
-(defun load-save-place-alist-from-file ()
- (if (not save-place-loaded)
- (progn
- (setq save-place-loaded t)
- (let ((file (expand-file-name save-place-file)))
- ;; make sure that the alist does not get overwritten, and then
- ;; load it if it exists:
- (if (file-readable-p file)
- (save-excursion
- (message "Loading places from %s..." save-place-file)
- ;; don't want to use find-file because we have been
- ;; adding hooks to it.
- (set-buffer (get-buffer-create " *Saved Places*"))
- (delete-region (point-min) (point-max))
- (insert-file-contents file)
- (goto-char (point-min))
- (setq save-place-alist
- (car (read-from-string
- (buffer-substring (point-min) (point-max)))))
-
- ;; If there is a limit, and we're over it, then we'll
- ;; have to truncate the end of the list:
- (if save-place-limit
- (if (<= save-place-limit 0)
- ;; Zero gets special cased. I'm not thrilled
- ;; with this, but the loop for >= 1 is tight.
- (setq save-place-alist nil)
- ;; Else the limit is >= 1, so enforce it by
- ;; counting and then `setcdr'ing.
- (let ((s save-place-alist)
- (count 1))
- (while s
- (if (>= count save-place-limit)
- (setcdr s nil)
- (setq count (1+ count)))
- (setq s (cdr s))))))
-
- (kill-buffer (current-buffer))
- (message "Loading places from %s...done" file)
- t)
- t)
- nil))))
-
-(defun save-places-to-alist ()
- ;; go through buffer-list, saving places to alist if save-place is
- ;; non-nil, deleting them from alist if it is nil.
- (let ((buf-list (buffer-list)))
- (while buf-list
- ;; put this into a save-excursion in case someone is counting on
- ;; another function in kill-emacs-hook to act on the last buffer
- ;; they were in:
- (save-excursion
- (set-buffer (car buf-list))
- ;; save-place checks buffer-file-name too, but we can avoid
- ;; overhead of function call by checking here too.
- (and buffer-file-name (save-place-to-alist))
- (setq buf-list (cdr buf-list))))))
-
-(defun save-place-find-file-hook ()
- (or save-place-loaded (load-save-place-alist-from-file))
- (let ((cell (assoc buffer-file-name save-place-alist)))
- (if cell
- (progn
- (or after-find-file-from-revert-buffer
- (goto-char (cdr cell)))
- ;; and make sure it will be saved again for later
- (setq save-place t)))))
-
-(defun save-place-kill-emacs-hook ()
- ;; First update the alist. This loads the old save-place-file if nec.
- (save-places-to-alist)
- ;; Now save the alist in the file, if we have ever loaded the file
- ;; (including just now).
- (if save-place-loaded
- (save-place-alist-to-file)))
-
-(add-hook 'find-file-hooks 'save-place-find-file-hook t)
-
-(add-hook 'kill-emacs-hook 'save-place-kill-emacs-hook)
-
-(add-hook 'kill-buffer-hook 'save-place-to-alist)
-
-(provide 'saveplace) ; why not...
-
-;;; saveplace.el ends here
-