X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=emu.el;h=07134150a3846ea6cc29151b57bfd3c3107ee82e;hb=0fc09247dc96f05d9d69ca35b1728b3b584c4208;hp=7cc47ebfe12b8857487d950b0976c96d1f7a9cb3;hpb=ffeba3c986971ce58ec384999c4dd88bf091887b;p=elisp%2Fapel.git diff --git a/emu.el b/emu.el index 7cc47eb..0713415 100644 --- a/emu.el +++ b/emu.el @@ -1,9 +1,8 @@ ;;; emu.el --- Emulation module for each Emacs variants -;; Copyright (C) 1995,1996,1997 Free Software Foundation, Inc. +;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. ;; Author: MORIOKA Tomohiko -;; Version: $Id: emu.el,v 7.40 1997/03/06 21:35:37 morioka Exp $ ;; Keywords: emulation, compatibility, NEmacs, MULE, Emacs/mule, XEmacs ;; This file is part of emu. @@ -36,6 +35,17 @@ )) ))) +(defmacro defsubst-maybe (name &rest everything-else) + (or (and (fboundp name) + (not (get name 'defsubst-maybe)) + ) + (` (or (fboundp (quote (, name))) + (progn + (defsubst (, name) (,@ everything-else)) + (put (quote (, name)) 'defsubst-maybe t) + )) + ))) + (defmacro defmacro-maybe (name &rest everything-else) (or (and (fboundp name) (not (get name 'defmacro-maybe)) @@ -48,18 +58,27 @@ ))) (put 'defun-maybe 'lisp-indent-function 'defun) +(put 'defsubst-maybe 'lisp-indent-function 'defun) (put 'defmacro-maybe 'lisp-indent-function 'defun) +(defmacro defconst-maybe (name &rest everything-else) + (or (and (boundp name) + (not (get name 'defconst-maybe)) + ) + (` (or (boundp (quote (, name))) + (progn + (defconst (, name) (,@ everything-else)) + (put (quote (, name)) 'defconst-maybe t) + )) + ))) -(or (boundp 'emacs-major-version) - (defconst emacs-major-version (string-to-int emacs-version))) -(or (boundp 'emacs-minor-version) - (defconst emacs-minor-version - (string-to-int - (substring - emacs-version - (string-match (format "%d\\." emacs-major-version) emacs-version) - )))) + +(defconst-maybe emacs-major-version (string-to-int emacs-version)) +(defconst-maybe emacs-minor-version + (string-to-int + (substring emacs-version + (string-match (format "%d\\." emacs-major-version) + emacs-version)))) (defvar running-emacs-18 (<= emacs-major-version 18)) (defvar running-xemacs (string-match "XEmacs" emacs-version)) @@ -81,14 +100,19 @@ (or (and running-xemacs-19 (>= emacs-minor-version 14)) running-xemacs-20-or-later)) -(cond (running-mule-merged-emacs - ;; for mule merged EMACS +(cond (running-xemacs + ;; for XEmacs + (require 'emu-xemacs) + (if (featurep 'mule) + ;; for XEmacs with MULE + (require 'emu-x20) + ;; for XEmacs without MULE + (require 'emu-latin1) + )) + (running-mule-merged-emacs + ;; for Emacs 20.1 and 20.2 (require 'emu-e20) ) - (running-xemacs-with-mule - ;; for XEmacs/mule - (require 'emu-x20) - ) ((boundp 'MULE) ;; for MULE 1.* and 2.* (require 'emu-mule) @@ -98,8 +122,9 @@ (require 'emu-nemacs) ) (t - ;; for EMACS 19 and XEmacs 19 (without mule) + ;; for Emacs 19 (require 'emu-e19) + (require 'emu-latin1) )) @@ -109,11 +134,11 @@ (defun charsets-to-mime-charset (charsets) "Return MIME charset from list of charset CHARSETS. This function refers variable `charsets-mime-charset-alist' -and `default-mime-charset'. [emu.el]" +and `default-mime-charset'." (if charsets (or (catch 'tag (let ((rest charsets-mime-charset-alist) - cell csl) + cell) (while (setq cell (car rest)) (if (catch 'not-subset (let ((set1 charsets) @@ -134,6 +159,17 @@ and `default-mime-charset'. [emu.el]" default-mime-charset))) +;;; @ Emacs 19 emulation +;;; + +(defun-maybe minibuffer-prompt-width () + "Return the display width of the minibuffer prompt." + (save-excursion + (set-buffer (window-buffer (minibuffer-window))) + (current-column) + )) + + ;;; @ Emacs 19.29 emulation ;;; @@ -234,6 +270,75 @@ Value is nil if OBJECT is not a buffer or if it has been killed. (list 'select-window 'save-selected-window-window)))) +;;; @ Emacs 20.1 emulation +;;; + +;; This macro was imported Emacs 20.2. +(defmacro-maybe when (cond &rest body) + "(when COND BODY...): if COND yields non-nil, do BODY, else return nil." + (list 'if cond (cons 'progn body))) + +(defmacro-maybe save-current-buffer (&rest body) + "Save the current buffer; execute BODY; restore the current buffer. +Executes BODY just like `progn'." + (` (let ((orig-buffer (current-buffer))) + (unwind-protect + (progn (,@ body)) + (set-buffer orig-buffer))))) + +;; This macro was imported Emacs 20.2. +(defmacro-maybe with-current-buffer (buffer &rest body) + "Execute the forms in BODY with BUFFER as the current buffer. +The value returned is the value of the last form in BODY. +See also `with-temp-buffer'." + (` (save-current-buffer + (set-buffer (, buffer)) + (,@ body)))) + +;; This macro was imported Emacs 20.2. +(defmacro-maybe with-temp-buffer (&rest forms) + "Create a temporary buffer, and evaluate FORMS there like `progn'. +See also `with-temp-file' and `with-output-to-string'." + (let ((temp-buffer (make-symbol "temp-buffer"))) + (` (let (((, temp-buffer) + (get-buffer-create (generate-new-buffer-name " *temp*")))) + (unwind-protect + (with-current-buffer (, temp-buffer) + (,@ forms)) + (and (buffer-name (, temp-buffer)) + (kill-buffer (, temp-buffer)))))))) + +;; This function was imported from XEmacs 21. +(defun-maybe split-string (string &optional pattern) + "Return a list of substrings of STRING which are separated by PATTERN. +If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"." + (or pattern + (setq pattern "[ \f\t\n\r\v]+")) + ;; The FSF version of this function takes care not to cons in case + ;; of infloop. Maybe we should synch? + (let (parts (start 0)) + (while (string-match pattern string start) + (setq parts (cons (substring string start (match-beginning 0)) parts) + start (match-end 0))) + (nreverse (cons (substring string start) parts)))) + + +;;; @ Emacs 20.3 emulation +;;; + +(defmacro-maybe string-as-unibyte (string) + "Return a unibyte string with the same individual bytes as STRING. +If STRING is unibyte, the result is STRING itself. +\[Emacs 20.3 emulating macro]" + string) + +(defmacro-maybe string-as-multibyte (string) + "Return a multibyte string with the same individual bytes as STRING. +If STRING is multibyte, the result is STRING itself. +\[Emacs 20.3 emulating macro]" + string) + + ;;; @ XEmacs emulation ;;; @@ -246,6 +351,22 @@ Value is nil if OBJECT is not a buffer or if it has been killed. (and (consp obj)(eq (car obj) 'lambda)) )) +(defun-maybe point-at-eol (&optional arg buffer) + "Return the character position of the last character on the current line. +With argument N not nil or 1, move forward N - 1 lines first. +If scan reaches end of buffer, return that position. +This function does not move point. [XEmacs emulating function]" + (save-excursion + (if buffer + (set-buffer buffer) + ) + (if arg + (forward-line (1- arg)) + ) + (end-of-line) + (point) + )) + ;;; @ for XEmacs 20 ;;; @@ -256,12 +377,18 @@ Value is nil if OBJECT is not a buffer or if it has been killed. (or (fboundp 'int-char) (fset 'int-char (symbol-function 'identity)) ) +(or (fboundp 'char-or-char-int-p) + (fset 'char-or-char-int-p (symbol-function 'integerp)) + ) ;;; @ for text/richtext and text/enriched ;;; -(cond ((or running-emacs-19_29-or-later running-xemacs-19_14-or-later) +(cond ((fboundp 'richtext-decode) + ;; have richtext.el + ) + ((or running-emacs-19_29-or-later running-xemacs-19_14-or-later) ;; have enriched.el (autoload 'richtext-decode "richtext") (or (assq 'text/richtext format-alist)