comparison lisp/cmdloop.el @ 284:558f606b08ae r21-0b40

Import from CVS: tag r21-0b40
author cvs
date Mon, 13 Aug 2007 10:34:13 +0200
parents c42ec1d1cded
children c9fe270a4101
comparison
equal deleted inserted replaced
283:fa3d41851a08 284:558f606b08ae
104 ((not (one-window-p t)) 104 ((not (one-window-p t))
105 (delete-other-windows)) 105 (delete-other-windows))
106 ((string-match "^ \\*" (buffer-name (current-buffer))) 106 ((string-match "^ \\*" (buffer-name (current-buffer)))
107 (bury-buffer)))) 107 (bury-buffer))))
108 108
109 ;;#### This should really be a ring of last errors. 109 ;; Someone wrote: "This should really be a ring of last errors."
110 ;;
111 ;; But why bother? This stuff is not all that necessary now that we
112 ;; have message log, anyway.
110 (defvar last-error nil 113 (defvar last-error nil
111 "#### Document me.") 114 "Object describing the last signaled error.")
112 115
113 (defcustom errors-deactivate-region nil 116 (defcustom errors-deactivate-region nil
114 "*Non-nil means that errors will cause the region to be deactivated." 117 "*Non-nil means that errors will cause the region to be deactivated."
115 :type 'boolean 118 :type 'boolean
116 :group 'editing-basics) 119 :group 'editing-basics)
152 t)) 155 t))
153 156
154 (defun describe-last-error () 157 (defun describe-last-error ()
155 "Redisplay the last error-message. See the variable `last-error'." 158 "Redisplay the last error-message. See the variable `last-error'."
156 (interactive) 159 (interactive)
157 (with-displaying-help-buffer 160 (if last-error
158 (lambda () 161 (with-displaying-help-buffer
159 (princ "Last error was:\n" standard-output) 162 (lambda ()
160 (display-error last-error standard-output)))) 163 (princ "Last error was:\n" standard-output)
164 (display-error last-error standard-output)))
165 (message "No error yet")))
161 166
162 167
163 ;;#### Must be done later in the loadup sequence 168 ;;#### Must be done later in the loadup sequence
164 ;(define-key (symbol-function 'help-command) "e" 'describe-last-error) 169 ;(define-key (symbol-function 'help-command) "e" 'describe-last-error)
165 170
437 If a mouse click or non-ASCII character is detected, an error is 442 If a mouse click or non-ASCII character is detected, an error is
438 signalled. The character typed is returned as an ASCII value. This 443 signalled. The character typed is returned as an ASCII value. This
439 is most likely the wrong thing for you to be using: consider using 444 is most likely the wrong thing for you to be using: consider using
440 the `next-command-event' function instead." 445 the `next-command-event' function instead."
441 (save-excursion 446 (save-excursion
442 (let* ((inhibit-quit t) 447 (let ((event (next-command-event)))
443 (event (next-command-event))) 448 (or inhibit-quit
449 (and (event-matches-key-specifier-p event (quit-char))
450 (signal 'quit nil)))
444 (prog1 (or (event-to-character event) 451 (prog1 (or (event-to-character event)
445 ;; Kludge. If the event we read was a mouse-release, 452 ;; Kludge. If the event we read was a mouse-release,
446 ;; discard it and read the next one. 453 ;; discard it and read the next one.
447 (if (button-release-event-p event) 454 (if (button-release-event-p event)
448 (event-to-character (next-command-event event))) 455 (event-to-character (next-command-event event)))
454 "Read a character from the command input (keyboard or macro). 461 "Read a character from the command input (keyboard or macro).
455 If a mouse click or non-ASCII character is detected, it is discarded. 462 If a mouse click or non-ASCII character is detected, it is discarded.
456 The character typed is returned as an ASCII value. This is most likely 463 The character typed is returned as an ASCII value. This is most likely
457 the wrong thing for you to be using: consider using the 464 the wrong thing for you to be using: consider using the
458 `next-command-event' function instead." 465 `next-command-event' function instead."
459 (let ((inhibit-quit t) 466 (let (event ch)
460 event ch)
461 (while (progn 467 (while (progn
462 (setq event (next-command-event)) 468 (setq event (next-command-event))
469 (or inhibit-quit
470 (and (event-matches-key-specifier-p event (quit-char))
471 (signal 'quit nil)))
463 (setq ch (event-to-character event)) 472 (setq ch (event-to-character event))
464 (deallocate-event event) 473 (deallocate-event event)
465 (null ch))) 474 (null ch)))
466 ch)) 475 ch))
467 476
468 (defun read-quoted-char (&optional prompt) 477 (defun read-quoted-char (&optional prompt)
469 "Like `read-char', except that if the first character read is an octal 478 "Like `read-char', except that if the first character read is an octal
470 digit, we read up to two more octal digits and return the character 479 digit, we read up to two more octal digits and return the character
471 represented by the octal number consisting of those digits. 480 represented by the octal number consisting of those digits.
472 Optional argument PROMPT specifies a string to use to prompt the user." 481 Optional argument PROMPT specifies a string to use to prompt the user."
473 (save-excursion 482 (let ((count 0) (code 0) done
474 (let ((count 0) (code 0) 483 (prompt (and prompt (gettext prompt)))
475 (prompt (and prompt (gettext prompt))) 484 char event)
476 char event) 485 (while (and (not done) (< count 3))
477 (while (< count 3) 486 (let ((inhibit-quit (zerop count))
478 (let ((inhibit-quit (zerop count))
479 ;; Don't let C-h get the help message--only help function keys. 487 ;; Don't let C-h get the help message--only help function keys.
480 (help-char nil) 488 (help-char nil)
481 (help-form 489 (help-form
482 "Type the special character you want to use, 490 "Type the special character you want to use,
483 or three octal digits representing its character code.")) 491 or three octal digits representing its character code."))
484 (and prompt (display-message 'prompt (format "%s-" prompt))) 492 (and prompt (display-message 'prompt (format "%s-" prompt)))
485 (setq event (next-command-event) 493 (setq event (next-command-event)
486 char (or (event-to-character event nil nil t) 494 char (or (event-to-character event nil nil t)
487 (error "key read cannot be inserted in a buffer: %S" 495 (signal 'error
488 event))) 496 (list "key read cannot be inserted in a buffer"
489 (if inhibit-quit (setq quit-flag nil))) 497 event))))
490 (cond ((null char)) 498 (if inhibit-quit (setq quit-flag nil)))
491 ((and (<= ?0 char) (<= char ?7)) 499 (cond ((<= ?0 char ?7)
492 (setq code (+ (* code 8) (- char ?0)) 500 (setq code (+ (* code 8) (- char ?0))
493 count (1+ count)) 501 count (1+ count))
494 (and prompt (display-message 502 (when prompt
495 'prompt 503 (display-message 'prompt
496 (setq prompt (format "%s %c" prompt char))))) 504 (setq prompt (format "%s %c" prompt char)))))
497 ((> count 0) 505 ((> count 0)
498 (setq unread-command-event event 506 (setq unread-command-event event
499 count 259)) 507 done t))
500 (t (setq code char count 259)))) 508 (t (setq code (char-int char)
509 done t))))
510 (int-char code)
501 ;; Turn a meta-character into a character with the 0200 bit set. 511 ;; Turn a meta-character into a character with the 0200 bit set.
502 (logior (if (/= (logand code ?\M-\^@) 0) 128 0) 512 ; (logior (if (/= (logand code ?\M-\^@) 0) 128 0)
503 (logand 255 code))))) 513 ; (logand 255 code))))
514 ))
504 515
505 (defun momentary-string-display (string pos &optional exit-char message) 516 (defun momentary-string-display (string pos &optional exit-char message)
506 "Momentarily display STRING in the buffer at POS. 517 "Momentarily display STRING in the buffer at POS.
507 Display remains until next character is typed. 518 Display remains until next character is typed.
508 If the char is EXIT-CHAR (optional third arg, default is SPC) it is swallowed; 519 If the char is EXIT-CHAR (optional third arg, default is SPC) it is swallowed;