diff options
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/register.el | 25 |
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. | |||
| 63 | Use \\[jump-to-register] to go to that location or restore that configuration. | 62 | Use \\[jump-to-register] to go to that location or restore that configuration. |
| 64 | Argument is a character, naming the register." | 63 | Argument 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. |