))
)))
-(defmacro defsubst-maybe (name &rest everything-else)
+(defmacro defmacro-maybe (name &rest everything-else)
(or (and (fboundp name)
- (not (get name 'defsubst-maybe)))
+ (not (get name 'defmacro-maybe)))
(` (or (fboundp (quote (, name)))
(progn
- (defsubst (, name) (,@ everything-else))
- (put (quote (, name)) 'defsubst-maybe t)
+ (defmacro (, name) (,@ everything-else))
+ (put (quote (, name)) 'defmacro-maybe t)
))
)))
-(defmacro defmacro-maybe (name &rest everything-else)
+(defmacro-maybe defsubst (name arglist &rest body)
+ "Define an inline function. The syntax is just like that of `defun'."
+ (cons 'defun (cons name (cons arglist body)))
+ )
+
+(defmacro defsubst-maybe (name &rest everything-else)
(or (and (fboundp name)
- (not (get name 'defmacro-maybe)))
+ (not (get name 'defsubst-maybe)))
(` (or (fboundp (quote (, name)))
(progn
- (defmacro (, name) (,@ everything-else))
- (put (quote (, name)) 'defmacro-maybe t)
+ (defsubst (, name) (,@ everything-else))
+ (put (quote (, name)) 'defsubst-maybe t)
))
)))
))
)))
+(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 (function
+ (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)
+ (subrp (symbol-function symbol))))
+
(defconst-maybe emacs-major-version (string-to-int emacs-version))
(defconst-maybe emacs-minor-version
(string-to-int
)
((> emacs-major-version 20))
((= emacs-major-version 20)
- (cond ((fboundp 'string)
+ (cond ((subr-fboundp 'string)
;; Emacs 20.3 or later
)
- ((fboundp 'concat-chars)
+ ((subr-fboundp 'concat-chars)
;; Emacs 20.1 or later
(defalias 'string 'concat-chars)
))
))
-;;; @ Emacs 19 emulation
+;;; @ Emacs 19.23 emulation
;;;
-(defmacro-maybe eval-and-compile (&rest body)
- "Like `progn', but evaluates the body at compile time and at load time."
- ;; Remember, it's magic.
- (cons 'progn body))
-
(defun-maybe minibuffer-prompt-width ()
"Return the display width of the minibuffer prompt."
(save-excursion
(setq list (cdr list)))
))
+(defun-maybe file-name-sans-extension (filename)
+ "Return FILENAME sans final \"extension\".
+The extension, in a file name, is the part that follows the last `.'."
+ (save-match-data
+ (let ((file (file-name-sans-versions (file-name-nondirectory filename)))
+ directory)
+ (if (string-match "\\.[^.]*\\'" file)
+ (if (setq directory (file-name-directory filename))
+ (expand-file-name (substring file 0 (match-beginning 0))
+ directory)
+ (substring file 0 (match-beginning 0)))
+ filename))))
+
(defmacro-maybe make-local-hook (hook))
;; They are not Emacs features
(list 'add-hook hook function append)
))
-(defmacro remove-local-hook (hook function)
+(defmacro-maybe remove-local-hook (hook function)
(if (fboundp 'make-local-hook)
(list 'remove-hook hook function t)
(list 'remove-hook hook function)
"(unless COND BODY...): if COND yields nil, do BODY, else return nil."
(cons 'if (cons cond (cons nil body))))
+;; imported from Emacs 20.3.
+(defun-maybe last (x &optional n)
+ "Return the last link of the list X. Its car is the last element.
+If X is nil, return nil.
+If N is non-nil, return the Nth-to-last link of X.
+If N is bigger than the length of X, return X."
+ (if n
+ (let ((m 0) (p x))
+ (while (consp p)
+ (setq m (1+ m) p (cdr p)))
+ (if (<= n 0) p
+ (if (< n m) (nthcdr (- m n) x) x)))
+ (while (cdr x)
+ (setq x (cdr x)))
+ x))
+
(defmacro-maybe save-current-buffer (&rest body)
"Save the current buffer; execute BODY; restore the current buffer.
Executes BODY just like `progn'."
(and (buffer-name (, temp-buffer))
(kill-buffer (, temp-buffer))))))))
-;; imported from Emacs 20.3.
-(defun-maybe last (x &optional n)
- "Return the last link of the list X. Its car is the last element.
-If X is nil, return nil.
-If N is non-nil, return the Nth-to-last link of X.
-If N is bigger than the length of X, return X."
- (if n
- (let ((m 0) (p x))
- (while (consp p)
- (setq m (1+ m) p (cdr p)))
- (if (<= n 0) p
- (if (< n m) (nthcdr (- m n) x) x)))
- (while (cdr x)
- (setq x (cdr x)))
- x))
+(defmacro-maybe combine-after-change-calls (&rest body)
+ "Execute BODY."
+ (cons 'progn body))
;; imported from Emacs 20.3. (cl function)
(defun-maybe butlast (x &optional n)
(make-obsolete oldfun newfun)
)
+(when (subr-fboundp 'read-event)
+ ;; for Emacs 19 or later
+
+ (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]"
+ ((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.
+Note that CH (the keystroke specifier) can be an integer, a character
+or a symbol such as 'clear. [XEmacs emulating function]"
+ ch)
+
+ (defun-maybe event-to-character (event)
+ "Return the character approximation to the given event object.
+If the event isn't a keypress, this returns nil.
+\[XEmacs emulating function]"
+ (cond ((symbolp event)
+ ;; mask is (BASE-TYPE MODIFIER-BITS) or nil.
+ (let ((mask (get event 'event-symbol-element-mask)))
+ (if mask
+ (let ((base (get (car mask) 'ascii-character)))
+ (if base
+ (logior base (car (cdr mask)))
+ )))))
+ ((integerp event) event)
+ ))
+ )
+
+
+;;; @ MULE 2 emulation
+;;;
+
+(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
;;;