]> code.delx.au - gnu-emacs/blobdiff - lisp/register.el
Update AUCTeX
[gnu-emacs] / lisp / register.el
index c93d52c9f9bee2a636116cfaea94895a5531de67..bab9d01edf2b0a33953b72a1e18191fa065bfcad 100644 (file)
@@ -53,8 +53,7 @@ See the documentation of the variable `register-alist' for possible VALUE."
   (let ((aelt (assq register register-alist)))
     (if aelt
        (setcdr aelt value)
-      (setq aelt (cons register value))
-      (setq register-alist (cons aelt register-alist)))
+      (push (cons register value) register-alist))
     value))
 
 (defun point-to-register (register &optional arg)
@@ -63,6 +62,8 @@ With prefix argument, store current frame configuration.
 Use \\[jump-to-register] to go to that location or restore that configuration.
 Argument is a character, naming the register."
   (interactive "cPoint to register: \nP")
+  ;; Turn the marker into a file-ref if the buffer is killed.
+  (add-hook 'kill-buffer-hook 'register-swap-out nil t)
   (set-register register
                (if arg (list (current-frame-configuration) (point-marker))
                  (point-marker))))
@@ -121,20 +122,16 @@ delete any existing frames that the frame configuration doesn't mention.
      (t
       (error "Register doesn't contain a buffer position or configuration")))))
 
-;; Turn markers into file-query references when a buffer is killed.
 (defun register-swap-out ()
+  "Turn markers into file-query references when a buffer is killed."
   (and buffer-file-name
-       (let ((tail register-alist))
-        (while tail
-          (and (markerp (cdr (car tail)))
-               (eq (marker-buffer (cdr (car tail))) (current-buffer))
-               (setcdr (car tail)
-                       (list 'file-query
-                             buffer-file-name
-                             (marker-position (cdr (car tail))))))
-          (setq tail (cdr tail))))))
-
-(add-hook 'kill-buffer-hook 'register-swap-out)
+       (dolist (elem register-alist)
+        (and (markerp (cdr elem))
+             (eq (marker-buffer (cdr elem)) (current-buffer))
+             (setcdr elem
+                     (list 'file-query
+                           buffer-file-name
+                           (marker-position (cdr elem))))))))
 
 (defun number-to-register (number register)
   "Store a number in a register.
@@ -143,13 +140,13 @@ If NUMBER is nil, a decimal number is read from the buffer starting
 at point, and point moves to the end of that number.
 Interactively, NUMBER is the prefix arg (none means nil)."
   (interactive "P\ncNumber to register: ")
-  (set-register register 
+  (set-register register
                (if number
                    (prefix-numeric-value number)
                  (if (looking-at "\\s-*-?[0-9]+")
                      (progn
                        (goto-char (match-end 0))
-                       (string-to-int (match-string 0)))
+                       (string-to-number (match-string 0)))
                    0))))
 
 (defun increment-register (number register)
@@ -230,13 +227,24 @@ The Lisp value REGISTER is a character."
        (princ (car val))))
 
      ((stringp val)
+      (remove-list-of-text-properties 0 (length val)
+                                      yank-excluded-properties val)
       (if verbose
          (progn
            (princ "the text:\n")
            (princ val))
-       (princ "text starting with\n    ")
-       (string-match "[^ \t\n].\\{,20\\}" val)
-       (princ (match-string 0 val))))
+       (cond
+        ;; Extract first N characters starting with first non-whitespace.
+        ((string-match (format "[^ \t\n].\\{,%d\\}"
+                               ;; Deduct 6 for the spaces inserted below.
+                               (min 20 (max 0 (- (window-width) 6))))
+                       val)
+         (princ "text starting with\n    ")
+         (princ (match-string 0 val)))
+        ((string-match "^[ \t\n]+$" val)
+         (princ "whitespace"))
+        (t
+         (princ "the empty string")))))
      (t
       (princ "Garbage:\n")
       (if verbose (prin1 val))))))
@@ -253,7 +261,7 @@ Interactively, second arg is non-nil if prefix arg is supplied."
      ((consp val)
       (insert-rectangle val))
      ((stringp val)
-      (insert val))
+      (insert-for-yank val))
      ((numberp val)
       (princ val (current-buffer)))
      ((and (markerp val) (marker-position val))
@@ -296,8 +304,10 @@ START and END are buffer positions indicating what to prepend."
 
 (defun copy-rectangle-to-register (register start end &optional delete-flag)
   "Copy rectangular region into register REGISTER.
-With prefix arg, delete as well.
-Called from program, takes four args: REGISTER, START, END and DELETE-FLAG.
+With prefix arg, delete as well.  To insert this register
+in the buffer, use \\[insert-register].
+
+Called from a program, takes four args: REGISTER, START, END and DELETE-FLAG.
 START and END are buffer positions giving two corners of rectangle."
   (interactive "cCopy rectangle to register: \nr\nP")
   (set-register register
@@ -305,4 +315,6 @@ START and END are buffer positions giving two corners of rectangle."
                    (delete-extract-rectangle start end)
                  (extract-rectangle start end))))
 
+(provide 'register)
+;;; arch-tag: ce14dd68-8265-475f-9341-5d4ec5a53035
 ;;; register.el ends here