Copyright (C) 2000-2012 |
GNU Info (emacs-lisp-intro.info)Complete kill-regionThe Complete `kill-region' Definition ------------------------------------- We will go through the `condition-case' code in a moment. First, let us look at the complete definition of `kill-region', with comments added: (defun kill-region (beg end) "Kill between point and mark. The text is deleted but saved in the kill ring." (interactive "r") ;; 1. `condition-case' takes three arguments. ;; If the first argument is nil, as it is here, ;; information about the error signal is not ;; stored for use by another function. (condition-case nil ;; 2. The second argument to `condition-case' ;; tells the Lisp interpreter what to do when all goes well. ;; The `delete-and-extract-region' function usually does the ;; work. If the beginning and ending of the region are both ;; the same, then the variable `string' will be empty, or nil (let ((string (delete-and-extract-region beg end))) ;; `when' is an `if' clause that cannot take an `else-part'. ;; Emacs normally sets the value of `last-command' to the ;; previous command. ;; `kill-append' concatenates the new string and the old. ;; `kill-new' inserts text into a new item in the kill ring. (when string (if (eq last-command 'kill-region) ;; if true, prepend string (kill-append string (< end beg)) (kill-new string))) (setq this-command 'kill-region)) ;; 3. The third argument to `condition-case' tells the interpreter ;; what to do with an error. ;; The third argument has a conditions part and a body part. ;; If the conditions are met (in this case, ;; if text or buffer is read-only) ;; then the body is executed. ((buffer-read-only text-read-only) ;; this is the if-part ;; then... (copy-region-as-kill beg end) (if kill-read-only-ok ;; usually this variable is nil (message "Read only text copied to kill ring") ;; or else, signal an error if the buffer is read-only; (barf-if-buffer-read-only) ;; and, in any case, signal that the text is read-only. (signal 'text-read-only (list (current-buffer))))))) automatically generated by info2www version 1.2.2.9 |