aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/register.el25
1 files changed, 11 insertions, 14 deletions
diff --git a/lisp/register.el b/lisp/register.el
index 98adce7ae86..3adb84ba8b6 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -53,8 +53,7 @@ See the documentation of the variable `register-alist' for possible VALUE."
53 (let ((aelt (assq register register-alist))) 53 (let ((aelt (assq register register-alist)))
54 (if aelt 54 (if aelt
55 (setcdr aelt value) 55 (setcdr aelt value)
56 (setq aelt (cons register value)) 56 (push (cons register value) register-alist))
57 (setq register-alist (cons aelt register-alist)))
58 value)) 57 value))
59 58
60(defun point-to-register (register &optional arg) 59(defun point-to-register (register &optional arg)
@@ -63,6 +62,8 @@ With prefix argument, store current frame configuration.
63Use \\[jump-to-register] to go to that location or restore that configuration. 62Use \\[jump-to-register] to go to that location or restore that configuration.
64Argument is a character, naming the register." 63Argument is a character, naming the register."
65 (interactive "cPoint to register: \nP") 64 (interactive "cPoint to register: \nP")
65 ;; Turn the marker into a file-ref if the buffer is killed.
66 (add-hook 'kill-buffer-hook 'register-swap-out nil t)
66 (set-register register 67 (set-register register
67 (if arg (list (current-frame-configuration) (point-marker)) 68 (if arg (list (current-frame-configuration) (point-marker))
68 (point-marker)))) 69 (point-marker))))
@@ -121,20 +122,16 @@ delete any existing frames that the frame configuration doesn't mention.
121 (t 122 (t
122 (error "Register doesn't contain a buffer position or configuration"))))) 123 (error "Register doesn't contain a buffer position or configuration")))))
123 124
124;; Turn markers into file-query references when a buffer is killed.
125(defun register-swap-out () 125(defun register-swap-out ()
126 "Turn markers into file-query references when a buffer is killed."
126 (and buffer-file-name 127 (and buffer-file-name
127 (let ((tail register-alist)) 128 (dolist (elem register-alist)
128 (while tail 129 (and (markerp (cdr elem))
129 (and (markerp (cdr (car tail))) 130 (eq (marker-buffer (cdr elem)) (current-buffer))
130 (eq (marker-buffer (cdr (car tail))) (current-buffer)) 131 (setcdr elem
131 (setcdr (car tail) 132 (list 'file-query
132 (list 'file-query 133 buffer-file-name
133 buffer-file-name 134 (marker-position (cdr elem))))))))
134 (marker-position (cdr (car tail))))))
135 (setq tail (cdr tail))))))
136
137(add-hook 'kill-buffer-hook 'register-swap-out)
138 135
139(defun number-to-register (number register) 136(defun number-to-register (number register)
140 "Store a number in a register. 137 "Store a number in a register.