X-Git-Url: http://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-debug.el;h=3a9ede2cf04ccc87d0336dec3f0288e49a00a9aa;hp=6c1b051bff32a432016cbb0ff88676b70b100ede;hb=9fef09b977aaf04b431355dac2b4978af0e39f7e;hpb=8bf13d098caea1415e8580d41bee7e61a954696e diff --git a/lisp/riece-debug.el b/lisp/riece-debug.el index 6c1b051..3a9ede2 100644 --- a/lisp/riece-debug.el +++ b/lisp/riece-debug.el @@ -1,4 +1,4 @@ -;;; riece-debug.el --- debug support +;;; riece-debug.el --- debug support -*- lexical-binding: t -*- ;; Copyright (C) 1998-2005 Daiki Ueno ;; Author: Daiki Ueno @@ -19,20 +19,37 @@ ;; 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. ;;; Code: (require 'riece-globals) +(require 'riece-options) + +(defun riece-debug-1 (message detail) + (message "riece-debug: %s" message) + (with-current-buffer riece-debug-buffer + (goto-char (point-max)) + (let ((time (format-time-string "%Y-%m-%d:%H:%M:%S"))) + (if detail + (insert "*** " time ": " message "\n" detail "\n") + (insert "*** " time ": " message "\n"))))) + +(defun riece-debug (message &optional detail) + "Print a one-line debug MESSAGE at the bottom of the frame. +If the optional 2nd argument DETAIL is specified, it is stored into +`riece-debug-buffer'." + (ignore (riece-debug-1 message detail))) (defun riece-debug-reset-standard-output () - (save-excursion - (set-buffer riece-temp-buffer) + "Reset `riece-temp-buffer' to be used as `standard-output'." + (with-current-buffer riece-temp-buffer (buffer-disable-undo) (erase-buffer))) (defmacro riece-debug-with-backtrace (&rest body) + "Execute BODY and send a backtrace to `riece-temp-buffer'." `(unwind-protect (progn ,@body) (riece-debug-reset-standard-output) @@ -43,23 +60,35 @@ (put 'riece-debug-with-backtrace 'edebug-form-spec '(form body)) (defmacro riece-ignore-errors (location &rest body) + "Execute BODY; if an error occurs, return nil. +Otherwise, return result of last FORM. +If `riece-debug' is non-nil and an error occurred, it sends a +backtrace to standard-output." `(condition-case error (if riece-debug (riece-debug-with-backtrace ,@body) ,@body) (error (if riece-debug - (save-excursion - (set-buffer riece-temp-buffer) + (with-current-buffer riece-temp-buffer (goto-char (point-min)) (if (re-search-forward "^ signal(" nil t) (delete-region (point-min) (match-beginning 0))) - (message "Error in `%s': %S\n%s" ,location error (buffer-string)))) + (riece-debug (format "Error in `%s': %S" ,location error) + (buffer-string)))) nil))) (put 'riece-ignore-errors 'lisp-indent-function 1) (put 'riece-ignore-errors 'edebug-form-spec '(form body)) +(defun riece-funcall-ignore-errors (location function &rest args) + "Call FUNCTION with ARGS; if an error occurs, return nil. +Otherwise, return result of the function. +If `riece-debug' is non-nil and an error occurred, it sends a +backtrace to standard-output." + (riece-ignore-errors location + (apply function args))) + (provide 'riece-debug) ;;; riece-debug.el ends here