X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=emu.el;h=934abd62e415314030937bd807d03fb953e08547;hb=0b7d4df3415bcb377912a1490c392a20b4a7ab97;hp=ffdbd7283141f3c05cb008da0a3030a8c8f09c43;hpb=f889709a7c1dd29850aa9005b5f8b982bdbbd927;p=elisp%2Fapel.git diff --git a/emu.el b/emu.el index ffdbd72..934abd6 100644 --- a/emu.el +++ b/emu.el @@ -100,14 +100,23 @@ (or (and running-xemacs-19 (>= emacs-minor-version 14)) running-xemacs-20-or-later)) -(cond (running-mule-merged-emacs +(cond (running-xemacs + ;; for XEmacs + (require 'emu-xemacs) + (cond ((featurep 'mule) + ;; for XEmacs with MULE + (require 'emu-20) + (require 'emu-x20) + ) + (t + ;; 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 with mule - (require 'emu-x20) - ) ((boundp 'MULE) ;; for MULE 1.* and 2.* (require 'emu-mule) @@ -117,7 +126,8 @@ (require 'emu-nemacs) ) (t - ;; for Emacs 19 and XEmacs without mule + ;; for Emacs 19 + (require 'emu-e19) (require 'emu-latin1) )) @@ -264,6 +274,22 @@ Value is nil if OBJECT is not a buffer or if it has been killed. (list 'select-window 'save-selected-window-window)))) +;;; @ 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 ;;; @@ -307,6 +333,54 @@ This function does not move point. [XEmacs emulating function]" ) +;;; @ for Emacs 19,18 +;;; + +(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 XEmacs 21. +(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 XEmacs 21. +(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)))) + + ;;; @ for text/richtext and text/enriched ;;;