))
)))
+(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)
(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.
;;; @ 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