]> code.delx.au - gnu-emacs/blobdiff - lisp/register.el
(normal-splash-screen, fancy-splash-screens-1): Add a reference to the Lisp
[gnu-emacs] / lisp / register.el
index 98adce7ae86fdcb7e96cf288fda69da67c4e4bfb..8dea532410cc7ca189239414d983f470e6576cb6 100644 (file)
@@ -1,6 +1,7 @@
 ;;; register.el --- register commands for Emacs
 
-;; Copyright (C) 1985, 1993, 1994 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1993, 1994, 2002, 2003, 2004,
+;;   2005, 2006 Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: internal
@@ -19,8 +20,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
@@ -53,8 +54,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 +63,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 +123,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 +141,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,16 +228,26 @@ The Lisp value REGISTER is a character."
        (princ (car val))))
 
      ((stringp val)
-      (setq val
-           (remove-list-of-text-properties 0 (length val)
-                                           yank-excluded-properties val))
+      (if (eq yank-excluded-properties t)
+         (set-text-properties 0 (length val) nil 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))))))
@@ -270,7 +278,7 @@ Interactively, second arg is non-nil if prefix arg is supplied."
 Called from program, takes four args: REGISTER, START, END and DELETE-FLAG.
 START and END are buffer positions indicating what to copy."
   (interactive "cCopy to register: \nr\nP")
-  (set-register register (buffer-substring start end))
+  (set-register register (filter-buffer-substring start end))
   (if delete-flag (delete-region start end)))
 
 (defun append-to-register (register start end &optional delete-flag)
@@ -282,7 +290,7 @@ START and END are buffer positions indicating what to append."
   (or (stringp (get-register register))
       (error "Register does not contain text"))
   (set-register register (concat (get-register register)
-                           (buffer-substring start end)))
+                           (filter-buffer-substring start end)))
   (if delete-flag (delete-region start end)))
 
 (defun prepend-to-register (register start end &optional delete-flag)
@@ -293,14 +301,16 @@ START and END are buffer positions indicating what to prepend."
   (interactive "cPrepend to register: \nr\nP")
   (or (stringp (get-register register))
       (error "Register does not contain text"))
-  (set-register register (concat (buffer-substring start end)
+  (set-register register (concat (filter-buffer-substring start end)
                            (get-register register)))
   (if delete-flag (delete-region start end)))
 
 (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
@@ -308,4 +318,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