- (if buffer-file-name
- (progn
- (let ((cell (assoc buffer-file-name save-place-alist))
- (position (if (not (eq major-mode 'hexl-mode))
- (point)
- (with-no-warnings
- (1+ (hexl-current-address))))))
- (if cell
- (setq save-place-alist (delq cell save-place-alist)))
- (if (and save-place
- (not (= position 1))) ;; Optimize out the degenerate case.
- (setq save-place-alist
- (cons (cons buffer-file-name position)
- save-place-alist)))))))
+ (let ((item (or buffer-file-name
+ (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
+ item))))
+ (let ((cell (assoc item save-place-alist))
+ (position (cond ((eq major-mode 'hexl-mode)
+ (with-no-warnings
+ (1+ (hexl-current-address))))
+ ((and (derived-mode-p 'dired-mode)
+ dired-directory)
+ (let ((filename (dired-get-filename nil t)))
+ (if filename
+ `((dired-filename . ,filename))
+ (point))))
+ (t (point)))))
+ (if cell
+ (setq save-place-alist (delq cell save-place-alist)))
+ (if (and save-place
+ (not (and (integerp position)
+ (= position 1)))) ;; Optimize out the degenerate case.
+ (setq save-place-alist
+ (cons (cons item position)
+ save-place-alist)))))))