1 ;;; mac-win.el --- parse switches controlling interface with Mac window system -*-coding: iso-2022-7bit;-*-
3 ;; Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005
4 ;; Free Software Foundation, Inc.
6 ;; Author: Andrew Choi <akochoi@mac.com>
9 ;; This file is part of GNU Emacs.
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
12 ;; it under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation; either version 2, or (at your option)
16 ;; GNU Emacs is distributed in the hope that it will be useful,
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 ;; GNU General Public License for more details.
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
24 ;; Boston, MA 02111-1307, USA.
28 ;; Mac-win.el: this file is loaded from ../lisp/startup.el when it recognizes
29 ;; that Mac windows are to be used. Command line switches are parsed and those
30 ;; pertaining to Mac are processed and removed from the command line. The
31 ;; Mac display is opened and hooks are set for popping up the initial window.
33 ;; startup.el will then examine startup files, and eventually call the hooks
34 ;; which create the first window(s).
38 ;; These are the standard X switches from the Xt Initialize.c file of
41 ;; Command line Resource Manager string
44 ;; +synchronous *synchronous
45 ;; -background *background
48 ;; -bordercolor *borderColor
49 ;; -borderwidth .borderWidth
55 ;; -foreground *foreground
56 ;; -geometry .geometry
61 ;; -reverse *reverseVideo
63 ;; -selectionTimeout .selectionTimeout
64 ;; -synchronous *synchronous
67 ;; An alist of X options and the function which handles them. See
70 (if (not (eq window-system 'mac))
71 (error "%s: Loading mac-win.el but not compiled for Mac" (invocation-name)))
82 (defvar x-invocation-args)
84 (defvar x-command-line-resources nil)
86 ;; Handler for switches of the form "-switch value" or "-switch".
87 (defun x-handle-switch (switch)
88 (let ((aelt (assoc switch command-line-x-option-alist)))
90 (let ((param (nth 3 aelt))
93 (setq default-frame-alist
94 (cons (cons param value)
96 (setq default-frame-alist
98 (car x-invocation-args))
100 x-invocation-args (cdr x-invocation-args)))))))
102 ;; Handler for switches of the form "-switch n"
103 (defun x-handle-numeric-switch (switch)
104 (let ((aelt (assoc switch command-line-x-option-alist)))
106 (let ((param (nth 3 aelt)))
107 (setq default-frame-alist
109 (string-to-int (car x-invocation-args)))
112 (cdr x-invocation-args))))))
114 ;; Handle options that apply to initial frame only
115 (defun x-handle-initial-switch (switch)
116 (let ((aelt (assoc switch command-line-x-option-alist)))
118 (let ((param (nth 3 aelt))
119 (value (nth 4 aelt)))
121 (setq initial-frame-alist
122 (cons (cons param value)
123 initial-frame-alist))
124 (setq initial-frame-alist
126 (car x-invocation-args))
128 x-invocation-args (cdr x-invocation-args)))))))
130 ;; Make -iconic apply only to the initial frame!
131 (defun x-handle-iconic (switch)
132 (setq initial-frame-alist
133 (cons '(visibility . icon) initial-frame-alist)))
135 ;; Handle the -xrm option.
136 (defun x-handle-xrm-switch (switch)
137 (unless (consp x-invocation-args)
138 (error "%s: missing argument to `%s' option" (invocation-name) switch))
139 (setq x-command-line-resources
140 (if (null x-command-line-resources)
141 (car x-invocation-args)
142 (concat x-command-line-resources "\n" (car x-invocation-args))))
143 (setq x-invocation-args (cdr x-invocation-args)))
145 ;; Handle the geometry option
146 (defun x-handle-geometry (switch)
147 (let* ((geo (x-parse-geometry (car x-invocation-args)))
148 (left (assq 'left geo))
149 (top (assq 'top geo))
150 (height (assq 'height geo))
151 (width (assq 'width geo)))
152 (if (or height width)
153 (setq default-frame-alist
154 (append default-frame-alist
156 (if height (list height))
157 (if width (list width)))
159 (append initial-frame-alist
161 (if height (list height))
162 (if width (list width)))))
164 (setq initial-frame-alist
165 (append initial-frame-alist
166 '((user-position . t))
167 (if left (list left))
168 (if top (list top)))))
169 (setq x-invocation-args (cdr x-invocation-args))))
171 ;; Handle the -name option. Set the variable x-resource-name
172 ;; to the option's operand; set the name of
173 ;; the initial frame, too.
174 (defun x-handle-name-switch (switch)
175 (or (consp x-invocation-args)
176 (error "%s: missing argument to `%s' option" (invocation-name) switch))
177 (setq x-resource-name (car x-invocation-args)
178 x-invocation-args (cdr x-invocation-args))
179 (setq initial-frame-alist (cons (cons 'name x-resource-name)
180 initial-frame-alist)))
182 (defvar x-display-name nil
183 "The display name specifying server and frame.")
185 (defun x-handle-display (switch)
186 (setq x-display-name (car x-invocation-args)
187 x-invocation-args (cdr x-invocation-args)))
189 (defun x-handle-args (args)
190 "Process the X-related command line options in ARGS.
191 This is done before the user's startup file is loaded. They are copied to
192 `x-invocation-args', from which the X-related things are extracted, first
193 the switch (e.g., \"-fg\") in the following code, and possible values
194 \(e.g., \"black\") in the option handler code (e.g., x-handle-switch).
195 This function returns ARGS minus the arguments that have been processed."
196 ;; We use ARGS to accumulate the args that we don't handle here, to return.
197 (setq x-invocation-args args
199 (while (and x-invocation-args
200 (not (equal (car x-invocation-args) "--")))
201 (let* ((this-switch (car x-invocation-args))
202 (orig-this-switch this-switch)
203 completion argval aelt handler)
204 (setq x-invocation-args (cdr x-invocation-args))
205 ;; Check for long options with attached arguments
206 ;; and separate out the attached option argument into argval.
207 (if (string-match "^--[^=]*=" this-switch)
208 (setq argval (substring this-switch (match-end 0))
209 this-switch (substring this-switch 0 (1- (match-end 0)))))
210 ;; Complete names of long options.
211 (if (string-match "^--" this-switch)
213 (setq completion (try-completion this-switch command-line-x-option-alist))
214 (if (eq completion t)
215 ;; Exact match for long option.
217 (if (stringp completion)
218 (let ((elt (assoc completion command-line-x-option-alist)))
219 ;; Check for abbreviated long option.
221 (error "Option `%s' is ambiguous" this-switch))
222 (setq this-switch completion))))))
223 (setq aelt (assoc this-switch command-line-x-option-alist))
224 (if aelt (setq handler (nth 2 aelt)))
227 (let ((x-invocation-args
228 (cons argval x-invocation-args)))
229 (funcall handler this-switch))
230 (funcall handler this-switch))
231 (setq args (cons orig-this-switch args)))))
232 (nconc (nreverse args) x-invocation-args))
236 ;; Standard Mac cursor shapes
239 (defconst mac-pointer-arrow 0)
240 (defconst mac-pointer-copy-arrow 1)
241 (defconst mac-pointer-alias-arrow 2)
242 (defconst mac-pointer-contextual-menu-arrow 3)
243 (defconst mac-pointer-I-beam 4)
244 (defconst mac-pointer-cross 5)
245 (defconst mac-pointer-plus 6)
246 (defconst mac-pointer-watch 7)
247 (defconst mac-pointer-closed-hand 8)
248 (defconst mac-pointer-open-hand 9)
249 (defconst mac-pointer-pointing-hand 10)
250 (defconst mac-pointer-counting-up-hand 11)
251 (defconst mac-pointer-counting-down-hand 12)
252 (defconst mac-pointer-counting-up-and-down-hand 13)
253 (defconst mac-pointer-spinning 14)
254 (defconst mac-pointer-resize-left 15)
255 (defconst mac-pointer-resize-right 16)
256 (defconst mac-pointer-resize-left-right 17)
257 ;; Mac OS X 10.2 and later
258 (defconst mac-pointer-not-allowed 18)
259 ;; Mac OS X 10.3 and later
260 (defconst mac-pointer-resize-up 19)
261 (defconst mac-pointer-resize-down 20)
262 (defconst mac-pointer-resize-up-down 21)
263 (defconst mac-pointer-poof 22)
266 ;; Standard X cursor shapes that have Mac counterparts
269 (defconst x-pointer-left-ptr mac-pointer-arrow)
270 (defconst x-pointer-xterm mac-pointer-I-beam)
271 (defconst x-pointer-crosshair mac-pointer-cross)
272 (defconst x-pointer-plus mac-pointer-plus)
273 (defconst x-pointer-watch mac-pointer-watch)
274 (defconst x-pointer-hand2 mac-pointer-pointing-hand)
275 (defconst x-pointer-left-side mac-pointer-resize-left)
276 (defconst x-pointer-right-side mac-pointer-resize-right)
277 (defconst x-pointer-sb-h-double-arrow mac-pointer-resize-left-right)
278 (defconst x-pointer-top-side mac-pointer-resize-up)
279 (defconst x-pointer-bottom-side mac-pointer-resize-down)
280 (defconst x-pointer-sb-v-double-arrow mac-pointer-resize-up-down)
287 (defvar x-colors '("LightGreen"
886 "LightGoldenrodYellow"
887 "light goldenrod yellow"
904 "medium spring green"
1039 "The list of X colors from the `rgb.txt' file.
1040 XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp")
1042 (defun xw-defined-colors (&optional frame)
1043 "Internal function called by `defined-colors', which see."
1044 (or frame (setq frame (selected-frame)))
1045 (let ((all-colors x-colors)
1047 (defined-colors nil))
1049 (setq this-color (car all-colors)
1050 all-colors (cdr all-colors))
1051 (and (color-supported-p this-color frame t)
1052 (setq defined-colors (cons this-color defined-colors))))
1057 (substitute-key-definition 'suspend-emacs 'iconify-or-deiconify-frame
1060 ;; Map certain keypad keys into ASCII characters
1061 ;; that people usually expect.
1062 (define-key function-key-map [backspace] [?\d])
1063 (define-key function-key-map [delete] [?\d])
1064 (define-key function-key-map [tab] [?\t])
1065 (define-key function-key-map [linefeed] [?\n])
1066 (define-key function-key-map [clear] [?\C-l])
1067 (define-key function-key-map [return] [?\C-m])
1068 (define-key function-key-map [escape] [?\e])
1069 (define-key function-key-map [M-backspace] [?\M-\d])
1070 (define-key function-key-map [M-delete] [?\M-\d])
1071 (define-key function-key-map [M-tab] [?\M-\t])
1072 (define-key function-key-map [M-linefeed] [?\M-\n])
1073 (define-key function-key-map [M-clear] [?\M-\C-l])
1074 (define-key function-key-map [M-return] [?\M-\C-m])
1075 (define-key function-key-map [M-escape] [?\M-\e])
1077 ;; These tell read-char how to convert
1078 ;; these special chars to ASCII.
1079 (put 'backspace 'ascii-character ?\d)
1080 (put 'delete 'ascii-character ?\d)
1081 (put 'tab 'ascii-character ?\t)
1082 (put 'linefeed 'ascii-character ?\n)
1083 (put 'clear 'ascii-character ?\C-l)
1084 (put 'return 'ascii-character ?\C-m)
1085 (put 'escape 'ascii-character ?\e)
1088 ;;;; Script codes and coding systems
1089 (defconst mac-script-code-coding-systems
1090 '((0 . mac-roman) ; smRoman
1091 (1 . japanese-shift-jis) ; smJapanese
1092 (2 . chinese-big5) ; smTradChinese
1093 (3 . korean-iso-8bit) ; smKorean
1094 (7 . mac-cyrillic) ; smCyrillic
1095 (25 . chinese-iso-8bit) ; smSimpChinese
1096 (29 . mac-centraleurroman) ; smCentralEuroRoman
1098 "Alist of Mac script codes vs Emacs coding systems.")
1100 (defconst mac-system-coding-system
1101 (let ((base (or (cdr (assq mac-system-script-code
1102 mac-script-code-coding-systems))
1104 (if (eq system-type 'darwin)
1106 (coding-system-change-eol-conversion base 'mac)))
1107 "Coding system derived from the system script code.")
1109 (defun mac-add-charset-info (xlfd-charset mac-text-encoding)
1110 "Function to add character sets to display with Mac fonts.
1111 Creates entries in `mac-charset-info-alist'.
1112 XLFD-CHARSET is a string which will appear in the XLFD font name
1113 to identify the character set. MAC-TEXT-ENCODING is the
1114 correspoinding TextEncodingBase value."
1115 (add-to-list 'mac-charset-info-alist
1116 (list xlfd-charset mac-text-encoding
1117 (cdr (assq mac-text-encoding
1118 mac-script-code-coding-systems)))))
1120 (setq mac-charset-info-alist nil)
1121 (mac-add-charset-info "mac-roman" 0)
1122 (mac-add-charset-info "jisx0208.1983-sjis" 1)
1123 (mac-add-charset-info "jisx0201.1976-0" 1)
1124 (mac-add-charset-info "big5-0" 2)
1125 (mac-add-charset-info "ksc5601.1989-0" 3)
1126 (mac-add-charset-info "mac-cyrillic" 7)
1127 (mac-add-charset-info "gb2312.1980-0" 25)
1128 (mac-add-charset-info "mac-centraleurroman" 29)
1129 (mac-add-charset-info "mac-symbol" 33)
1130 (mac-add-charset-info "adobe-fontspecific" 33) ; for X-Symbol
1131 (mac-add-charset-info "mac-dingbats" 34)
1134 ;;;; Keyboard layout/language change events
1135 (defun mac-handle-language-change (event)
1137 (let ((coding-system
1138 (cdr (assq (car (cadr event)) mac-script-code-coding-systems))))
1139 (set-keyboard-coding-system (or coding-system 'mac-roman))
1140 ;; MacJapanese maps reverse solidus to ?\x80.
1141 (if (eq coding-system 'japanese-shift-jis)
1142 (define-key key-translation-map [?\x80] "\\"))))
1144 (define-key special-event-map [language-change] 'mac-handle-language-change)
1146 ;;;; Selections and cut buffers
1148 ;; Setup to use the Mac clipboard. The functions mac-cut-function and
1149 ;; mac-paste-function are defined in mac.c.
1150 (set-selection-coding-system 'compound-text-mac)
1152 (setq interprogram-cut-function
1155 (encode-coding-string str selection-coding-system t) push)))
1157 (setq interprogram-paste-function
1159 (let ((clipboard (mac-paste-function)))
1161 (decode-coding-string clipboard selection-coding-system t)))))
1164 ;;; Do the actual Windows setup here; the above code just defines
1165 ;;; functions and variables that we use now.
1167 (setq command-line-args (x-handle-args command-line-args))
1169 ;;; Make sure we have a valid resource name.
1170 (or (stringp x-resource-name)
1172 (setq x-resource-name (invocation-name))
1174 ;; Change any . or * characters in x-resource-name to hyphens,
1175 ;; so as not to choke when we use it in X resource queries.
1176 (while (setq i (string-match "[.*]" x-resource-name))
1177 (aset x-resource-name i ?-))))
1179 (if (x-display-list)
1180 ;; On Mac OS 8/9, Most coding systems used in code conversion for
1181 ;; font names are not ready at the time when the terminal frame is
1182 ;; created. So we reconstruct font name table for the initial
1184 (mac-clear-font-name-table)
1185 (x-open-connection "Mac"
1186 x-command-line-resources
1187 ;; Exit Emacs with fatal error if this fails.
1190 (setq frame-creation-function 'x-create-frame-with-faces)
1192 (cp-make-coding-system
1194 [?\
\e,AD
\e(B ?\
\e$,1
\e(B ?\
\e$,1 !
\e(B ?\
\e,AI
\e(B ?\
\e$,1 $
\e(B ?\
\e,AV
\e(B ?\
\e,A\
\e(B ?\
\e,Aa
\e(B ?\
\e$,1 %
\e(B ?\
\e$,1 ,
\e(B ?\
\e,Ad
\e(B ?\
\e$,1 -
\e(B ?\
\e$,1 &
\e(B ?\
\e$,1 '
\e(B ?\
\e,Ai
\e(B ?\
\e$,1!9
\e(B
1195 ?\
\e$,1!:
\e(B ?\
\e$,1 .
\e(B ?\
\e,Am
\e(B ?\
\e$,1 /
\e(B ?\
\e$,1 2
\e(B ?\
\e$,1 3
\e(B ?\
\e$,1 6
\e(B ?\
\e,As
\e(B ?\
\e$,1 7
\e(B ?\
\e,At
\e(B ?\
\e,Av
\e(B ?\
\e,Au
\e(B ?\
\e,Az
\e(B ?\
\e$,1 :
\e(B ?\
\e$,1 ;
\e(B ?\
\e,A|
\e(B
1196 ?\
\e$,1s
\e(B ?\
\e,A0
\e(B ?\
\e$,1 8
\e(B ?\
\e,A#
\e(B ?\
\e,A'
\e(B ?\
\e$,1s"
\e(B ?\
\e,A6
\e(B ?\
\e,A_
\e(B ?\
\e,A.
\e(B ?\
\e,A)
\e(B ?\
\e$,1ub
\e(B ?\
\e$,1 9
\e(B ?\
\e,A(
\e(B ?\
\e$,1y
\e(B ?\
\e$,1 C
\e(B ?\
\e$,1 N
\e(B
1197 ?\
\e$,1 O
\e(B ?\
\e$,1 J
\e(B ?\
\e$,1y$
\e(B ?\
\e$,1y%
\e(B ?\
\e$,1 K
\e(B ?\
\e$,1 V
\e(B ?\
\e$,1x"
\e(B ?\
\e$,1x1
\e(B ?\
\e$,1 b
\e(B ?\
\e$,1 [
\e(B ?\
\e$,1 \
\e(B ?\
\e$,1 ]
\e(B ?\
\e$,1 ^
\e(B ?\
\e$,1 Y
\e(B ?\
\e$,1 Z
\e(B ?\
\e$,1 e
\e(B
1198 ?\
\e$,1 f
\e(B ?\
\e$,1 c
\e(B ?\
\e,A,
\e(B ?\
\e$,1x:
\e(B ?\
\e$,1 d
\e(B ?\
\e$,1 g
\e(B ?\
\e$,1x&
\e(B ?\
\e,A+
\e(B ?\
\e,A;
\e(B ?\
\e$,1s&
\e(B ?\
\e,A
\e(B ?\
\e$,1 h
\e(B ?\
\e$,1 p
\e(B ?\
\e,AU
\e(B ?\
\e$,1 q
\e(B ?\
\e$,1 l
\e(B
1199 ?\
\e$,1rs
\e(B ?\
\e$,1rt
\e(B ?\
\e$,1r|
\e(B ?\
\e$,1r}
\e(B ?\
\e$,1rx
\e(B ?\
\e$,1ry
\e(B ?\
\e,Aw
\e(B ?\
\e$,2"*
\e(B ?\
\e$,1 m
\e(B ?\
\e$,1 t
\e(B ?\
\e$,1 u
\e(B ?\
\e$,1 x
\e(B ?\
\e$,1s9
\e(B ?\
\e$,1s:
\e(B ?\
\e$,1 y
\e(B ?\
\e$,1 v
\e(B
1200 ?\
\e$,1 w
\e(B ?\
\e$,1!
\e(B ?\
\e$,1rz
\e(B ?\
\e$,1r~
\e(B ?\
\e$,1!!
\e(B ?\
\e$,1 z
\e(B ?\
\e$,1 {
\e(B ?\
\e,AA
\e(B ?\
\e$,1!$
\e(B ?\
\e$,1!%
\e(B ?\
\e,AM
\e(B ?\
\e$,1!=
\e(B ?\
\e$,1!>
\e(B ?\
\e$,1!*
\e(B ?\
\e,AS
\e(B ?\
\e,AT
\e(B
1201 ?\
\e$,1!+
\e(B ?\
\e$,1!.
\e(B ?\
\e,AZ
\e(B ?\
\e$,1!/
\e(B ?\
\e$,1!0
\e(B ?\
\e$,1!1
\e(B ?\
\e$,1!2
\e(B ?\
\e$,1!3
\e(B ?\
\e,A]
\e(B ?\
\e,A}
\e(B ?\
\e$,1 W
\e(B ?\
\e$,1!;
\e(B ?\
\e$,1 a
\e(B ?\
\e$,1!<
\e(B ?\
\e$,1 B
\e(B ?\
\e$,1$g
\e(B]
1202 "Mac Central European Roman Encoding (MIME:x-mac-centraleurroman).")
1203 (coding-system-put 'mac-centraleurroman 'mime-charset 'x-mac-centraleurroman)
1205 (cp-make-coding-system
1207 [?\
\e$,1(0
\e(B ?\
\e$,1(1
\e(B ?\
\e$,1(2
\e(B ?\
\e$,1(3
\e(B ?\
\e$,1(4
\e(B ?\
\e$,1(5
\e(B ?\
\e$,1(6
\e(B ?\
\e$,1(7
\e(B ?\
\e$,1(8
\e(B ?\
\e$,1(9
\e(B ?\
\e$,1(:
\e(B ?\
\e$,1(;
\e(B ?\
\e$,1(<
\e(B ?\
\e$,1(=
\e(B ?\
\e$,1(>
\e(B ?\
\e$,1(?
\e(B
1208 ?\
\e$,1(@
\e(B ?\
\e$,1(A
\e(B ?\
\e$,1(B
\e(B ?\
\e$,1(C
\e(B ?\
\e$,1(D
\e(B ?\
\e$,1(E
\e(B ?\
\e$,1(F
\e(B ?\
\e$,1(G
\e(B ?\
\e$,1(H
\e(B ?\
\e$,1(I
\e(B ?\
\e$,1(J
\e(B ?\
\e$,1(K
\e(B ?\
\e$,1(L
\e(B ?\
\e$,1(M
\e(B ?\
\e$,1(N
\e(B ?\
\e$,1(O
\e(B
1209 ?\
\e$,1s
\e(B ?\
\e,A0
\e(B ?\
\e$,1)P
\e(B ?\
\e,A#
\e(B ?\
\e,A'
\e(B ?\
\e$,1s"
\e(B ?\
\e,A6
\e(B ?\
\e$,1(&
\e(B ?\
\e,A.
\e(B ?\
\e,A)
\e(B ?\
\e$,1ub
\e(B ?\
\e$,1("
\e(B ?\
\e$,1(r
\e(B ?\
\e$,1y
\e(B ?\
\e$,1(#
\e(B ?\
\e$,1(s
\e(B
1210 ?\
\e$,1x>
\e(B ?\
\e,A1
\e(B ?\
\e$,1y$
\e(B ?\
\e$,1y%
\e(B ?\
\e$,1(v
\e(B ?\
\e,A5
\e(B ?\
\e$,1)Q
\e(B ?\
\e$,1((
\e(B ?\
\e$,1($
\e(B ?\
\e$,1(t
\e(B ?\
\e$,1('
\e(B ?\
\e$,1(w
\e(B ?\
\e$,1()
\e(B ?\
\e$,1(y
\e(B ?\
\e$,1(*
\e(B ?\
\e$,1(z
\e(B
1211 ?\
\e$,1(x
\e(B ?\
\e$,1(%
\e(B ?\
\e,A,
\e(B ?\
\e$,1x:
\e(B ?\
\e$,1!R
\e(B ?\
\e$,1xh
\e(B ?\
\e$,1x&
\e(B ?\
\e,A+
\e(B ?\
\e,A;
\e(B ?\
\e$,1s&
\e(B ?\
\e,A
\e(B ?\
\e$,1(+
\e(B ?\
\e$,1({
\e(B ?\
\e$,1(,
\e(B ?\
\e$,1(|
\e(B ?\
\e$,1(u
\e(B
1212 ?\
\e$,1rs
\e(B ?\
\e$,1rt
\e(B ?\
\e$,1r|
\e(B ?\
\e$,1r}
\e(B ?\
\e$,1rx
\e(B ?\
\e$,1ry
\e(B ?\
\e,Aw
\e(B ?\
\e$,1r~
\e(B ?\
\e$,1(.
\e(B ?\
\e$,1(~
\e(B ?\
\e$,1(/
\e(B ?\
\e$,1(
\7f\e(B ?\
\e$,1uV
\e(B ?\
\e$,1(!
\e(B ?\
\e$,1(q
\e(B ?\
\e$,1(o
\e(B
1213 ?\
\e$,1(P
\e(B ?\
\e$,1(Q
\e(B ?\
\e$,1(R
\e(B ?\
\e$,1(S
\e(B ?\
\e$,1(T
\e(B ?\
\e$,1(U
\e(B ?\
\e$,1(V
\e(B ?\
\e$,1(W
\e(B ?\
\e$,1(X
\e(B ?\
\e$,1(Y
\e(B ?\
\e$,1(Z
\e(B ?\
\e$,1([
\e(B ?\
\e$,1(\
\e(B ?\
\e$,1(]
\e(B ?\
\e$,1(^
\e(B ?\
\e$,1(_
\e(B
1214 ?\
\e$,1(`
\e(B ?\
\e$,1(a
\e(B ?\
\e$,1(b
\e(B ?\
\e$,1(c
\e(B ?\
\e$,1(d
\e(B ?\
\e$,1(e
\e(B ?\
\e$,1(f
\e(B ?\
\e$,1(g
\e(B ?\
\e$,1(h
\e(B ?\
\e$,1(i
\e(B ?\
\e$,1(j
\e(B ?\
\e$,1(k
\e(B ?\
\e$,1(l
\e(B ?\
\e$,1(m
\e(B ?\
\e$,1(n
\e(B ?\
\e$,1tL
\e(B]
1215 "Mac Cyrillic Encoding (MIME:x-mac-cyrillic).")
1216 (coding-system-put 'mac-cyrillic 'mime-charset 'x-mac-cyrillic)
1219 ((encoding-vector (make-vector 256 nil))
1223 (make-vector 32 nil)
1224 ;; mac-symbol (32..126) -> emacs-mule mapping
1225 [?\ ?\! ?\
\e$,1x
\e(B ?\# ?\
\e$,1x#
\e(B ?\% ?\& ?\
\e$,1x-
\e(B ?\( ?\) ?\
\e$,1x7
\e(B ?\+ ?\, ?\
\e$,1x2
\e(B ?\. ?\/
1226 ?\0 ?\1 ?\2 ?\3 ?\4 ?\5 ?\6 ?\7 ?\8 ?\9 ?\: ?\; ?\< ?\= ?\> ?\?
1227 ?\
\e$,1xe
\e(B ?\
\e$,1&q
\e(B ?\
\e$,1&r
\e(B ?\
\e$,1''
\e(B ?\
\e$,1&t
\e(B ?\
\e$,1&u
\e(B ?\
\e$,1'&
\e(B ?\
\e$,1&s
\e(B ?\
\e$,1&w
\e(B ?\
\e$,1&y
\e(B ?\
\e$,1'Q
\e(B ?\
\e$,1&z
\e(B ?\
\e$,1&{
\e(B ?\
\e$,1&|
\e(B ?\
\e$,1&}
\e(B ?\
\e$,1&
\7f\e(B
1228 ?\
\e$,1'
\e(B ?\
\e$,1&x
\e(B ?\
\e$,1'!
\e(B ?\
\e$,1'#
\e(B ?\
\e$,1'$
\e(B ?\
\e$,1'%
\e(B ?\
\e$,1'B
\e(B ?\
\e$,1')
\e(B ?\
\e$,1&~
\e(B ?\
\e$,1'(
\e(B ?\
\e$,1&v
\e(B ?\[ ?\
\e$,1xT
\e(B ?\] ?\
\e$,1ye
\e(B ?\_
1229 ?\
\e$,3bE
\e(B ?\
\e$,1'1
\e(B ?\
\e$,1'2
\e(B ?\
\e$,1'G
\e(B ?\
\e$,1'4
\e(B ?\
\e$,1'5
\e(B ?\
\e$,1'F
\e(B ?\
\e$,1'3
\e(B ?\
\e$,1'7
\e(B ?\
\e$,1'9
\e(B ?\
\e$,1'U
\e(B ?\
\e$,1':
\e(B ?\
\e$,1';
\e(B ?\
\e$,1'<
\e(B ?\
\e$,1'=
\e(B ?\
\e$,1'?
\e(B
1230 ?\
\e$,1'@
\e(B ?\
\e$,1'8
\e(B ?\
\e$,1'A
\e(B ?\
\e$,1'C
\e(B ?\
\e$,1'D
\e(B ?\
\e$,1'E
\e(B ?\
\e$,1'V
\e(B ?\
\e$,1'I
\e(B ?\
\e$,1'>
\e(B ?\
\e$,1'H
\e(B ?\
\e$,1'6
\e(B ?\{ ?\| ?\} ?\
\e$,1x\
\e(B]
1231 (make-vector (- 160 127) nil)
1232 ;; mac-symbol (160..254) -> emacs-mule mapping
1233 [?\
\e$,1tL
\e(B ?\
\e$,1'R
\e(B ?\
\e$,1s2
\e(B ?\
\e$,1y$
\e(B ?\
\e$,1sD
\e(B ?\
\e$,1x>
\e(B ?\
\e$,1!R
\e(B ?\
\e$,2#c
\e(B ?\
\e$,2#f
\e(B ?\
\e$,2#e
\e(B ?\
\e$,2#`
\e(B ?\
\e$,1vt
\e(B ?\
\e$,1vp
\e(B ?\
\e$,1vq
\e(B ?\
\e$,1vr
\e(B ?\
\e$,1vs
\e(B
1234 ?\
\e,A0
\e(B ?\
\e,A1
\e(B ?\
\e$,1s3
\e(B ?\
\e$,1y%
\e(B ?\
\e,AW
\e(B ?\
\e$,1x=
\e(B ?\
\e$,1x"
\e(B ?\
\e$,1s"
\e(B ?\
\e,Aw
\e(B ?\
\e$,1y
\e(B ?\
\e$,1y!
\e(B ?\
\e$,1xh
\e(B ?\
\e$,1s&
\e(B ?\
\e$,1|p
\e(B ?\
\e$,1|O
\e(B ?\
\e$,1w5
\e(B
1235 ?\
\e$,1uu
\e(B ?\
\e$,1uQ
\e(B ?\
\e$,1u\
\e(B ?\
\e$,1uX
\e(B ?\
\e$,1yW
\e(B ?\
\e$,1yU
\e(B ?\
\e$,1x%
\e(B ?\
\e$,1xI
\e(B ?\
\e$,1xJ
\e(B ?\
\e$,1yC
\e(B ?\
\e$,1yG
\e(B ?\
\e$,1yD
\e(B ?\
\e$,1yB
\e(B ?\
\e$,1yF
\e(B ?\
\e$,1x(
\e(B ?\
\e$,1x)
\e(B
1236 ?\
\e$,1x@
\e(B ?\
\e$,1x'
\e(B ?\
\e,A.
\e(B ?\
\e,A)
\e(B ?\
\e$,1ub
\e(B ?\
\e$,1x/
\e(B ?\
\e$,1x:
\e(B ?\
\e$,1z%
\e(B ?\
\e,A,
\e(B ?\
\e$,1xG
\e(B ?\
\e$,1xH
\e(B ?\
\e$,1wT
\e(B ?\
\e$,1wP
\e(B ?\
\e$,1wQ
\e(B ?\
\e$,1wR
\e(B ?\
\e$,1wS
\e(B
1237 ?\
\e$,2"*
\e(B ?\
\e$B!R
\e(B ?\
\e,A.
\e(B ?\
\e,A)
\e(B ?\
\e$,1ub
\e(B ?\
\e$,1x1
\e(B ?\
\e$,1|;
\e(B ?\
\e$,1|<
\e(B ?\
\e$,1|=
\e(B ?\
\e$,1|A
\e(B ?\
\e$,1|B
\e(B ?\
\e$,1|C
\e(B ?\
\e$,1|G
\e(B ?\
\e$,1|H
\e(B ?\
\e$,1|I
\e(B ?\
\e$,1|J
\e(B
1238 ?\
\e$,3b_
\e(B ?\
\e$B!S
\e(B ?\
\e$,1xK
\e(B ?\
\e$,1{
\e(B ?\
\e$,1|N
\e(B ?\
\e$,1{!
\e(B ?\
\e$,1|>
\e(B ?\
\e$,1|?
\e(B ?\
\e$,1|@
\e(B ?\
\e$,1|D
\e(B ?\
\e$,1|E
\e(B ?\
\e$,1|F
\e(B ?\
\e$,1|K
\e(B ?\
\e$,1|L
\e(B ?\
\e$,1|M
\e(B]
1240 len translation-table)
1241 (setq len (length vec))
1243 (aset encoding-vector i
1244 (if (null (aref vec i)) i
1245 ;; (decode-char 'ucs (aref vec i))
1251 (setq translation-table
1252 (make-translation-table-from-vector encoding-vector))
1253 ;; (define-translation-table 'mac-symbol-decoder translation-table)
1254 (define-translation-table 'mac-symbol-encoder
1255 (char-table-extra-slot translation-table 0)))
1258 ((encoding-vector (make-vector 256 nil))
1262 (make-vector 32 nil)
1263 ;; mac-dingbats (32..126) -> emacs-mule mapping
1264 [?\ ?\
\e$,2%A
\e(B ?\
\e$,2%B
\e(B ?\
\e$,2%C
\e(B ?\
\e$,2%D
\e(B ?\
\e$,2"n
\e(B ?\
\e$,2%F
\e(B ?\
\e$,2%G
\e(B ?\
\e$,2%H
\e(B ?\
\e$,2%I
\e(B ?\
\e$,2"{
\e(B ?\
\e$,2"~
\e(B ?\
\e$,2%L
\e(B ?\
\e$,2%M
\e(B ?\
\e$,2%N
\e(B ?\
\e$,2%O
\e(B
1265 ?\
\e$,2%P
\e(B ?\
\e$,2%Q
\e(B ?\
\e$,2%R
\e(B ?\
\e$,2%S
\e(B ?\
\e$,2%T
\e(B ?\
\e$,2%U
\e(B ?\
\e$,2%V
\e(B ?\
\e$,2%W
\e(B ?\
\e$,2%X
\e(B ?\
\e$,2%Y
\e(B ?\
\e$,2%Z
\e(B ?\
\e$,2%[
\e(B ?\
\e$,2%\
\e(B ?\
\e$,2%]
\e(B ?\
\e$,2%^
\e(B ?\
\e$,2%_
\e(B
1266 ?\
\e$,2%`
\e(B ?\
\e$,2%a
\e(B ?\
\e$,2%b
\e(B ?\
\e$,2%c
\e(B ?\
\e$,2%d
\e(B ?\
\e$,2%e
\e(B ?\
\e$,2%f
\e(B ?\
\e$,2%g
\e(B ?\
\e$,2"e
\e(B ?\
\e$,2%i
\e(B ?\
\e$,2%j
\e(B ?\
\e$,2%k
\e(B ?\
\e$,2%l
\e(B ?\
\e$,2%m
\e(B ?\
\e$,2%n
\e(B ?\
\e$,2%o
\e(B
1267 ?\
\e$,2%p
\e(B ?\
\e$,2%q
\e(B ?\
\e$,2%r
\e(B ?\
\e$,2%s
\e(B ?\
\e$,2%t
\e(B ?\
\e$,2%u
\e(B ?\
\e$,2%v
\e(B ?\
\e$,2%w
\e(B ?\
\e$,2%x
\e(B ?\
\e$,2%y
\e(B ?\
\e$,2%z
\e(B ?\
\e$,2%{
\e(B ?\
\e$,2%|
\e(B ?\
\e$,2%}
\e(B ?\
\e$,2%~
\e(B ?\
\e$,2%
\7f\e(B
1268 ?\
\e$,2&
\e(B ?\
\e$,2&!
\e(B ?\
\e$,2&"
\e(B ?\
\e$,2&#
\e(B ?\
\e$,2&$
\e(B ?\
\e$,2&%
\e(B ?\
\e$,2&&
\e(B ?\
\e$,2&'
\e(B ?\
\e$,2&(
\e(B ?\
\e$,2&)
\e(B ?\
\e$,2&*
\e(B ?\
\e$,2&+
\e(B ?\
\e$,2"/
\e(B ?\
\e$,2&-
\e(B ?\
\e$,2!`
\e(B ?\
\e$,2&/
\e(B
1269 ?\
\e$,2&0
\e(B ?\
\e$,2&1
\e(B ?\
\e$,2&2
\e(B ?\
\e$,2!r
\e(B ?\
\e$,2!|
\e(B ?\
\e$,2"&
\e(B ?\
\e$,2&6
\e(B ?\
\e$,2"7
\e(B ?\
\e$,2&8
\e(B ?\
\e$,2&9
\e(B ?\
\e$,2&:
\e(B ?\
\e$,2&;
\e(B ?\
\e$,2&<
\e(B ?\
\e$,2&=
\e(B ?\
\e$,2&>
\e(B]
1271 ;; mac-dingbats (128..141) -> emacs-mule mapping
1272 [?\
\e$,2&H
\e(B ?\
\e$,2&I
\e(B ?\
\e$,2&J
\e(B ?\
\e$,2&K
\e(B ?\
\e$,2&L
\e(B ?\
\e$,2&M
\e(B ?\
\e$,2&N
\e(B ?\
\e$,2&O
\e(B ?\
\e$,2&P
\e(B ?\
\e$,2&Q
\e(B ?\
\e$,2&R
\e(B ?\
\e$,2&S
\e(B ?\
\e$,2&T
\e(B ?\
\e$,2&U
\e(B]
1273 (make-vector (- 161 142) nil)
1274 ;; mac-dingbats (161..239) -> emacs-mule mapping
1275 [?\
\e$,2&A
\e(B ?\
\e$,2&B
\e(B ?\
\e$,2&C
\e(B ?\
\e$,2&D
\e(B ?\
\e$,2&E
\e(B ?\
\e$,2&F
\e(B ?\
\e$,2&G
\e(B ?\
\e$,2#c
\e(B ?\
\e$,2#f
\e(B ?\
\e$,2#e
\e(B ?\
\e$,2#`
\e(B ?\
\e$,1~@
\e(B ?\
\e$,1~A
\e(B ?\
\e$,1~B
\e(B ?\
\e$,1~C
\e(B
1276 ?\
\e$,1~D
\e(B ?\
\e$,1~E
\e(B ?\
\e$,1~F
\e(B ?\
\e$,1~G
\e(B ?\
\e$,1~H
\e(B ?\
\e$,1~I
\e(B ?\
\e$,2&V
\e(B ?\
\e$,2&W
\e(B ?\
\e$,2&X
\e(B ?\
\e$,2&Y
\e(B ?\
\e$,2&Z
\e(B ?\
\e$,2&[
\e(B ?\
\e$,2&\
\e(B ?\
\e$,2&]
\e(B ?\
\e$,2&^
\e(B ?\
\e$,2&_
\e(B
1277 ?\
\e$,2&`
\e(B ?\
\e$,2&a
\e(B ?\
\e$,2&b
\e(B ?\
\e$,2&c
\e(B ?\
\e$,2&d
\e(B ?\
\e$,2&e
\e(B ?\
\e$,2&f
\e(B ?\
\e$,2&g
\e(B ?\
\e$,2&h
\e(B ?\
\e$,2&i
\e(B ?\
\e$,2&j
\e(B ?\
\e$,2&k
\e(B ?\
\e$,2&l
\e(B ?\
\e$,2&m
\e(B ?\
\e$,2&n
\e(B ?\
\e$,2&o
\e(B
1278 ?\
\e$,2&p
\e(B ?\
\e$,2&q
\e(B ?\
\e$,2&r
\e(B ?\
\e$,2&s
\e(B ?\
\e$,2&t
\e(B ?\
\e$,1vr
\e(B ?\
\e$,1vt
\e(B ?\
\e$,1vu
\e(B ?\
\e$,2&x
\e(B ?\
\e$,2&y
\e(B ?\
\e$,2&z
\e(B ?\
\e$,2&{
\e(B ?\
\e$,2&|
\e(B ?\
\e$,2&}
\e(B ?\
\e$,2&~
\e(B ?\
\e$,2&
\7f\e(B
1279 ?\
\e$,2'
\e(B ?\
\e$,2'!
\e(B ?\
\e$,2'"
\e(B ?\
\e$,2'#
\e(B ?\
\e$,2'$
\e(B ?\
\e$,2'%
\e(B ?\
\e$,2'&
\e(B ?\
\e$,2''
\e(B ?\
\e$,2'(
\e(B ?\
\e$,2')
\e(B ?\
\e$,2'*
\e(B ?\
\e$,2'+
\e(B ?\
\e$,2',
\e(B ?\
\e$,2'-
\e(B ?\
\e$,2'.
\e(B ?\
\e$,2'/
\e(B]
1281 ;; mac-dingbats (241..254) -> emacs-mule mapping
1282 [?\
\e$,2'1
\e(B ?\
\e$,2'2
\e(B ?\
\e$,2'3
\e(B ?\
\e$,2'4
\e(B ?\
\e$,2'5
\e(B ?\
\e$,2'6
\e(B ?\
\e$,2'7
\e(B ?\
\e$,2'8
\e(B ?\
\e$,2'9
\e(B ?\
\e$,2':
\e(B ?\
\e$,2';
\e(B ?\
\e$,2'<
\e(B ?\
\e$,2'=
\e(B ?\
\e$,2'>
\e(B]
1284 len translation-table)
1285 (setq len (length vec))
1287 (aset encoding-vector i
1288 (if (null (aref vec i)) i
1289 ;; (decode-char 'ucs (aref vec i))
1295 (setq translation-table
1296 (make-translation-table-from-vector encoding-vector))
1297 ;; (define-translation-table 'mac-dingbats-decoder translation-table)
1298 (define-translation-table 'mac-dingbats-encoder
1299 (char-table-extra-slot translation-table 0)))
1301 (defvar mac-font-encoder-list
1302 '(("mac-roman" mac-roman-encoder
1303 ccl-encode-mac-roman-font "%s")
1304 ("mac-centraleurroman" encode-mac-centraleurroman
1305 ccl-encode-mac-centraleurroman-font "%s ce")
1306 ("mac-cyrillic" encode-mac-cyrillic
1307 ccl-encode-mac-cyrillic-font "%s cy")
1308 ("mac-symbol" mac-symbol-encoder
1309 ccl-encode-mac-symbol-font "symbol")
1310 ("mac-dingbats" mac-dingbats-encoder
1311 ccl-encode-mac-dingbats-font "zapf dingbats")))
1314 (mapcar (lambda (lst) (nth 1 lst)) mac-font-encoder-list))
1317 latin-iso8859-3 latin-iso8859-4
1318 cyrillic-iso8859-5 greek-iso8859-7 hebrew-iso8859-8
1319 latin-iso8859-9 latin-iso8859-14 latin-iso8859-15)))
1320 (dolist (encoder encoder-list)
1321 (let ((table (get encoder 'translation-table)))
1322 (dolist (charset charset-list)
1324 (let* ((c (make-char charset (+ i 32)))
1325 (mu (aref ucs-mule-to-mule-unicode c))
1326 (mac-encoded (and mu (aref table mu))))
1328 (aset table c mac-encoded))))))))
1330 (define-ccl-program ccl-encode-mac-roman-font
1332 (if (r0 != ,(charset-id 'ascii))
1334 (translate-character mac-roman-encoder r0 r1)
1337 (translate-character mac-roman-encoder r0 r1)))))
1338 "CCL program for Mac Roman font")
1340 (define-ccl-program ccl-encode-mac-centraleurroman-font
1342 (if (r0 != ,(charset-id 'ascii))
1344 (translate-character encode-mac-centraleurroman r0 r1)
1347 (translate-character encode-mac-centraleurroman r0 r1)))))
1348 "CCL program for Mac Central European Roman font")
1350 (define-ccl-program ccl-encode-mac-cyrillic-font
1352 (if (r0 != ,(charset-id 'ascii))
1354 (translate-character encode-mac-cyrillic r0 r1)
1357 (translate-character encode-mac-cyrillic r0 r1)))))
1358 "CCL program for Mac Cyrillic font")
1360 (define-ccl-program ccl-encode-mac-symbol-font
1362 (if (r0 != ,(charset-id 'ascii))
1364 (translate-character mac-symbol-encoder r0 r1)
1367 (translate-character mac-symbol-encoder r0 r1)))))
1368 "CCL program for Mac Symbol font")
1370 (define-ccl-program ccl-encode-mac-dingbats-font
1372 (if (r0 != ,(charset-id 'ascii))
1374 (translate-character mac-dingbats-encoder r0 r1)
1377 (translate-character mac-dingbats-encoder r0 r1)))))
1378 "CCL program for Mac Dingbats font")
1381 (setq font-ccl-encoder-alist
1383 (mapcar (lambda (lst) (cons (nth 0 lst) (nth 2 lst)))
1384 mac-font-encoder-list)
1385 font-ccl-encoder-alist))
1387 (defun fontset-add-mac-fonts (fontset &optional base-family)
1389 (setq base-family (downcase base-family))
1391 (downcase (x-resolve-font-name
1392 (fontset-font fontset (charset-id 'ascii))))))
1393 (setq base-family (aref (x-decompose-font-name ascii-font)
1394 xlfd-regexp-family-subnum))))
1395 ;; (if (not (string-match "^fontset-" fontset))
1397 ;; (concat "fontset-" (aref (x-decompose-font-name fontset)
1398 ;; xlfd-regexp-encoding-subnum))))
1402 (mapcar (lambda (lst)
1403 (cons (cons (format (nth 3 lst) base-family) (nth 0 lst))
1405 mac-font-encoder-list)))
1406 (let ((font (car font-encoder))
1407 (encoder (cdr font-encoder)))
1411 (generic-char-p key)
1412 (memq (char-charset key)
1413 '(ascii eight-bit-control eight-bit-graphic))
1414 (set-fontset-font fontset key font)))
1415 (get encoder 'translation-table)))))
1417 (defun create-fontset-from-mac-roman-font (font &optional resolved-font
1419 "Create a fontset from a Mac roman font FONT.
1421 Optional 1st arg RESOLVED-FONT is a resolved name of FONT. If
1422 omitted, `x-resolve-font-name' is called to get the resolved name. At
1423 this time, if FONT is not available, error is signaled.
1425 Optional 2nd arg FONTSET-NAME is a string to be used in
1426 `<CHARSET_ENCODING>' fields of a new fontset name. If it is omitted,
1427 an appropriate name is generated automatically.
1429 It returns a name of the created fontset."
1431 (create-fontset-from-ascii-font font resolved-font fontset-name)))
1432 (fontset-add-mac-fonts fontset)
1435 ;; Setup the default fontset.
1436 (setup-default-fontset)
1438 ;; Create a fontset that uses mac-roman font. With this fontset,
1439 ;; characters decoded from mac-roman encoding (ascii, latin-iso8859-1,
1440 ;; and mule-unicode-xxxx-yyyy) are displayed by a mac-roman font.
1441 (create-fontset-from-fontset-spec
1442 "-etl-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-mac,
1443 ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman")
1444 (fontset-add-mac-fonts "fontset-mac")
1446 ;; Create fontset specified in X resources "Fontset-N" (N is 0, 1, ...).
1447 (create-fontset-from-x-resource)
1449 ;; Try to create a fontset from a font specification which comes
1450 ;; from initial-frame-alist, default-frame-alist, or X resource.
1451 ;; A font specification in command line argument (i.e. -fn XXXX)
1452 ;; should be already in default-frame-alist as a `font'
1453 ;; parameter. However, any font specifications in site-start
1454 ;; library, user's init file (.emacs), and default.el are not
1455 ;; yet handled here.
1457 (let ((font (or (cdr (assq 'font initial-frame-alist))
1458 (cdr (assq 'font default-frame-alist))
1459 (x-get-resource "font" "Font")))
1460 xlfd-fields resolved-name)
1462 (not (query-fontset font))
1463 (setq resolved-name (x-resolve-font-name font))
1464 (setq xlfd-fields (x-decompose-font-name font)))
1465 (if (string= "fontset" (aref xlfd-fields xlfd-regexp-registry-subnum))
1466 (new-fontset font (x-complement-fontset-spec xlfd-fields nil))
1467 ;; Create a fontset from FONT. The fontset name is
1468 ;; generated from FONT.
1469 (if (and (string= "mac" (aref xlfd-fields xlfd-regexp-registry-subnum))
1470 (string= "roman" (aref xlfd-fields xlfd-regexp-encoding-subnum)))
1471 (create-fontset-from-mac-roman-font font resolved-name "startup")
1472 (create-fontset-from-ascii-font font resolved-name "startup")))))
1474 ;; Apply a geometry resource to the initial frame. Put it at the end
1475 ;; of the alist, so that anything specified on the command line takes
1477 (let* ((res-geometry (x-get-resource "geometry" "Geometry"))
1481 (setq parsed (x-parse-geometry res-geometry))
1482 ;; If the resource specifies a position,
1483 ;; call the position and size "user-specified".
1484 (if (or (assq 'top parsed) (assq 'left parsed))
1485 (setq parsed (cons '(user-position . t)
1486 (cons '(user-size . t) parsed))))
1487 ;; All geometry parms apply to the initial frame.
1488 (setq initial-frame-alist (append initial-frame-alist parsed))
1489 ;; The size parms apply to all frames.
1490 (if (assq 'height parsed)
1491 (setq default-frame-alist
1492 (cons (cons 'height (cdr (assq 'height parsed)))
1493 default-frame-alist)))
1494 (if (assq 'width parsed)
1495 (setq default-frame-alist
1496 (cons (cons 'width (cdr (assq 'width parsed)))
1497 default-frame-alist))))))
1499 ;; Check the reverseVideo resource.
1500 (let ((case-fold-search t))
1501 (let ((rv (x-get-resource "reverseVideo" "ReverseVideo")))
1503 (string-match "^\\(true\\|yes\\|on\\)$" rv))
1504 (setq default-frame-alist
1505 (cons '(reverse . t) default-frame-alist)))))
1507 (defun x-win-suspend-error ()
1508 (error "Suspending an Emacs running under Mac makes no sense"))
1509 (add-hook 'suspend-hook 'x-win-suspend-error)
1511 ;; Don't show the frame name; that's redundant.
1512 (setq-default mode-line-frame-identification " ")
1514 ;; Turn on support for mouse wheels.
1515 (mouse-wheel-mode 1)
1517 (defun mac-drag-n-drop (event)
1518 "Edit the files listed in the drag-n-drop EVENT.
1519 Switch to a buffer editing the last file dropped."
1521 ;; Make sure the drop target has positive co-ords
1522 ;; before setting the selected frame - otherwise it
1523 ;; won't work. <skx@tardis.ed.ac.uk>
1524 (let* ((window (posn-window (event-start event)))
1525 (coords (posn-x-y (event-start event)))
1528 (if (and (> x 0) (> y 0))
1529 (set-frame-selected-window nil window))
1530 (mapcar (lambda (file-name)
1531 (if (listp file-name)
1532 (let ((line (car file-name))
1533 (start (car (cdr file-name)))
1534 (end (car (cdr (cdr file-name)))))
1537 (if (and (> start 0) (> end 0))
1538 (progn (set-mark start)
1540 (dnd-handle-one-url window 'private
1541 (concat "file:" file-name))))
1542 (car (cdr (cdr event)))))
1545 (global-set-key [drag-n-drop] 'mac-drag-n-drop)
1547 ;; By checking whether the variable mac-ready-for-drag-n-drop has been
1548 ;; defined, the event loop in macterm.c can be informed that it can
1549 ;; now receive Finder drag and drop events. Files dropped onto the
1550 ;; Emacs application icon can only be processed when the initial frame
1551 ;; has been created: this is where the files should be opened.
1552 (add-hook 'after-init-hook
1554 (defvar mac-ready-for-drag-n-drop t)))
1559 ;; (defun mac-handle-scroll-bar-event (event) (interactive "e") (princ event))
1561 ;;(global-set-key [vertical-scroll-bar mouse-1] 'mac-handle-scroll-bar-event)
1564 [vertical-scroll-bar down-mouse-1]
1565 'mac-handle-scroll-bar-event)
1567 (global-unset-key [vertical-scroll-bar drag-mouse-1])
1568 (global-unset-key [vertical-scroll-bar mouse-1])
1570 (defun mac-handle-scroll-bar-event (event)
1571 "Handle scroll bar EVENT to emulate Mac Toolbox style scrolling."
1573 (let* ((position (event-start event))
1574 (window (nth 0 position))
1575 (bar-part (nth 4 position)))
1576 (select-window window)
1579 (goto-char (window-start window))
1580 (mac-scroll-down-line))
1581 ((eq bar-part 'above-handle)
1583 ((eq bar-part 'handle)
1584 (scroll-bar-drag event))
1585 ((eq bar-part 'below-handle)
1587 ((eq bar-part 'down)
1588 (goto-char (window-start window))
1589 (mac-scroll-up-line)))))
1591 (defun mac-scroll-ignore-events ()
1592 ;; Ignore confusing non-mouse events
1593 (while (not (memq (car-safe (read-event))
1594 '(mouse-1 double-mouse-1 triple-mouse-1))) nil))
1596 (defun mac-scroll-down ()
1598 (mac-scroll-ignore-events)
1601 (defun mac-scroll-down-line ()
1603 (mac-scroll-ignore-events)
1606 (defun mac-scroll-up ()
1608 (mac-scroll-ignore-events)
1611 (defun mac-scroll-up-line ()
1613 (mac-scroll-ignore-events)
1619 (unless (eq system-type 'darwin)
1620 ;; This variable specifies the Unix program to call (as a process) to
1621 ;; determine the amount of free space on a file system (defaults to
1622 ;; df). If it is not set to nil, ls-lisp will not work correctly
1623 ;; unless an external application df is implemented on the Mac.
1624 (setq directory-free-space-program nil)
1626 ;; Set this so that Emacs calls subprocesses with "sh" as shell to
1627 ;; expand filenames Note no subprocess for the shell is actually
1628 ;; started (see run_mac_command in sysdep.c).
1629 (setq shell-file-name "sh")
1631 ;; Some system variables are encoded with the system script code.
1632 (dolist (v '(system-name
1633 emacs-build-system ; Mac OS 9 version cannot dump
1634 user-login-name user-real-login-name user-full-name))
1635 (set v (decode-coding-string (symbol-value v) mac-system-coding-system))))
1637 ;; If Emacs is started from the Finder, change the default directory
1638 ;; to the user's home directory.
1639 (if (string= default-directory "/")
1642 ;; Darwin 6- pty breakage is now controlled from the C code so that
1643 ;; it applies to all builds on darwin. See s/darwin.h PTY_ITERATION.
1644 ;; (setq process-connection-type t)
1646 ;; Assume that fonts are always scalable on the Mac. This sometimes
1647 ;; results in characters with jagged edges. However, without it,
1648 ;; fonts with both truetype and bitmap representations but no italic
1649 ;; or bold bitmap versions will not display these variants correctly.
1650 (setq scalable-fonts-allowed t)
1652 ;; arch-tag: 71dfcd14-cde8-4d66-b05c-85ec94fb23a6
1653 ;;; mac-win.el ends here