/
emu.el
191 lines (167 loc) · 5.38 KB
/
emu.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
;;;
;;; emu.el --- Emulation module for each Emacs variants
;;;
;;; Copyright (C) 1995 Free Software Foundation, Inc.
;;; Copyright (C) 1995,1996 MORIOKA Tomohiko
;;;
;;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
;;; modified by KOBAYASHI Shuhei <shuhei-k@jaist.ac.jp>
;;; Version:
;;; $Id$
;;; Keywords: emulation, compatibility, NEmacs, Mule, XEmacs
;;;
;;; This file is part of tl (Tiny Library).
;;;
;;; This program is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU General Public License as
;;; published by the Free Software Foundation; either version 2, or
;;; (at your option) any later version.
;;;
;;; This program is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;;; General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with This program. If not, write to the Free Software
;;; Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
;;;
;;; Code:
(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)
))))
(defvar running-emacs-18 (<= emacs-major-version 18))
(defvar running-xemacs (string-match "XEmacs" emacs-version))
(defvar running-xemacs-19 (and running-xemacs
(= emacs-major-version 19)))
(defvar running-xemacs-20 (and running-xemacs
(= emacs-major-version 20)))
(defvar running-xemacs-20-or-later (and running-xemacs
(>= emacs-major-version 20)))
(defvar running-xemacs-19_14-or-later
(or (and running-xemacs-19 (>= emacs-minor-version 14))
running-xemacs-20-or-later))
(defvar running-emacs-19 (and (not running-xemacs)
(= emacs-major-version 19)))
(defvar running-emacs-19_29-or-later
(or (and running-emacs-19 (>= emacs-minor-version 29))
(and (not running-xemacs)(>= emacs-major-version 20))))
(cond ((boundp 'MULE)
(require 'emu-mule)
)
((and running-xemacs-20 (featurep 'mule))
(require 'emu-x20)
)
((boundp 'NEMACS)
(require 'emu-nemacs)
)
(t
(require 'emu-e19)
))
;;; @ MIME charset
;;;
(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]"
(if charsets
(or (catch 'tag
(let ((rest charsets-mime-charset-alist)
cell csl)
(while (setq cell (car rest))
(if (catch 'not-subset
(let ((set1 charsets)
(set2 (car cell))
obj)
(while set1
(setq obj (car set1))
(or (memq obj set2)
(throw 'not-subset nil)
)
(setq set1 (cdr set1))
)
t))
(throw 'tag (cdr cell))
)
(setq rest (cdr rest))
)))
default-mime-charset)))
;;; @ Emacs 19.29 emulation
;;;
(or (fboundp 'buffer-substring-no-properties)
(defun buffer-substring-no-properties (beg end)
"Return the text from BEG to END, without text properties, as a string."
(let ((string (buffer-substring beg end)))
(tl:set-text-properties 0 (length string) nil string)
string))
)
(cond ((or running-emacs-19_29-or-later running-xemacs)
;; for Emacs 19.29 or later and XEmacs
(defalias 'tl:read-string 'read-string)
)
(t
;; for Emacs 19.28 or earlier
(defun tl:read-string (prompt &optional initial-input history)
(read-string prompt initial-input)
)
))
(or (fboundp 'add-to-list)
;; This function was imported Emacs 19.30.
(defun add-to-list (list-var element)
"Add to the value of LIST-VAR the element ELEMENT if it isn't there yet.
If you want to use `add-to-list' on a variable that is not defined
until a certain package is loaded, you should put the call to `add-to-list'
into a hook function that will be run only after loading the package.
\[emu.el; Emacs 19.30 emulating function]"
(or (member element (symbol-value list-var))
(set list-var (cons element (symbol-value list-var)))))
)
;;; @ XEmacs emulation
;;;
(or (fboundp 'functionp)
(defun functionp (obj)
"Returns t if OBJ is a function, nil otherwise.
\[emu.el; XEmacs emulating function]"
(or (subrp obj)
(byte-code-function-p obj)
(and (symbolp obj)(fboundp obj))
(and (consp obj)(eq (car obj) 'lambda))
))
)
;;; @ for XEmacs 20
;;;
(or (fboundp 'char-int)
(fset 'char-int (symbol-function 'identity))
)
(or (fboundp 'int-char)
(fset 'int-char (symbol-function 'identity))
)
;;; @ for text/richtext and text/enriched
;;;
(cond ((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)
(setq format-alist
(cons
(cons 'text/richtext
'("Extended MIME text/richtext format."
"Content-[Tt]ype:[ \t]*text/richtext"
richtext-decode richtext-encode t enriched-mode))
format-alist)))
)
(t
;; don't have enriched.el
(autoload 'richtext-decode "tinyrich")
(autoload 'enriched-decode "tinyrich")
))
;;; @ end
;;;
(provide 'emu)
;;; emu.el ends here