X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/1d42e5b6396fd7234ff94e6fec7fd4f39d1faddb..799d2f3d87185a51835d0594a89485932d0f4c23:/lisp/saveplace.el diff --git a/lisp/saveplace.el b/lisp/saveplace.el index 8d8b58a485..a25dba2e39 100644 --- a/lisp/saveplace.el +++ b/lisp/saveplace.el @@ -1,9 +1,9 @@ ;;; saveplace.el --- automatically save place in files -;; Copyright (C) 1993-1994, 2001-2013 Free Software Foundation, Inc. +;; Copyright (C) 1993-1994, 2001-2014 Free Software Foundation, Inc. ;; Author: Karl Fogel -;; Maintainer: FSF +;; Maintainer: emacs-devel@gnu.org ;; Created: July, 1993 ;; Keywords: bookmarks, placeholders @@ -54,7 +54,6 @@ This alist is saved between Emacs sessions.") "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, set this to t using the Customize facility, or put the @@ -70,6 +69,7 @@ following code in your init file: (defcustom save-place-file (locate-user-emacs-file "places" ".emacs-places") "Name of the file that records `save-place-alist' value." + :version "24.4" ; added locate-user-emacs-file :type 'file :group 'save-place) @@ -100,7 +100,7 @@ value of `version-control'." The filenames in `save-place-alist' that do not match `save-place-skip-check-regexp' are filtered through -`file-readable-p'. if nil, their alist entries are removed. +`file-readable-p'. If nil, their alist entries are removed. You may do this anytime by calling the complementary function, `save-place-forget-unreadable-files'. When this option is turned on, @@ -150,16 +150,17 @@ the argument is positive. To save places automatically in all files, put this in your init file: -\(setq-default save-place t\)" +\(setq-default save-place t)" (interactive "P") - (if (not (or buffer-file-name dired-directory)) + (if (not (or buffer-file-name (and (derived-mode-p 'dired-mode) + dired-directory))) (message "Buffer `%s' not visiting a file or directory" (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)))) + (setq save-place (if parg + (> (prefix-numeric-value parg) 0) + (not save-place))) + (message (if save-place + "Place will be saved" + "No place will be saved in this file")))) (declare-function dired-get-filename "dired" (&optional localp no-error-if-not-filep)) @@ -172,10 +173,11 @@ file: ;; will be saved again when Emacs is killed. (or save-place-loaded (load-save-place-alist-from-file)) (let ((item (or buffer-file-name - (and dired-directory - (if (consp dired-directory) - (expand-file-name (car dired-directory)) - (expand-file-name dired-directory)))))) + (and (derived-mode-p 'dired-mode) + dired-directory + (expand-file-name (if (consp dired-directory) + (car dired-directory) + dired-directory)))))) (when (and item (or (not save-place-ignore-files-regexp) (not (string-match save-place-ignore-files-regexp @@ -184,7 +186,8 @@ file: (position (cond ((eq major-mode 'hexl-mode) (with-no-warnings (1+ (hexl-current-address)))) - (dired-directory + ((and (derived-mode-p 'dired-mode) + dired-directory) (let ((filename (dired-get-filename nil t))) (if filename `((dired-filename . ,filename)) @@ -202,8 +205,8 @@ file: (defun save-place-forget-unreadable-files () "Remove unreadable files from `save-place-alist'. For each entry in the alist, if `file-readable-p' returns nil for the -filename, remove the entry. Save the new alist \(as the first pair -may have changed\) back to `save-place-alist'." +filename, remove the entry. Save the new alist (as the first pair +may have changed) back to `save-place-alist'." (interactive) ;; the following was adapted from an in-place filtering function, ;; `filter-mod', used in the original. @@ -301,7 +304,8 @@ may have changed\) back to `save-place-alist'." (with-current-buffer (car buf-list) ;; save-place checks buffer-file-name too, but we can avoid ;; overhead of function call by checking here too. - (and (or buffer-file-name dired-directory) + (and (or buffer-file-name (and (derived-mode-p 'dired-mode) + dired-directory)) (save-place-to-alist)) (setq buf-list (cdr buf-list)))))) @@ -319,11 +323,13 @@ may have changed\) back to `save-place-alist'." (declare-function dired-goto-file "dired" (file)) (defun save-place-dired-hook () - "Position the point in a dired buffer." + "Position the point in a Dired buffer." (or save-place-loaded (load-save-place-alist-from-file)) - (let ((cell (assoc (if (consp dired-directory) - (expand-file-name (car dired-directory)) - (expand-file-name dired-directory)) + (let ((cell (assoc (and (derived-mode-p 'dired-mode) + dired-directory + (expand-file-name (if (consp dired-directory) + (car dired-directory) + dired-directory))) save-place-alist))) (if cell (progn