From: morioka Date: Wed, 28 Oct 1998 08:56:31 +0000 (+0000) Subject: (defun-maybe-cond): New macro. X-Git-Tag: apel-9_9~7 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=9f3158a83c75893da40ceb2ef3fd6ead93d241c9;p=elisp%2Fapel.git (defun-maybe-cond): New macro. (next-command-event): Use `defun-maybe-cond'. (cancel-undo-boundary): Use `defun-maybe-cond'. --- diff --git a/poe.el b/poe.el index 90a0571..fb56d9e 100644 --- a/poe.el +++ b/poe.el @@ -95,6 +95,27 @@ )) ))) +(defmacro defun-maybe-cond (name args &optional doc &rest everything-else) + (unless (stringp doc) + (setq everything-else (cons doc everything-else) + doc nil) + ) + (or (and (fboundp name) + (not (get name 'defun-maybe))) + (` (unless (fboundp (quote (, name))) + (cond (,@ (mapcar (lambda (case) + (list (car case) + (if doc + (` (defun (, name) (, args) + (, doc) + (,@ (cdr case)))) + (` (defun (, name) (, args) + (,@ (cdr case)))) + ))) + everything-else))) + (put (quote (, name)) 'defun-maybe t) + )))) + (defsubst subr-fboundp (symbol) "Return t if SYMBOL's function definition is a built-in function." (and (fboundp symbol) @@ -477,33 +498,23 @@ as obsolete. [XEmacs emulating function]" (when (subr-fboundp 'read-event) ;; for Emacs 19 or later - (cond - ((subr-fboundp 'string) - ;; for Emacs 20.3 or later - (defun-maybe next-command-event (&optional event prompt) - "Read an event object from the input stream. -If EVENT is non-nil, it should be an event object and will be filled -in and returned; otherwise a new event object will be created and -returned. -If PROMPT is non-nil, it should be a string and will be displayed in -the echo area while this function is waiting for an event. -\[XEmacs emulating function]" - (read-event prompt t) - ) - ) - (t - (defun-maybe next-command-event (&optional event prompt) - "Read an event object from the input stream. + + (defun-maybe-cond next-command-event (&optional event prompt) + "Read an event object from the input stream. If EVENT is non-nil, it should be an event object and will be filled in and returned; otherwise a new event object will be created and returned. If PROMPT is non-nil, it should be a string and will be displayed in the echo area while this function is waiting for an event. \[XEmacs emulating function]" - (message prompt) - (read-event) - ) - )) + ((subr-fboundp 'string) + ;; for Emacs 20.3 or later + (read-event prompt t) + ) + (t + (if prompt (message prompt)) + (read-event) + )) (defsubst-maybe character-to-event (ch) "Convert keystroke CH into an event structure, replete with bucky bits. @@ -531,19 +542,18 @@ If the event isn't a keypress, this returns nil. ;;; @ MULE 2 emulation ;;; -(if (boundp 'buffer-undo-list) - ;; for Emacs 19.7 or later - (defun-maybe cancel-undo-boundary () - "Cancel undo boundary. [MULE 2.3 emulating function]" - (if (and (consp buffer-undo-list) - ;; if car is nil. - (null (car buffer-undo-list))) - (setq buffer-undo-list (cdr buffer-undo-list)) - )) - ;; for anything older than Emacs 19.7. - (defun-maybe cancel-undo-boundary () - "Cancel undo boundary. [MULE 2.3 emulating function]") - ) +(defun-maybe-cond cancel-undo-boundary () + "Cancel undo boundary. [MULE 2.3 emulating function]" + ((boundp 'buffer-undo-list) + ;; for Emacs 19.7 or later + (if (and (consp buffer-undo-list) + ;; if car is nil. + (null (car buffer-undo-list))) + (setq buffer-undo-list (cdr buffer-undo-list)) + )) + (t + ;; for anything older than Emacs 19.7. + )) ;;; @ end