Copyright (C) 2000-2012 |
GNU Info (emacs-lisp-intro.info)yank-pop`yank-pop' ========== After understanding `yank', the `yank-pop' function is easy. Leaving out the documentation to save space, it looks like this: (defun yank-pop (arg) (interactive "*p") (if (not (eq last-command 'yank)) (error "Previous command was not a yank")) (setq this-command 'yank) (let ((before (< (point) (mark)))) (delete-region (point) (mark)) (rotate-yank-pointer arg) (set-mark (point)) (insert (car kill-ring-yank-pointer)) (if before (exchange-point-and-mark)))) The function is interactive with a small `p' so the prefix argument is processed and passed to the function. The command can only be used after a previous yank; otherwise an error message is sent. This check uses the variable `last-command' which is discussed elsewhere. (Note: copy-region-as-kill.) The `let' clause sets the variable `before' to true or false depending whether point is before or after mark and then the region between point and mark is deleted. This is the region that was just inserted by the previous yank and it is this text that will be replaced. Next the `kill-ring-yank-pointer' is rotated so that the previously inserted text is not reinserted yet again. Mark is set at the beginning of the place the new text will be inserted and then the first element to which `kill-ring-yank-pointer' points is inserted. This leaves point after the new text. If in the previous yank, point was left before the inserted text, point and mark are now exchanged so point is again left in front of the newly inserted text. That is all there is to it! automatically generated by info2www version 1.2.2.9 |