Add 2007 to copyright years.
[bpt/emacs.git] / man / macos.texi
CommitLineData
ebc956ca 1@c This is part of the Emacs manual.
b65d8176 2@c Copyright (C) 2000, 2001, 2002, 2003, 2004,
4e6835db 3@c 2005, 2006, 2007 Free Software Foundation, Inc.
ebc956ca 4@c See file emacs.texi for copying conditions.
53c1041b 5@node Mac OS, Microsoft Windows, Antinews, Top
385f3fc8 6@appendix Emacs and Mac OS
ebc956ca
EZ
7@cindex Mac OS
8@cindex Macintosh
9
385f3fc8
YM
10 This section briefly describes the peculiarities of using Emacs
11under Mac OS with native window system support. For Mac OS X, Emacs
12can be built either without window system support, with X11, or with
13Carbon API. This section only applies to the Carbon build. For Mac
14OS Classic, Emacs can be built with or without Carbon API, and this
15section applies to either of them because they run on the native
16window system.
17
18 Emacs built on Mac OS X supports most of its major features except
19display support of PostScript images. The following features of Emacs
20are not supported on Mac OS Classic: unexec (@code{dump-emacs}),
21asynchronous subprocesses (@code{start-process}), and networking
22(@code{open-network-stream}). As a result, packages such as Gnus,
23GUD, and Comint do not work. Synchronous subprocesses
24(@code{call-process}) are supported on non-Carbon build, but
25specially-crafted external programs are needed. Since external
26programs to handle commands such as @code{print-buffer} and
27@code{diff} are not available on Mac OS Classic, they are not
28supported. Non-Carbon build on Mac OS Classic does not support some
29features such as file dialogs, drag-and-drop, and Unicode menus.
ebc956ca
EZ
30
31@menu
385f3fc8
YM
32* Input: Mac Input. Keyboard and mouse input on Mac.
33* Intl: Mac International. International character sets on Mac.
b08fa67e 34* Env: Mac Environment Variables. Setting environment variables for Emacs.
385f3fc8
YM
35* Directories: Mac Directories. Volumes and directories on Mac.
36* Font: Mac Font Specs. Specifying fonts on Mac.
b08fa67e 37* Functions: Mac Functions. Mac-specific Lisp functions.
ebc956ca
EZ
38@end menu
39
ebc956ca 40@node Mac Input
385f3fc8 41@section Keyboard and Mouse Input on Mac
4946337d
EZ
42@cindex Meta (Mac OS)
43@cindex keyboard coding (Mac OS)
ebc956ca 44
d0aeb9af
YM
45@vindex mac-control-modifier
46@vindex mac-command-modifier
47@vindex mac-option-modifier
f4d07c63
YM
48@vindex mac-function-modifier
49 On Mac, Emacs can use @key{control}, @key{command}, @key{option}, and
50laptop @key{function} keys as any of Emacs modifier keys except
51@key{SHIFT} (i.e., @key{ALT}, @key{CTRL}, @key{HYPER}, @key{META}, and
52@key{SUPER}). The assignment is controlled by the variables
53@code{mac-control-modifier}, @code{mac-command-modifier},
23666aa8
YM
54@code{mac-option-modifier}, and @code{mac-function-modifier}. The value
55for each of these variables can be one of the following symbols:
56@code{alt}, @code{control}, @code{hyper}, @code{meta}, @code{super}, and
57@code{nil} (no particular assignment). By default, the @key{control}
58key works as @key{CTRL}, and the @key{command} key as @key{META}.
d0aeb9af
YM
59
60 For the @key{option} key, if @code{mac-option-modifier} is set to
61@code{nil}, which is the default, the key works as the normal
62@key{option} key, i.e., dead-key processing will work. This is useful
63for entering non-@acronym{ASCII} Latin characters directly from the
64Mac keyboard, for example.
ebc956ca 65
385f3fc8
YM
66 Emacs recognizes the setting in the Keyboard control panel (Mac OS
67Classic) or the International system preference pane (Mac OS X) and
f4d07c63
YM
68supports international and alternative keyboard layouts (e.g., Dvorak).
69Selecting one of the layouts from the keyboard layout pull-down menu
70will affect how the keys typed on the keyboard are interpreted.
385f3fc8
YM
71
72@vindex mac-pass-command-to-system
73@vindex mac-pass-control-to-system
74 Mac OS intercepts and handles certain key combinations (e.g.,
ebc956ca 75@key{command}-@key{SPC} for switching input languages). These will not
385f3fc8
YM
76be passed to Emacs. One can disable this interception by setting
77@code{mac-pass-command-to-system} or @code{mac-pass-control-to-system}
78to @code{nil}.
79
80@vindex mac-emulate-three-button-mouse
81 Especially for one-button mice, the multiple button feature can be
82emulated by setting @code{mac-emulate-three-button-mouse} to @code{t}
83or @code{reverse}. If set to @code{t} (@code{reverse}, respectively),
84pressing the mouse button with the @key{option} key is recognized as
85the second (third) button, and that with the @key{command} key is
86recognized as the third (second) button.
87
88@vindex mac-wheel-button-is-mouse-2
89 For multi-button mice, the wheel button and the secondary button are
90recognized as the second and the third button, respectively. If
91@code{mac-wheel-button-is-mouse-2} is set to @code{nil}, their roles
92are exchanged.
ebc956ca
EZ
93
94@node Mac International
385f3fc8 95@section International Character Set Support on Mac
ebc956ca 96@cindex Mac Roman coding system
4946337d 97@cindex clipboard support (Mac OS)
ebc956ca 98
385f3fc8
YM
99 Mac uses non-standard encodings for the upper 128 single-byte
100characters. They also deviate from the ISO 2022 standard by using
101character codes in the range 128-159. The coding systems
102@code{mac-roman}, @code{mac-centraleurroman}, and @code{mac-cyrillic}
103are used to represent these Mac encodings.
ebc956ca 104
ebc956ca 105 You can use input methods provided either by LEIM (@pxref{Input
385f3fc8
YM
106Methods}) or Mac OS to enter international characters. To use the
107former, see the International Character Set Support section of the
108manual (@pxref{International}).
ebc956ca 109
385f3fc8
YM
110 Emacs on Mac OS automatically changes the value of
111@code{keyboard-coding-system} according to the current keyboard
112layout. So users don't need to set it manually, and even if set, it
113will be changed when the keyboard layout change is detected next time.
ebc956ca
EZ
114
115 The Mac clipboard and the Emacs kill ring (@pxref{Killing}) are
385f3fc8
YM
116synchronized by default: you can yank a piece of text and paste it
117into another Mac application, or cut or copy one in another Mac
118application and yank it into a Emacs buffer. This feature can be
119disabled by setting @code{x-select-enable-clipboard} to @code{nil}.
120One can still do copy and paste with another application from the Edit
121menu.
122
123 On Mac, the role of the coding system for selection that is set by
0024f7e0 124@code{set-selection-coding-system} (@pxref{Communication Coding}) is
385f3fc8
YM
125two-fold. First, it is used as a preferred coding system for the
126traditional text flavor that does not specify any particular encodings
127and is mainly used by applications on Mac OS Classic. Second, it
128specifies the intermediate encoding for the UTF-16 text flavor that is
129mainly used by applications on Mac OS X.
130
131 When pasting UTF-16 text data from the clipboard, it is first
132converted to the encoding specified by the selection coding system
133using the converter in the Mac OS system, and then decoded into the
134Emacs internal encoding using the converter in Emacs. If the first
af85a998
YM
135conversion failed, then the UTF-16 data is directly converted to Emacs
136internal encoding using the converter in Emacs. Copying UTF-16 text
137to the clipboard goes through the inverse path. The reason for this
138two-pass decoding is to avoid subtle differences in Unicode mappings
139between the Mac OS system and Emacs such as various kinds of hyphens,
140and to minimize users' customization. For example, users that mainly
141use Latin characters would prefer Greek characters to be decoded into
142the @code{mule-unicode-0100-24ff} charset, but Japanese users would
143prefer them to be decoded into the @code{japanese-jisx0208} charset.
144Since the coding system for selection is automatically set according
145to the system locale setting, users usually don't have to set it
146manually.
385f3fc8
YM
147
148 The default language environment (@pxref{Language Environments}) is
149set according to the locale setting at the startup time. On Mac OS,
150the locale setting is consulted in the following order:
151
152@enumerate
153@item
154Environment variables @env{LC_ALL}, @env{LC_CTYPE} and @env{LANG} as
155in other systems.
156
157@item
158Preference @code{AppleLocale} that is set by default on Mac OS X 10.3
159and later.
160
161@item
162Preference @code{AppleLanguages} that is set by default on Mac OS X
16310.1 and later.
164
165@item
166Variable @code{mac-system-locale} that is derived from the system
167language and region codes. This variable is available on all
168supported Mac OS versions including Mac OS Classic.
169@end enumerate
170
171 The default values of almost all variables about coding systems are
172also set according to the language environment. So usually you don't
173have to customize these variables manually.
ebc956ca
EZ
174
175@node Mac Environment Variables
176@section Environment Variables and Command Line Arguments.
4946337d 177@cindex environment variables (Mac OS)
ebc956ca 178
e0f712ba
AC
179 On Mac OS X, when Emacs is run in a terminal, it inherits the values
180of environment variables from the shell from which it is invoked.
385f3fc8
YM
181However, when it is run from the Finder as a GUI application, it only
182inherits environment variable values defined in the file
183@file{~/.MacOSX/environment.plist} that affects all the applications
184invoked from the Finder or the @command{open} command.
e0f712ba 185
385f3fc8
YM
186 Command line arguments are specified like
187
188@example
47915f5f 189/Applications/Emacs.app/Contents/MacOS/Emacs -g 80x25 &
385f3fc8
YM
190@end example
191
192@noindent
193if Emacs is installed at @file{/Applications/Emacs.app}. If Emacs is
194invoked like this, then it also inherits the values of environment
195variables from the shell from which it is invoked.
196
197 On Mac OS Classic, environment variables and command line arguments
e0f712ba
AC
198for Emacs can be set by modifying the @samp{STR#} resources 128 and
199129, respectively. A common environment variable that one may want to
200set is @samp{HOME}.
ebc956ca
EZ
201
202 The way to set an environment variable is by adding a string of the
203form
204
205@example
206ENV_VAR=VALUE
207@end example
208
209@noindent
210to resource @samp{STR#} number 128 using @code{ResEdit}. To set up the
211program to use unibyte characters exclusively, for example, add the
212string
213
214@example
215EMACS_UNIBYTE=1
216@end example
217
385f3fc8
YM
218@cindex Mac Preferences
219 Although Emacs on Mac does not support X resources (@pxref{X
220Resources}) directly, one can use the Preferences system in place of X
221resources. For example, adding the line
222
223@example
224Emacs.cursorType: bar
225@end example
226
227@noindent
228to @file{~/.Xresources} in X11 corresponds to the execution of
229
230@example
231defaults write org.gnu.Emacs Emacs.cursorType bar
232@end example
233
234@noindent
235on Mac OS X. One can use boolean or numeric values as well as string
236values as follows:
237
238@example
239defaults write org.gnu.Emacs Emacs.toolBar -bool false
240defaults write org.gnu.Emacs Emacs.lineSpacing -int 3
241@end example
242
243@noindent
244Try @kbd{M-x man RET defaults RET} for the usage of the
245@command{defaults} command. Alternatively, if you have Developer
246Tools installed on Mac OS X, you can use Property List Editor to edit
247the file @file{~/Library/Preferences/org.gnu.Emacs.plist}.
248
ebc956ca
EZ
249
250@node Mac Directories
385f3fc8 251@section Volumes and Directories on Mac
4946337d 252@cindex file names (Mac OS)
ebc956ca 253
385f3fc8
YM
254 This node applies to Mac OS Classic only.
255
256 The directory structure in Mac OS Classic is seen by Emacs as
ebc956ca
EZ
257
258@example
b08fa67e 259/@var{volumename}/@var{filename}
ebc956ca
EZ
260@end example
261
b08fa67e 262So when Emacs requests a file name, doing file name completion on
892c6176
RS
263@file{/} will display all volumes on the system. You can use @file{..}
264to go up a directory level.
ebc956ca 265
385f3fc8 266 On Mac OS Classic, to access files and folders on the desktop, look
e0f712ba
AC
267in the folder @file{Desktop Folder} in your boot volume (this folder
268is usually invisible in the Mac @code{Finder}).
269
385f3fc8 270 On Mac OS Classic, Emacs creates the Mac folder
e0f712ba
AC
271@file{:Preferences:Emacs:} in the @file{System Folder} and uses it as
272the temporary directory. Emacs maps the directory name @file{/tmp/}
273to that. Therefore it is best to avoid naming a volume @file{tmp}.
274If everything works correctly, the program should leave no files in it
275when it exits. You should be able to set the environment variable
276@code{TMPDIR} to use another directory but this folder will still be
277created.
ebc956ca
EZ
278
279
280@node Mac Font Specs
385f3fc8 281@section Specifying Fonts on Mac
4946337d 282@cindex font names (Mac OS)
ebc956ca 283
305f719a 284 It is rare that you need to specify a font name in Emacs; usually
d0aeb9af
YM
285you specify face attributes instead. For example, you can use 14pt
286Courier by customizing the default face attributes for all frames:
287
288@lisp
47915f5f
YM
289(set-face-attribute 'default nil
290 :family "courier" :height 140)
d0aeb9af
YM
291@end lisp
292
293@noindent
294Alternatively, an interactive one is also available
295(@pxref{Face Customization}).
296
297But when you do need to specify a font name in Emacs on Mac, use a
298standard X font name:
ebc956ca 299
b08fa67e 300@smallexample
f8ca728a
AC
301-@var{maker}-@var{family}-@var{weight}-@var{slant}-@var{widthtype}-@var{style}@dots{}
302@dots{}-@var{pixels}-@var{height}-@var{horiz}-@var{vert}-@var{spacing}-@var{width}-@var{charset}
b08fa67e 303@end smallexample
ebc956ca 304
b08fa67e 305@noindent
305f719a 306@xref{Font X}. Wildcards are supported as they are on X.
ebc956ca 307
47915f5f
YM
308 Emacs on Mac OS Classic uses QuickDraw Text routines for drawing texts
309by default. Emacs on Mac OS X uses @acronym{ATSUI, Apple Type Services
310for Unicode Imaging} as well as QuickDraw Text, and most of the
311characters other than Chinese, Japanese, and Korean ones are drawn using
312the former by default.
313
314 @acronym{ATSUI}-compatible fonts have maker name @code{apple} and
444246ca
KB
315charset @code{iso10646-1}. For example, 12-point Monaco can be specified
316by the name:
317
318@example
319-apple-monaco-medium-r-normal--12-*-*-*-*-*-iso10646-1
320@end example
321
322Note that it must be specified in a format containing 14 @samp{-}s
323(e.g., not by @samp{-apple-monaco-medium-r-normal--12-*-iso10646-1}),
324because every @acronym{ATSUI}-compatible font is a scalable one.
47915f5f
YM
325
326 QuickDraw Text fonts have maker name @code{apple} and various charset
327names other than @code{iso10646-1}. Native Apple fonts in Mac Roman
328encoding has charset @code{mac-roman}. You can specify a
329@code{mac-roman} font for @acronym{ASCII} characters like
330
331@smalllisp
385f3fc8
YM
332(add-to-list
333 'default-frame-alist
334 '(font . "-apple-monaco-medium-r-normal--13-*-*-*-*-*-mac-roman"))
47915f5f 335@end smalllisp
385f3fc8
YM
336
337@noindent
338but that does not extend to ISO-8859-1: specifying a @code{mac-roman}
339font for Latin-1 characters introduces wrong glyphs.
340
341 Native Apple Traditional Chinese, Simplified Chinese, Japanese,
342Korean, Central European, Cyrillic, Symbol, and Dingbats fonts have
343charsets @samp{big5-0}, @samp{gb2312.1980-0},
344@samp{jisx0208.1983-sjis} and @samp{jisx0201.1976-0},
345@samp{ksc5601.1989-0}, @samp{mac-centraleurroman},
346@samp{mac-cyrillic}, @samp{mac-symbol}, and @samp{mac-dingbats},
347respectively.
348
385f3fc8 349 The use of @code{create-fontset-from-fontset-spec} (@pxref{Defining
47915f5f
YM
350Fontsets}) for defining fontsets often results in wrong ones especially
351when using only OS-bundled QuickDraw Text fonts. The recommended way to
352use them is to create a fontset using
353@code{create-fontset-from-mac-roman-font}:
385f3fc8
YM
354
355@lisp
356(create-fontset-from-mac-roman-font
357 "-apple-courier-medium-r-normal--13-*-*-*-*-*-mac-roman"
358 nil "foo")
359@end lisp
360
361@noindent
362and then optionally specifying Chinese, Japanese, or Korean font
363families using @code{set-fontset-font}:
364
365@lisp
366(set-fontset-font "fontset-foo"
367 'chinese-gb2312 '("song" . "gb2312.1980-0"))
368@end lisp
ebc956ca
EZ
369
370 Single-byte fonts converted from GNU fonts in BDF format, which are not
371in the Mac Roman encoding, have foundry, family, and character sets
372encoded in the names of their font suitcases. E.g., the font suitcase
373@samp{ETL-Fixed-ISO8859-1} contains fonts which can be referred to by
374the name @samp{-ETL-fixed-*-iso8859-1}.
375
385f3fc8 376@vindex mac-allow-anti-aliasing
47915f5f
YM
377 Mac OS X 10.2 or later can use two types of text renderings: Quartz 2D
378(aka Core Graphics) and QuickDraw. By default, Emacs uses the former on
379such versions. It can be changed by setting
380@code{mac-allow-anti-aliasing} to @code{t} (Quartz 2D) or @code{nil}
381(QuickDraw). Both @acronym{ATSUI} and QuickDraw Text drawings are
382affected by the value of this variable.
383
ebc956ca
EZ
384
385@node Mac Functions
c44461ef 386@section Mac-Specific Lisp Functions
4946337d 387@cindex Lisp functions specific to Mac OS
ebc956ca
EZ
388
389@findex do-applescript
390 The function @code{do-applescript} takes a string argument,
391executes it as an AppleScript command, and returns the result as a
392string.
393
51c2603b
AC
394@findex mac-file-name-to-posix
395@findex posix-file-name-to-mac
396 The function @code{mac-file-name-to-posix} takes a Mac file name and
7b67d693 397returns the GNU or Unix equivalent. The function
51c2603b
AC
398@code{posix-file-name-to-mac} performs the opposite conversion. They
399are useful for constructing AppleScript commands to be passed to
400@code{do-applescript}.
ab5796a9 401
385f3fc8
YM
402@findex mac-set-file-creator
403@findex mac-get-file-creator
404@findex mac-set-file-type
405@findex mac-get-file-type
406 The functions @code{mac-set-file-creator},
407@code{mac-get-file-creator}, @code{mac-set-file-type}, and
408@code{mac-get-file-type} can be used to set and get creator and file
409codes.
410
411@findex mac-get-preference
412 The function @code{mac-get-preference} returns the preferences value
413converted to a Lisp object for a specified key and application.
414
ab5796a9
MB
415@ignore
416 arch-tag: a822c2ab-4273-4997-927e-c153bb71dcf6
417@end ignore