Add support for dired in saveplace.
This commit is contained in:
parent
7cb18056e6
commit
d4466a91f2
3 changed files with 49 additions and 18 deletions
|
@ -1,3 +1,11 @@
|
|||
2013-06-99 Ivan Kanis <ivan@kanis.fr>
|
||||
|
||||
Add support for dired in saveplace.
|
||||
* dired.el (dired-initial-position-hook): New variable.
|
||||
(dired-initial-position): Call hook to place cursor position.
|
||||
* saveplace.el (save-place-to-alist): Add dired position.
|
||||
(save-place-dired-hook): New function.
|
||||
|
||||
2013-06-14 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* subr.el (eval-after-load, set-temporary-overlay-map): Use indirection
|
||||
|
|
|
@ -217,6 +217,13 @@ with the buffer narrowed to the listing."
|
|||
;; Note this can't simply be run inside function `dired-ls' as the hook
|
||||
;; functions probably depend on the dired-subdir-alist to be OK.
|
||||
|
||||
(defcustom dired-initial-point-hook nil
|
||||
"This hook is used to position the point.
|
||||
It is run the function `dired-initial-position'."
|
||||
:group 'dired
|
||||
:type 'hook
|
||||
:version "24.4")
|
||||
|
||||
(defcustom dired-dnd-protocol-alist
|
||||
'(("^file:///" . dired-dnd-handle-local-file)
|
||||
("^file://" . dired-dnd-handle-file)
|
||||
|
@ -2758,11 +2765,13 @@ as returned by `dired-get-filename'. LIMIT is the search limit."
|
|||
;; FIXME document whatever dired-x is doing.
|
||||
(defun dired-initial-position (dirname)
|
||||
"Where point should go in a new listing of DIRNAME.
|
||||
Point assumed at beginning of new subdir line."
|
||||
Point assumed at beginning of new subdir line.
|
||||
It runs the hook `dired-initial-position-hook'."
|
||||
(end-of-line)
|
||||
(and (featurep 'dired-x) dired-find-subdir
|
||||
(dired-goto-subdir dirname))
|
||||
(if dired-trivial-filenames (dired-goto-next-nontrivial-file)))
|
||||
(if dired-trivial-filenames (dired-goto-next-nontrivial-file))
|
||||
(run-hooks 'dired-initial-point-hook))
|
||||
|
||||
;; These are hooks which make tree dired work.
|
||||
;; They are in this file because other parts of dired need to call them.
|
||||
|
|
|
@ -169,22 +169,24 @@ file:
|
|||
;; 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))
|
||||
(when (and buffer-file-name
|
||||
(or (not save-place-ignore-files-regexp)
|
||||
(not (string-match save-place-ignore-files-regexp
|
||||
buffer-file-name))))
|
||||
(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 dired-directory (expand-file-name 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 (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 item position)
|
||||
save-place-alist)))))))
|
||||
|
||||
(defun save-place-forget-unreadable-files ()
|
||||
"Remove unreadable files from `save-place-alist'.
|
||||
|
@ -300,6 +302,17 @@ may have changed\) back to `save-place-alist'."
|
|||
;; and make sure it will be saved again for later
|
||||
(setq save-place t)))))
|
||||
|
||||
(defun save-place-dired-hook ()
|
||||
"Position the point in a dired buffer."
|
||||
(or save-place-loaded (load-save-place-alist-from-file))
|
||||
(let ((cell (assoc (expand-file-name dired-directory) save-place-alist)))
|
||||
(if cell
|
||||
(progn
|
||||
(or revert-buffer-in-progress-p
|
||||
(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)
|
||||
|
@ -310,6 +323,7 @@ may have changed\) back to `save-place-alist'."
|
|||
|
||||
(add-hook 'find-file-hook 'save-place-find-file-hook t)
|
||||
|
||||
(add-hook 'dired-initial-point-hook 'save-place-dired-hook)
|
||||
(unless noninteractive
|
||||
(add-hook 'kill-emacs-hook 'save-place-kill-emacs-hook))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue