From 74e2abe26a974d64a1fe006dd99c061c91d71773 Mon Sep 17 00:00:00 2001 From: Steven Tamm Date: Mon, 27 Dec 2004 17:23:02 +0000 Subject: * term/mac-win.el: Sync with x-win.el. Rearrange the contents. Call mac-clear-font-name-table if invoked on Mac OS 8/9. Call x-open-connection on Mac OS X. --- lisp/ChangeLog | 6 + lisp/term/mac-win.el | 1522 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 914 insertions(+), 614 deletions(-) (limited to 'lisp') diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 52f19eaf78..f3f943a52a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2004-12-27 YAMAMOTO Mitsuharu + + * term/mac-win.el: Sync with x-win.el. Rearrange the contents. + Call mac-clear-font-name-table if invoked on Mac OS 8/9. Call + x-open-connection on Mac OS X. + 2004-12-27 Richard M. Stallman * bookmark.el (bookmark-jump): Nice error if BOOKMARK is nil. diff --git a/lisp/term/mac-win.el b/lisp/term/mac-win.el index 2b5c4d2a99..8cfce66c21 100644 --- a/lisp/term/mac-win.el +++ b/lisp/term/mac-win.el @@ -1,8 +1,9 @@ -;;; mac-win.el --- support for "Macintosh windows" +;;; mac-win.el --- parse switches controlling interface with Mac window system -;; Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc. ;; Author: Andrew Choi +;; Keywords: terminals ;; This file is part of GNU Emacs. @@ -23,637 +24,215 @@ ;;; Commentary: -;;; Code: - -;; --------------------------------------------------------------------------- -;; We want to delay setting frame parameters until the faces are setup +;; Mac-win.el: this file is loaded from ../lisp/startup.el when it recognizes +;; that Mac windows are to be used. Command line switches are parsed and those +;; pertaining to Mac are processed and removed from the command line. The +;; Mac display is opened and hooks are set for popping up the initial window. -;; Mac can't handle ~ prefix in file names -;(setq auto-save-list-file-prefix ".saves-") +;; startup.el will then examine startup files, and eventually call the hooks +;; which create the first window(s). -(setq frame-creation-function 'x-create-frame-with-faces) +;;; Code: + +;; These are the standard X switches from the Xt Initialize.c file of +;; Release 4. -;; for debugging -;; (defun mac-handle-scroll-bar-event (event) (interactive "e") (princ event)) +;; Command line Resource Manager string -;;(global-set-key [vertical-scroll-bar mouse-1] 'mac-handle-scroll-bar-event) +;; +rv *reverseVideo +;; +synchronous *synchronous +;; -background *background +;; -bd *borderColor +;; -bg *background +;; -bordercolor *borderColor +;; -borderwidth .borderWidth +;; -bw .borderWidth +;; -display .display +;; -fg *foreground +;; -fn *font +;; -font *font +;; -foreground *foreground +;; -geometry .geometry +;; -i .iconType +;; -itype .iconType +;; -iconic .iconic +;; -name .name +;; -reverse *reverseVideo +;; -rv *reverseVideo +;; -selectionTimeout .selectionTimeout +;; -synchronous *synchronous +;; -xrm -(global-set-key - [vertical-scroll-bar down-mouse-1] - 'mac-handle-scroll-bar-event) +;; An alist of X options and the function which handles them. See +;; ../startup.el. -(global-unset-key [vertical-scroll-bar drag-mouse-1]) -(global-unset-key [vertical-scroll-bar mouse-1]) +(if (not (eq window-system 'mac)) + (error "%s: Loading mac-win.el but not compiled for Mac" (invocation-name))) +(require 'frame) +(require 'mouse) (require 'scroll-bar) +(require 'faces) +;;(require 'select) +(require 'menu-bar) +(require 'fontset) +;;(require 'x-dnd) -(defun mac-handle-scroll-bar-event (event) - "Handle scroll bar EVENT to emulate Mac Toolbox style scrolling." - (interactive "e") - (let* ((position (event-start event)) - (window (nth 0 position)) - (bar-part (nth 4 position))) - (select-window window) - (cond - ((eq bar-part 'up) - (goto-char (window-start window)) - (mac-scroll-down-line)) - ((eq bar-part 'above-handle) - (mac-scroll-down)) - ((eq bar-part 'handle) - (scroll-bar-drag event)) - ((eq bar-part 'below-handle) - (mac-scroll-up)) - ((eq bar-part 'down) - (goto-char (window-start window)) - (mac-scroll-up-line))))) - -(defun mac-scroll-ignore-events () - ;; Ignore confusing non-mouse events - (while (not (memq (car-safe (read-event)) - '(mouse-1 double-mouse-1 triple-mouse-1))) nil)) - -(defun mac-scroll-down () - (track-mouse - (mac-scroll-ignore-events) - (scroll-down))) - -(defun mac-scroll-down-line () - (track-mouse - (mac-scroll-ignore-events) - (scroll-down 1))) - -(defun mac-scroll-up () - (track-mouse - (mac-scroll-ignore-events) - (scroll-up))) - -(defun mac-scroll-up-line () - (track-mouse - (mac-scroll-ignore-events) - (scroll-up 1))) - -(defun xw-defined-colors (&optional frame) - "Internal function called by `defined-colors', which see." - (or frame (setq frame (selected-frame))) - (let ((all-colors x-colors) - (this-color nil) - (defined-colors nil)) - (while all-colors - (setq this-color (car all-colors) - all-colors (cdr all-colors)) - (and (color-supported-p this-color frame t) - (setq defined-colors (cons this-color defined-colors)))) - defined-colors)) - -;; Don't have this yet. -(fset 'x-get-resource 'ignore) - -(unless (eq system-type 'darwin) - ;; This variable specifies the Unix program to call (as a process) to - ;; deteremine the amount of free space on a file system (defaults to - ;; df). If it is not set to nil, ls-lisp will not work correctly - ;; unless an external application df is implemented on the Mac. - (setq directory-free-space-program nil) - - ;; Set this so that Emacs calls subprocesses with "sh" as shell to - ;; expand filenames Note no subprocess for the shell is actually - ;; started (see run_mac_command in sysdep.c). - (setq shell-file-name "sh")) +(defvar x-invocation-args) -;; X Window emulation in macterm.c is not complete enough to start a -;; frame without a minibuffer properly. Call this to tell ediff -;; library to use a single frame. -; (ediff-toggle-multiframe) +(defvar x-command-line-resources nil) -;; Setup to use the Mac clipboard. The functions mac-cut-function and -;; mac-paste-function are defined in mac.c. -(set-selection-coding-system 'compound-text-mac) +;; Handler for switches of the form "-switch value" or "-switch". +(defun x-handle-switch (switch) + (let ((aelt (assoc switch command-line-x-option-alist))) + (if aelt + (let ((param (nth 3 aelt)) + (value (nth 4 aelt))) + (if value + (setq default-frame-alist + (cons (cons param value) + default-frame-alist)) + (setq default-frame-alist + (cons (cons param + (car x-invocation-args)) + default-frame-alist) + x-invocation-args (cdr x-invocation-args))))))) -(setq interprogram-cut-function - '(lambda (str push) - (mac-cut-function - (encode-coding-string str selection-coding-system t) push))) +;; Handler for switches of the form "-switch n" +(defun x-handle-numeric-switch (switch) + (let ((aelt (assoc switch command-line-x-option-alist))) + (if aelt + (let ((param (nth 3 aelt))) + (setq default-frame-alist + (cons (cons param + (string-to-int (car x-invocation-args))) + default-frame-alist) + x-invocation-args + (cdr x-invocation-args)))))) -(setq interprogram-paste-function - '(lambda () - (let ((clipboard (mac-paste-function))) - (if clipboard - (decode-coding-string clipboard selection-coding-system t))))) +;; Handle options that apply to initial frame only +(defun x-handle-initial-switch (switch) + (let ((aelt (assoc switch command-line-x-option-alist))) + (if aelt + (let ((param (nth 3 aelt)) + (value (nth 4 aelt))) + (if value + (setq initial-frame-alist + (cons (cons param value) + initial-frame-alist)) + (setq initial-frame-alist + (cons (cons param + (car x-invocation-args)) + initial-frame-alist) + x-invocation-args (cdr x-invocation-args))))))) -;; Don't show the frame name; that's redundant. -(setq-default mode-line-frame-identification " ") +;; Make -iconic apply only to the initial frame! +(defun x-handle-iconic (switch) + (setq initial-frame-alist + (cons '(visibility . icon) initial-frame-alist))) -(defun mac-drag-n-drop (event) - "Edit the files listed in the drag-n-drop event.\n\ -Switch to a buffer editing the last file dropped." - (interactive "e") - (save-excursion - ;; Make sure the drop target has positive co-ords - ;; before setting the selected frame - otherwise it - ;; won't work. - (let* ((window (posn-window (event-start event))) - (coords (posn-x-y (event-start event))) - (x (car coords)) - (y (cdr coords))) - (if (and (> x 0) (> y 0)) - (set-frame-selected-window nil window)) - (mapcar - '(lambda (file) - (find-file - (decode-coding-string - file - (or file-name-coding-system - default-file-name-coding-system)))) - (car (cdr (cdr event))))) - (raise-frame) - (recenter))) +;; Handle the -xrm option. +(defun x-handle-xrm-switch (switch) + (unless (consp x-invocation-args) + (error "%s: missing argument to `%s' option" (invocation-name) switch)) + (setq x-command-line-resources + (if (null x-command-line-resources) + (car x-invocation-args) + (concat x-command-line-resources "\n" (car x-invocation-args)))) + (setq x-invocation-args (cdr x-invocation-args))) -(global-set-key [drag-n-drop] 'mac-drag-n-drop) +;; Handle the geometry option +(defun x-handle-geometry (switch) + (let* ((geo (x-parse-geometry (car x-invocation-args))) + (left (assq 'left geo)) + (top (assq 'top geo)) + (height (assq 'height geo)) + (width (assq 'width geo))) + (if (or height width) + (setq default-frame-alist + (append default-frame-alist + '((user-size . t)) + (if height (list height)) + (if width (list width))) + initial-frame-alist + (append initial-frame-alist + '((user-size . t)) + (if height (list height)) + (if width (list width))))) + (if (or left top) + (setq initial-frame-alist + (append initial-frame-alist + '((user-position . t)) + (if left (list left)) + (if top (list top))))) + (setq x-invocation-args (cdr x-invocation-args)))) -;; By checking whether the variable mac-ready-for-drag-n-drop has been -;; defined, the event loop in macterm.c can be informed that it can -;; now receive Finder drag and drop events. Files dropped onto the -;; Emacs application icon can only be processed when the initial frame -;; has been created: this is where the files should be opened. -(add-hook 'after-init-hook - '(lambda () - (defvar mac-ready-for-drag-n-drop t))) +;; Handle the -name option. Set the variable x-resource-name +;; to the option's operand; set the name of +;; the initial frame, too. +(defun x-handle-name-switch (switch) + (or (consp x-invocation-args) + (error "%s: missing argument to `%s' option" (invocation-name) switch)) + (setq x-resource-name (car x-invocation-args) + x-invocation-args (cdr x-invocation-args)) + (setq initial-frame-alist (cons (cons 'name x-resource-name) + initial-frame-alist))) -; Define constant values to be set to mac-keyboard-text-encoding -(defconst kTextEncodingMacRoman 0) -(defconst kTextEncodingISOLatin1 513 "0x201") -(defconst kTextEncodingISOLatin2 514 "0x202") +(defvar x-display-name nil + "The display name specifying server and frame.") +(defun x-handle-display (switch) + (setq x-display-name (car x-invocation-args) + x-invocation-args (cdr x-invocation-args))) -(define-ccl-program ccl-encode-mac-roman-font - `(0 - (if (r0 != ,(charset-id 'ascii)) - (if (r0 <= ?\x8f) - (translate-character mac-roman-encoder r0 r1) - ((r1 <<= 7) - (r1 |= r2) - (translate-character mac-roman-encoder r0 r1))))) - "CCL program for Mac Roman font") - -(let - ((encoding-vector (make-vector 256 nil)) - (i 0) - (vec ;; mac-centraleurroman (128..255) -> UCS mapping - [ #x00C4 ;; 128:LATIN CAPITAL LETTER A WITH DIAERESIS - #x0100 ;; 129:LATIN CAPITAL LETTER A WITH MACRON - #x0101 ;; 130:LATIN SMALL LETTER A WITH MACRON - #x00C9 ;; 131:LATIN CAPITAL LETTER E WITH ACUTE - #x0104 ;; 132:LATIN CAPITAL LETTER A WITH OGONEK - #x00D6 ;; 133:LATIN CAPITAL LETTER O WITH DIAERESIS - #x00DC ;; 134:LATIN CAPITAL LETTER U WITH DIAERESIS - #x00E1 ;; 135:LATIN SMALL LETTER A WITH ACUTE - #x0105 ;; 136:LATIN SMALL LETTER A WITH OGONEK - #x010C ;; 137:LATIN CAPITAL LETTER C WITH CARON - #x00E4 ;; 138:LATIN SMALL LETTER A WITH DIAERESIS - #x010D ;; 139:LATIN SMALL LETTER C WITH CARON - #x0106 ;; 140:LATIN CAPITAL LETTER C WITH ACUTE - #x0107 ;; 141:LATIN SMALL LETTER C WITH ACUTE - #x00E9 ;; 142:LATIN SMALL LETTER E WITH ACUTE - #x0179 ;; 143:LATIN CAPITAL LETTER Z WITH ACUTE - #x017A ;; 144:LATIN SMALL LETTER Z WITH ACUTE - #x010E ;; 145:LATIN CAPITAL LETTER D WITH CARON - #x00ED ;; 146:LATIN SMALL LETTER I WITH ACUTE - #x010F ;; 147:LATIN SMALL LETTER D WITH CARON - #x0112 ;; 148:LATIN CAPITAL LETTER E WITH MACRON - #x0113 ;; 149:LATIN SMALL LETTER E WITH MACRON - #x0116 ;; 150:LATIN CAPITAL LETTER E WITH DOT ABOVE - #x00F3 ;; 151:LATIN SMALL LETTER O WITH ACUTE - #x0117 ;; 152:LATIN SMALL LETTER E WITH DOT ABOVE - #x00F4 ;; 153:LATIN SMALL LETTER O WITH CIRCUMFLEX - #x00F6 ;; 154:LATIN SMALL LETTER O WITH DIAERESIS - #x00F5 ;; 155:LATIN SMALL LETTER O WITH TILDE - #x00FA ;; 156:LATIN SMALL LETTER U WITH ACUTE - #x011A ;; 157:LATIN CAPITAL LETTER E WITH CARON - #x011B ;; 158:LATIN SMALL LETTER E WITH CARON - #x00FC ;; 159:LATIN SMALL LETTER U WITH DIAERESIS - #x2020 ;; 160:DAGGER - #x00B0 ;; 161:DEGREE SIGN - #x0118 ;; 162:LATIN CAPITAL LETTER E WITH OGONEK - #x00A3 ;; 163:POUND SIGN - #x00A7 ;; 164:SECTION SIGN - #x2022 ;; 165:BULLET - #x00B6 ;; 166:PILCROW SIGN - #x00DF ;; 167:LATIN SMALL LETTER SHARP S - #x00AE ;; 168:REGISTERED SIGN - #x00A9 ;; 169:COPYRIGHT SIGN - #x2122 ;; 170:TRADE MARK SIGN - #x0119 ;; 171:LATIN SMALL LETTER E WITH OGONEK - #x00A8 ;; 172:DIAERESIS - #x2260 ;; 173:NOT EQUAL TO - #x0123 ;; 174:LATIN SMALL LETTER G WITH CEDILLA - #x012E ;; 175:LATIN CAPITAL LETTER I WITH OGONEK - #x012F ;; 176:LATIN SMALL LETTER I WITH OGONEK - #x012A ;; 177:LATIN CAPITAL LETTER I WITH MACRON - #x2264 ;; 178:LESS-THAN OR EQUAL TO - #x2265 ;; 179:GREATER-THAN OR EQUAL TO - #x012B ;; 180:LATIN SMALL LETTER I WITH MACRON - #x0136 ;; 181:LATIN CAPITAL LETTER K WITH CEDILLA - #x2202 ;; 182:PARTIAL DIFFERENTIAL - #x2211 ;; 183:N-ARY SUMMATION - #x0142 ;; 184:LATIN SMALL LETTER L WITH STROKE - #x013B ;; 185:LATIN CAPITAL LETTER L WITH CEDILLA - #x013C ;; 186:LATIN SMALL LETTER L WITH CEDILLA - #x013D ;; 187:LATIN CAPITAL LETTER L WITH CARON - #x013E ;; 188:LATIN SMALL LETTER L WITH CARON - #x0139 ;; 189:LATIN CAPITAL LETTER L WITH ACUTE - #x013A ;; 190:LATIN SMALL LETTER L WITH ACUTE - #x0145 ;; 191:LATIN CAPITAL LETTER N WITH CEDILLA - #x0146 ;; 192:LATIN SMALL LETTER N WITH CEDILLA - #x0143 ;; 193:LATIN CAPITAL LETTER N WITH ACUTE - #x00AC ;; 194:NOT SIGN - #x221A ;; 195:SQUARE ROOT - #x0144 ;; 196:LATIN SMALL LETTER N WITH ACUTE - #x0147 ;; 197:LATIN CAPITAL LETTER N WITH CARON - #x2206 ;; 198:INCREMENT - #x00AB ;; 199:LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - #x00BB ;; 200:RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - #x2026 ;; 201:HORIZONTAL ELLIPSIS - #x00A0 ;; 202:NO-BREAK SPACE - #x0148 ;; 203:LATIN SMALL LETTER N WITH CARON - #x0150 ;; 204:LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - #x00D5 ;; 205:LATIN CAPITAL LETTER O WITH TILDE - #x0151 ;; 206:LATIN SMALL LETTER O WITH DOUBLE ACUTE - #x014C ;; 207:LATIN CAPITAL LETTER O WITH MACRON - #x2013 ;; 208:EN DASH - #x2014 ;; 209:EM DASH - #x201C ;; 210:LEFT DOUBLE QUOTATION MARK - #x201D ;; 211:RIGHT DOUBLE QUOTATION MARK - #x2018 ;; 212:LEFT SINGLE QUOTATION MARK - #x2019 ;; 213:RIGHT SINGLE QUOTATION MARK - #x00F7 ;; 214:DIVISION SIGN - #x25CA ;; 215:LOZENGE - #x014D ;; 216:LATIN SMALL LETTER O WITH MACRON - #x0154 ;; 217:LATIN CAPITAL LETTER R WITH ACUTE - #x0155 ;; 218:LATIN SMALL LETTER R WITH ACUTE - #x0158 ;; 219:LATIN CAPITAL LETTER R WITH CARON - #x2039 ;; 220:SINGLE LEFT-POINTING ANGLE QUOTATION MARK - #x203A ;; 221:SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - #x0159 ;; 222:LATIN SMALL LETTER R WITH CARON - #x0156 ;; 223:LATIN CAPITAL LETTER R WITH CEDILLA - #x0157 ;; 224:LATIN SMALL LETTER R WITH CEDILLA - #x0160 ;; 225:LATIN CAPITAL LETTER S WITH CARON - #x201A ;; 226:SINGLE LOW-9 QUOTATION MARK - #x201E ;; 227:DOUBLE LOW-9 QUOTATION MARK - #x0161 ;; 228:LATIN SMALL LETTER S WITH CARON - #x015A ;; 229:LATIN CAPITAL LETTER S WITH ACUTE - #x015B ;; 230:LATIN SMALL LETTER S WITH ACUTE - #x00C1 ;; 231:LATIN CAPITAL LETTER A WITH ACUTE - #x0164 ;; 232:LATIN CAPITAL LETTER T WITH CARON - #x0165 ;; 233:LATIN SMALL LETTER T WITH CARON - #x00CD ;; 234:LATIN CAPITAL LETTER I WITH ACUTE - #x017D ;; 235:LATIN CAPITAL LETTER Z WITH CARON - #x017E ;; 236:LATIN SMALL LETTER Z WITH CARON - #x016A ;; 237:LATIN CAPITAL LETTER U WITH MACRON - #x00D3 ;; 238:LATIN CAPITAL LETTER O WITH ACUTE - #x00D4 ;; 239:LATIN CAPITAL LETTER O WITH CIRCUMFLEX - #x016B ;; 240:LATIN SMALL LETTER U WITH MACRON - #x016E ;; 241:LATIN CAPITAL LETTER U WITH RING ABOVE - #x00DA ;; 242:LATIN CAPITAL LETTER U WITH ACUTE - #x016F ;; 243:LATIN SMALL LETTER U WITH RING ABOVE - #x0170 ;; 244:LATIN CAPITAL LETTER U WITH DOUBLE ACUTE - #x0171 ;; 245:LATIN SMALL LETTER U WITH DOUBLE ACUTE - #x0172 ;; 246:LATIN CAPITAL LETTER U WITH OGONEK - #x0173 ;; 247:LATIN SMALL LETTER U WITH OGONEK - #x00DD ;; 248:LATIN CAPITAL LETTER Y WITH ACUTE - #x00FD ;; 249:LATIN SMALL LETTER Y WITH ACUTE - #x0137 ;; 250:LATIN SMALL LETTER K WITH CEDILLA - #x017B ;; 251:LATIN CAPITAL LETTER Z WITH DOT ABOVE - #x0141 ;; 252:LATIN CAPITAL LETTER L WITH STROKE - #x017C ;; 253:LATIN SMALL LETTER Z WITH DOT ABOVE - #x0122 ;; 254:LATIN CAPITAL LETTER G WITH CEDILLA - #x02C7 ;; 255:CARON - ]) - translation-table) - (while (< i 128) - (aset encoding-vector i i) - (setq i (1+ i))) - (while (< i 256) - (aset encoding-vector i - (decode-char 'ucs (aref vec (- i 128)))) - (setq i (1+ i))) - (setq translation-table - (make-translation-table-from-vector encoding-vector)) -;; (define-translation-table 'mac-centraleurroman-decoder translation-table) - (define-translation-table 'mac-centraleurroman-encoder - (char-table-extra-slot translation-table 0))) - -(let - ((encoding-vector (make-vector 256 nil)) - (i 0) - (vec ;; mac-cyrillic (128..255) -> UCS mapping - [ #x0410 ;; 128:CYRILLIC CAPITAL LETTER A - #x0411 ;; 129:CYRILLIC CAPITAL LETTER BE - #x0412 ;; 130:CYRILLIC CAPITAL LETTER VE - #x0413 ;; 131:CYRILLIC CAPITAL LETTER GHE - #x0414 ;; 132:CYRILLIC CAPITAL LETTER DE - #x0415 ;; 133:CYRILLIC CAPITAL LETTER IE - #x0416 ;; 134:CYRILLIC CAPITAL LETTER ZHE - #x0417 ;; 135:CYRILLIC CAPITAL LETTER ZE - #x0418 ;; 136:CYRILLIC CAPITAL LETTER I - #x0419 ;; 137:CYRILLIC CAPITAL LETTER SHORT I - #x041A ;; 138:CYRILLIC CAPITAL LETTER KA - #x041B ;; 139:CYRILLIC CAPITAL LETTER EL - #x041C ;; 140:CYRILLIC CAPITAL LETTER EM - #x041D ;; 141:CYRILLIC CAPITAL LETTER EN - #x041E ;; 142:CYRILLIC CAPITAL LETTER O - #x041F ;; 143:CYRILLIC CAPITAL LETTER PE - #x0420 ;; 144:CYRILLIC CAPITAL LETTER ER - #x0421 ;; 145:CYRILLIC CAPITAL LETTER ES - #x0422 ;; 146:CYRILLIC CAPITAL LETTER TE - #x0423 ;; 147:CYRILLIC CAPITAL LETTER U - #x0424 ;; 148:CYRILLIC CAPITAL LETTER EF - #x0425 ;; 149:CYRILLIC CAPITAL LETTER HA - #x0426 ;; 150:CYRILLIC CAPITAL LETTER TSE - #x0427 ;; 151:CYRILLIC CAPITAL LETTER CHE - #x0428 ;; 152:CYRILLIC CAPITAL LETTER SHA - #x0429 ;; 153:CYRILLIC CAPITAL LETTER SHCHA - #x042A ;; 154:CYRILLIC CAPITAL LETTER HARD SIGN - #x042B ;; 155:CYRILLIC CAPITAL LETTER YERU - #x042C ;; 156:CYRILLIC CAPITAL LETTER SOFT SIGN - #x042D ;; 157:CYRILLIC CAPITAL LETTER E - #x042E ;; 158:CYRILLIC CAPITAL LETTER YU - #x042F ;; 159:CYRILLIC CAPITAL LETTER YA - #x2020 ;; 160:DAGGER - #x00B0 ;; 161:DEGREE SIGN - #x0490 ;; 162:CYRILLIC CAPITAL LETTER GHE WITH UPTURN - #x00A3 ;; 163:POUND SIGN - #x00A7 ;; 164:SECTION SIGN - #x2022 ;; 165:BULLET - #x00B6 ;; 166:PILCROW SIGN - #x0406 ;; 167:CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - #x00AE ;; 168:REGISTERED SIGN - #x00A9 ;; 169:COPYRIGHT SIGN - #x2122 ;; 170:TRADE MARK SIGN - #x0402 ;; 171:CYRILLIC CAPITAL LETTER DJE - #x0452 ;; 172:CYRILLIC SMALL LETTER DJE - #x2260 ;; 173:NOT EQUAL TO - #x0403 ;; 174:CYRILLIC CAPITAL LETTER GJE - #x0453 ;; 175:CYRILLIC SMALL LETTER GJE - #x221E ;; 176:INFINITY - #x00B1 ;; 177:PLUS-MINUS SIGN - #x2264 ;; 178:LESS-THAN OR EQUAL TO - #x2265 ;; 179:GREATER-THAN OR EQUAL TO - #x0456 ;; 180:CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - #x00B5 ;; 181:MICRO SIGN - #x0491 ;; 182:CYRILLIC SMALL LETTER GHE WITH UPTURN - #x0408 ;; 183:CYRILLIC CAPITAL LETTER JE - #x0404 ;; 184:CYRILLIC CAPITAL LETTER UKRAINIAN IE - #x0454 ;; 185:CYRILLIC SMALL LETTER UKRAINIAN IE - #x0407 ;; 186:CYRILLIC CAPITAL LETTER YI - #x0457 ;; 187:CYRILLIC SMALL LETTER YI - #x0409 ;; 188:CYRILLIC CAPITAL LETTER LJE - #x0459 ;; 189:CYRILLIC SMALL LETTER LJE - #x040A ;; 190:CYRILLIC CAPITAL LETTER NJE - #x045A ;; 191:CYRILLIC SMALL LETTER NJE - #x0458 ;; 192:CYRILLIC SMALL LETTER JE - #x0405 ;; 193:CYRILLIC CAPITAL LETTER DZE - #x00AC ;; 194:NOT SIGN - #x221A ;; 195:SQUARE ROOT - #x0192 ;; 196:LATIN SMALL LETTER F WITH HOOK - #x2248 ;; 197:ALMOST EQUAL TO - #x2206 ;; 198:INCREMENT - #x00AB ;; 199:LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - #x00BB ;; 200:RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - #x2026 ;; 201:HORIZONTAL ELLIPSIS - #x00A0 ;; 202:NO-BREAK SPACE - #x040B ;; 203:CYRILLIC CAPITAL LETTER TSHE - #x045B ;; 204:CYRILLIC SMALL LETTER TSHE - #x040C ;; 205:CYRILLIC CAPITAL LETTER KJE - #x045C ;; 206:CYRILLIC SMALL LETTER KJE - #x0455 ;; 207:CYRILLIC SMALL LETTER DZE - #x2013 ;; 208:EN DASH - #x2014 ;; 209:EM DASH - #x201C ;; 210:LEFT DOUBLE QUOTATION MARK - #x201D ;; 211:RIGHT DOUBLE QUOTATION MARK - #x2018 ;; 212:LEFT SINGLE QUOTATION MARK - #x2019 ;; 213:RIGHT SINGLE QUOTATION MARK - #x00F7 ;; 214:DIVISION SIGN - #x201E ;; 215:DOUBLE LOW-9 QUOTATION MARK - #x040E ;; 216:CYRILLIC CAPITAL LETTER SHORT U - #x045E ;; 217:CYRILLIC SMALL LETTER SHORT U - #x040F ;; 218:CYRILLIC CAPITAL LETTER DZHE - #x045F ;; 219:CYRILLIC SMALL LETTER DZHE - #x2116 ;; 220:NUMERO SIGN - #x0401 ;; 221:CYRILLIC CAPITAL LETTER IO - #x0451 ;; 222:CYRILLIC SMALL LETTER IO - #x044F ;; 223:CYRILLIC SMALL LETTER YA - #x0430 ;; 224:CYRILLIC SMALL LETTER A - #x0431 ;; 225:CYRILLIC SMALL LETTER BE - #x0432 ;; 226:CYRILLIC SMALL LETTER VE - #x0433 ;; 227:CYRILLIC SMALL LETTER GHE - #x0434 ;; 228:CYRILLIC SMALL LETTER DE - #x0435 ;; 229:CYRILLIC SMALL LETTER IE - #x0436 ;; 230:CYRILLIC SMALL LETTER ZHE - #x0437 ;; 231:CYRILLIC SMALL LETTER ZE - #x0438 ;; 232:CYRILLIC SMALL LETTER I - #x0439 ;; 233:CYRILLIC SMALL LETTER SHORT I - #x043A ;; 234:CYRILLIC SMALL LETTER KA - #x043B ;; 235:CYRILLIC SMALL LETTER EL - #x043C ;; 236:CYRILLIC SMALL LETTER EM - #x043D ;; 237:CYRILLIC SMALL LETTER EN - #x043E ;; 238:CYRILLIC SMALL LETTER O - #x043F ;; 239:CYRILLIC SMALL LETTER PE - #x0440 ;; 240:CYRILLIC SMALL LETTER ER - #x0441 ;; 241:CYRILLIC SMALL LETTER ES - #x0442 ;; 242:CYRILLIC SMALL LETTER TE - #x0443 ;; 243:CYRILLIC SMALL LETTER U - #x0444 ;; 244:CYRILLIC SMALL LETTER EF - #x0445 ;; 245:CYRILLIC SMALL LETTER HA - #x0446 ;; 246:CYRILLIC SMALL LETTER TSE - #x0447 ;; 247:CYRILLIC SMALL LETTER CHE - #x0448 ;; 248:CYRILLIC SMALL LETTER SHA - #x0449 ;; 249:CYRILLIC SMALL LETTER SHCHA - #x044A ;; 250:CYRILLIC SMALL LETTER HARD SIGN - #x044B ;; 251:CYRILLIC SMALL LETTER YERU - #x044C ;; 252:CYRILLIC SMALL LETTER SOFT SIGN - #x044D ;; 253:CYRILLIC SMALL LETTER E - #x044E ;; 254:CYRILLIC SMALL LETTER YU - #x20AC ;; 255:EURO SIGN - ]) - translation-table) - (while (< i 128) - (aset encoding-vector i i) - (setq i (1+ i))) - (while (< i 256) - (aset encoding-vector i - (decode-char 'ucs (aref vec (- i 128)))) - (setq i (1+ i))) - (setq translation-table - (make-translation-table-from-vector encoding-vector)) -;; (define-translation-table 'mac-cyrillic-decoder translation-table) - (define-translation-table 'mac-cyrillic-encoder - (char-table-extra-slot translation-table 0))) - -(defvar mac-font-encoder-list - '(("mac-roman" mac-roman-encoder - ccl-encode-mac-roman-font "%s") - ("mac-centraleurroman" mac-centraleurroman-encoder - ccl-encode-mac-centraleurroman-font "%s ce") - ("mac-cyrillic" mac-cyrillic-encoder - ccl-encode-mac-cyrillic-font "%s cy"))) - -(let ((encoder-list - (mapcar (lambda (lst) (nth 1 lst)) mac-font-encoder-list)) - (charset-list - '(latin-iso8859-2 - latin-iso8859-3 latin-iso8859-4 - cyrillic-iso8859-5 greek-iso8859-7 hebrew-iso8859-8 - latin-iso8859-9 latin-iso8859-14 latin-iso8859-15))) - (dolist (encoder encoder-list) - (let ((table (get encoder 'translation-table))) - (dolist (charset charset-list) - (dotimes (i 96) - (let* ((c (make-char charset (+ i 32))) - (mu (aref ucs-mule-to-mule-unicode c)) - (mac-encoded (and mu (aref table mu)))) - (if mac-encoded - (aset table c mac-encoded)))))))) - -(define-ccl-program ccl-encode-mac-centraleurroman-font - `(0 - (if (r0 != ,(charset-id 'ascii)) - (if (r0 <= ?\x8f) - (translate-character mac-centraleurroman-encoder r0 r1) - ((r1 <<= 7) - (r1 |= r2) - (translate-character mac-centraleurroman-encoder r0 r1))))) - "CCL program for Mac Central European Roman font") - -(define-ccl-program ccl-encode-mac-cyrillic-font - `(0 - (if (r0 != ,(charset-id 'ascii)) - (if (r0 <= ?\x8f) - (translate-character mac-cyrillic-encoder r0 r1) - ((r1 <<= 7) - (r1 |= r2) - (translate-character mac-cyrillic-encoder r0 r1))))) - "CCL program for Mac Cyrillic font") - - -(setq font-ccl-encoder-alist - (nconc - (mapcar (lambda (lst) (cons (nth 0 lst) (nth 2 lst))) - mac-font-encoder-list) - font-ccl-encoder-alist)) - -(defun fontset-add-mac-fonts (fontset &optional base-family) - (if base-family - (setq base-family (downcase base-family)) - (let ((ascii-font - (downcase (x-resolve-font-name - (fontset-font fontset (charset-id 'ascii)))))) - (setq base-family (aref (x-decompose-font-name ascii-font) - xlfd-regexp-family-subnum)))) -;; (if (not (string-match "^fontset-" fontset)) -;; (setq fontset -;; (concat "fontset-" (aref (x-decompose-font-name fontset) -;; xlfd-regexp-encoding-subnum)))) - (dolist - (font-encoder - (nreverse - (mapcar (lambda (lst) - (cons (cons (format (nth 3 lst) base-family) (nth 0 lst)) - (nth 1 lst))) - mac-font-encoder-list))) - (let ((font (car font-encoder)) - (encoder (cdr font-encoder))) - (map-char-table - (lambda (key val) - (or (null val) - (generic-char-p key) - (memq (char-charset key) - '(ascii eight-bit-control eight-bit-graphic)) - (set-fontset-font fontset key font))) - (get encoder 'translation-table))))) - -(defun create-fontset-from-mac-roman-font (font &optional resolved-font - fontset-name) - "Create a fontset from a Mac roman font FONT. - -Optional 1st arg RESOLVED-FONT is a resolved name of FONT. If -omitted, `x-resolve-font-name' is called to get the resolved name. At -this time, if FONT is not available, error is signaled. - -Optional 2nd arg FONTSET-NAME is a string to be used in -`' fields of a new fontset name. If it is omitted, -an appropriate name is generated automatically. - -It returns a name of the created fontset." - (let ((fontset - (create-fontset-from-ascii-font font resolved-font fontset-name))) - (fontset-add-mac-fonts fontset) - fontset)) - -;; Create a fontset that uses mac-roman font. With this fontset, -;; characters decoded from mac-roman encoding (ascii, latin-iso8859-1, -;; and mule-unicode-xxxx-yyyy) are displayed by a mac-roman font. - -(if (fboundp 'new-fontset) - (progn - (require 'fontset) - (setup-default-fontset) - (create-fontset-from-fontset-spec - "-etl-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-mac, -ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman") - (fontset-add-mac-fonts "fontset-mac"))) - -(if (eq system-type 'darwin) - ;; On Darwin filenames are encoded in UTF-8 - (setq file-name-coding-system 'utf-8) - ;; To display filenames in Chinese or Japanese, replace mac-roman with - ;; big5 or sjis - (setq file-name-coding-system 'mac-roman)) - -;; If Emacs is started from the Finder, change the default directory -;; to the user's home directory. -(if (string= default-directory "/") - (cd "~")) - -;; Tell Emacs to use pipes instead of pty's for processes because the -;; latter sometimes lose characters. Pty support is compiled in since -;; ange-ftp will not work without it. -(setq process-connection-type nil) - -;; Assume that fonts are always scalable on the Mac. This sometimes -;; results in characters with jagged edges. However, without it, -;; fonts with both truetype and bitmap representations but no italic -;; or bold bitmap versions will not display these variants correctly. -(setq scalable-fonts-allowed t) - -;; Make suspend-emacs [C-z] collapse the current frame -(substitute-key-definition 'suspend-emacs 'iconify-frame - global-map) - -;; Support mouse-wheel scrolling -(mouse-wheel-mode 1) - -;; (prefer-coding-system 'mac-roman) - -;; Map certain keypad keys into ASCII characters that people usually expect -(define-key function-key-map [return] [?\C-m]) -(define-key function-key-map [M-return] [?\M-\C-m]) -(define-key function-key-map [tab] [?\t]) -(define-key function-key-map [M-tab] [?\M-\t]) -(define-key function-key-map [backspace] [127]) -(define-key function-key-map [M-backspace] [?\M-\d]) -(define-key function-key-map [escape] [?\e]) -(define-key function-key-map [M-escape] [?\M-\e]) - -;; Tell read-char how to convert special chars to ASCII -(put 'return 'ascii-character 13) -(put 'tab 'ascii-character ?\t) -(put 'backspace 'ascii-character 127) -(put 'escape 'ascii-character ?\e) - -;; -;; Available colors -;; +(defun x-handle-args (args) + "Process the X-related command line options in ARGS. +This is done before the user's startup file is loaded. They are copied to +`x-invocation-args', from which the X-related things are extracted, first +the switch (e.g., \"-fg\") in the following code, and possible values +\(e.g., \"black\") in the option handler code (e.g., x-handle-switch). +This function returns ARGS minus the arguments that have been processed." + ;; We use ARGS to accumulate the args that we don't handle here, to return. + (setq x-invocation-args args + args nil) + (while (and x-invocation-args + (not (equal (car x-invocation-args) "--"))) + (let* ((this-switch (car x-invocation-args)) + (orig-this-switch this-switch) + completion argval aelt handler) + (setq x-invocation-args (cdr x-invocation-args)) + ;; Check for long options with attached arguments + ;; and separate out the attached option argument into argval. + (if (string-match "^--[^=]*=" this-switch) + (setq argval (substring this-switch (match-end 0)) + this-switch (substring this-switch 0 (1- (match-end 0))))) + ;; Complete names of long options. + (if (string-match "^--" this-switch) + (progn + (setq completion (try-completion this-switch command-line-x-option-alist)) + (if (eq completion t) + ;; Exact match for long option. + nil + (if (stringp completion) + (let ((elt (assoc completion command-line-x-option-alist))) + ;; Check for abbreviated long option. + (or elt + (error "Option `%s' is ambiguous" this-switch)) + (setq this-switch completion)))))) + (setq aelt (assoc this-switch command-line-x-option-alist)) + (if aelt (setq handler (nth 2 aelt))) + (if handler + (if argval + (let ((x-invocation-args + (cons argval x-invocation-args))) + (funcall handler this-switch)) + (funcall handler this-switch)) + (setq args (cons orig-this-switch args))))) + (nconc (nreverse args) x-invocation-args)) + +;; +;; Available colors +;; (defvar x-colors '("LightGreen" "light green" @@ -1407,8 +986,723 @@ ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman") "GhostWhite" "ghost white" "snow") - "The list of X colors from the `rgb.txt' file. + "The list of X colors from the `rgb.txt' file. XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp") +(defun xw-defined-colors (&optional frame) + "Internal function called by `defined-colors', which see." + (or frame (setq frame (selected-frame))) + (let ((all-colors x-colors) + (this-color nil) + (defined-colors nil)) + (while all-colors + (setq this-color (car all-colors) + all-colors (cdr all-colors)) + (and (color-supported-p this-color frame t) + (setq defined-colors (cons this-color defined-colors)))) + defined-colors)) + +;;;; Function keys + +(substitute-key-definition 'suspend-emacs 'iconify-or-deiconify-frame + global-map) + +;; Map certain keypad keys into ASCII characters +;; that people usually expect. +(define-key function-key-map [return] [?\C-m]) +(define-key function-key-map [M-return] [?\M-\C-m]) +(define-key function-key-map [tab] [?\t]) +(define-key function-key-map [M-tab] [?\M-\t]) +(define-key function-key-map [backspace] [127]) +(define-key function-key-map [M-backspace] [?\M-\d]) +(define-key function-key-map [escape] [?\e]) +(define-key function-key-map [M-escape] [?\M-\e]) + +;; These tell read-char how to convert +;; these special chars to ASCII. +(put 'return 'ascii-character 13) +(put 'tab 'ascii-character ?\t) +(put 'backspace 'ascii-character 127) +(put 'escape 'ascii-character ?\e) + + +;;;; Keysyms + +;; Define constant values to be set to mac-keyboard-text-encoding +(defconst kTextEncodingMacRoman 0) +(defconst kTextEncodingISOLatin1 513 "0x201") +(defconst kTextEncodingISOLatin2 514 "0x202") + + +;;;; Selections and cut buffers + +;; Setup to use the Mac clipboard. The functions mac-cut-function and +;; mac-paste-function are defined in mac.c. +(set-selection-coding-system 'compound-text-mac) + +(setq interprogram-cut-function + '(lambda (str push) + (mac-cut-function + (encode-coding-string str selection-coding-system t) push))) + +(setq interprogram-paste-function + '(lambda () + (let ((clipboard (mac-paste-function))) + (if clipboard + (decode-coding-string clipboard selection-coding-system t))))) + + +;;; Do the actual Windows setup here; the above code just defines +;;; functions and variables that we use now. + +(setq command-line-args (x-handle-args command-line-args)) + +;;; Make sure we have a valid resource name. +(or (stringp x-resource-name) + (let (i) + (setq x-resource-name (invocation-name)) + + ;; Change any . or * characters in x-resource-name to hyphens, + ;; so as not to choke when we use it in X resource queries. + (while (setq i (string-match "[.*]" x-resource-name)) + (aset x-resource-name i ?-)))) + +(if (x-display-list) + ;; On Mac OS 8/9, Most coding systems used in code conversion for + ;; font names are not ready at the time when the terminal frame is + ;; created. So we reconstruct font name table for the initial + ;; frame. + (mac-clear-font-name-table) + (x-open-connection "Mac" + x-command-line-resources + ;; Exit Emacs with fatal error if this fails. + t)) + +(setq frame-creation-function 'x-create-frame-with-faces) + +(define-ccl-program ccl-encode-mac-roman-font + `(0 + (if (r0 != ,(charset-id 'ascii)) + (if (r0 <= ?\x8f) + (translate-character mac-roman-encoder r0 r1) + ((r1 <<= 7) + (r1 |= r2) + (translate-character mac-roman-encoder r0 r1))))) + "CCL program for Mac Roman font") + +(let + ((encoding-vector (make-vector 256 nil)) + (i 0) + (vec ;; mac-centraleurroman (128..255) -> UCS mapping + [ #x00C4 ;; 128:LATIN CAPITAL LETTER A WITH DIAERESIS + #x0100 ;; 129:LATIN CAPITAL LETTER A WITH MACRON + #x0101 ;; 130:LATIN SMALL LETTER A WITH MACRON + #x00C9 ;; 131:LATIN CAPITAL LETTER E WITH ACUTE + #x0104 ;; 132:LATIN CAPITAL LETTER A WITH OGONEK + #x00D6 ;; 133:LATIN CAPITAL LETTER O WITH DIAERESIS + #x00DC ;; 134:LATIN CAPITAL LETTER U WITH DIAERESIS + #x00E1 ;; 135:LATIN SMALL LETTER A WITH ACUTE + #x0105 ;; 136:LATIN SMALL LETTER A WITH OGONEK + #x010C ;; 137:LATIN CAPITAL LETTER C WITH CARON + #x00E4 ;; 138:LATIN SMALL LETTER A WITH DIAERESIS + #x010D ;; 139:LATIN SMALL LETTER C WITH CARON + #x0106 ;; 140:LATIN CAPITAL LETTER C WITH ACUTE + #x0107 ;; 141:LATIN SMALL LETTER C WITH ACUTE + #x00E9 ;; 142:LATIN SMALL LETTER E WITH ACUTE + #x0179 ;; 143:LATIN CAPITAL LETTER Z WITH ACUTE + #x017A ;; 144:LATIN SMALL LETTER Z WITH ACUTE + #x010E ;; 145:LATIN CAPITAL LETTER D WITH CARON + #x00ED ;; 146:LATIN SMALL LETTER I WITH ACUTE + #x010F ;; 147:LATIN SMALL LETTER D WITH CARON + #x0112 ;; 148:LATIN CAPITAL LETTER E WITH MACRON + #x0113 ;; 149:LATIN SMALL LETTER E WITH MACRON + #x0116 ;; 150:LATIN CAPITAL LETTER E WITH DOT ABOVE + #x00F3 ;; 151:LATIN SMALL LETTER O WITH ACUTE + #x0117 ;; 152:LATIN SMALL LETTER E WITH DOT ABOVE + #x00F4 ;; 153:LATIN SMALL LETTER O WITH CIRCUMFLEX + #x00F6 ;; 154:LATIN SMALL LETTER O WITH DIAERESIS + #x00F5 ;; 155:LATIN SMALL LETTER O WITH TILDE + #x00FA ;; 156:LATIN SMALL LETTER U WITH ACUTE + #x011A ;; 157:LATIN CAPITAL LETTER E WITH CARON + #x011B ;; 158:LATIN SMALL LETTER E WITH CARON + #x00FC ;; 159:LATIN SMALL LETTER U WITH DIAERESIS + #x2020 ;; 160:DAGGER + #x00B0 ;; 161:DEGREE SIGN + #x0118 ;; 162:LATIN CAPITAL LETTER E WITH OGONEK + #x00A3 ;; 163:POUND SIGN + #x00A7 ;; 164:SECTION SIGN + #x2022 ;; 165:BULLET + #x00B6 ;; 166:PILCROW SIGN + #x00DF ;; 167:LATIN SMALL LETTER SHARP S + #x00AE ;; 168:REGISTERED SIGN + #x00A9 ;; 169:COPYRIGHT SIGN + #x2122 ;; 170:TRADE MARK SIGN + #x0119 ;; 171:LATIN SMALL LETTER E WITH OGONEK + #x00A8 ;; 172:DIAERESIS + #x2260 ;; 173:NOT EQUAL TO + #x0123 ;; 174:LATIN SMALL LETTER G WITH CEDILLA + #x012E ;; 175:LATIN CAPITAL LETTER I WITH OGONEK + #x012F ;; 176:LATIN SMALL LETTER I WITH OGONEK + #x012A ;; 177:LATIN CAPITAL LETTER I WITH MACRON + #x2264 ;; 178:LESS-THAN OR EQUAL TO + #x2265 ;; 179:GREATER-THAN OR EQUAL TO + #x012B ;; 180:LATIN SMALL LETTER I WITH MACRON + #x0136 ;; 181:LATIN CAPITAL LETTER K WITH CEDILLA + #x2202 ;; 182:PARTIAL DIFFERENTIAL + #x2211 ;; 183:N-ARY SUMMATION + #x0142 ;; 184:LATIN SMALL LETTER L WITH STROKE + #x013B ;; 185:LATIN CAPITAL LETTER L WITH CEDILLA + #x013C ;; 186:LATIN SMALL LETTER L WITH CEDILLA + #x013D ;; 187:LATIN CAPITAL LETTER L WITH CARON + #x013E ;; 188:LATIN SMALL LETTER L WITH CARON + #x0139 ;; 189:LATIN CAPITAL LETTER L WITH ACUTE + #x013A ;; 190:LATIN SMALL LETTER L WITH ACUTE + #x0145 ;; 191:LATIN CAPITAL LETTER N WITH CEDILLA + #x0146 ;; 192:LATIN SMALL LETTER N WITH CEDILLA + #x0143 ;; 193:LATIN CAPITAL LETTER N WITH ACUTE + #x00AC ;; 194:NOT SIGN + #x221A ;; 195:SQUARE ROOT + #x0144 ;; 196:LATIN SMALL LETTER N WITH ACUTE + #x0147 ;; 197:LATIN CAPITAL LETTER N WITH CARON + #x2206 ;; 198:INCREMENT + #x00AB ;; 199:LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + #x00BB ;; 200:RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + #x2026 ;; 201:HORIZONTAL ELLIPSIS + #x00A0 ;; 202:NO-BREAK SPACE + #x0148 ;; 203:LATIN SMALL LETTER N WITH CARON + #x0150 ;; 204:LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + #x00D5 ;; 205:LATIN CAPITAL LETTER O WITH TILDE + #x0151 ;; 206:LATIN SMALL LETTER O WITH DOUBLE ACUTE + #x014C ;; 207:LATIN CAPITAL LETTER O WITH MACRON + #x2013 ;; 208:EN DASH + #x2014 ;; 209:EM DASH + #x201C ;; 210:LEFT DOUBLE QUOTATION MARK + #x201D ;; 211:RIGHT DOUBLE QUOTATION MARK + #x2018 ;; 212:LEFT SINGLE QUOTATION MARK + #x2019 ;; 213:RIGHT SINGLE QUOTATION MARK + #x00F7 ;; 214:DIVISION SIGN + #x25CA ;; 215:LOZENGE + #x014D ;; 216:LATIN SMALL LETTER O WITH MACRON + #x0154 ;; 217:LATIN CAPITAL LETTER R WITH ACUTE + #x0155 ;; 218:LATIN SMALL LETTER R WITH ACUTE + #x0158 ;; 219:LATIN CAPITAL LETTER R WITH CARON + #x2039 ;; 220:SINGLE LEFT-POINTING ANGLE QUOTATION MARK + #x203A ;; 221:SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + #x0159 ;; 222:LATIN SMALL LETTER R WITH CARON + #x0156 ;; 223:LATIN CAPITAL LETTER R WITH CEDILLA + #x0157 ;; 224:LATIN SMALL LETTER R WITH CEDILLA + #x0160 ;; 225:LATIN CAPITAL LETTER S WITH CARON + #x201A ;; 226:SINGLE LOW-9 QUOTATION MARK + #x201E ;; 227:DOUBLE LOW-9 QUOTATION MARK + #x0161 ;; 228:LATIN SMALL LETTER S WITH CARON + #x015A ;; 229:LATIN CAPITAL LETTER S WITH ACUTE + #x015B ;; 230:LATIN SMALL LETTER S WITH ACUTE + #x00C1 ;; 231:LATIN CAPITAL LETTER A WITH ACUTE + #x0164 ;; 232:LATIN CAPITAL LETTER T WITH CARON + #x0165 ;; 233:LATIN SMALL LETTER T WITH CARON + #x00CD ;; 234:LATIN CAPITAL LETTER I WITH ACUTE + #x017D ;; 235:LATIN CAPITAL LETTER Z WITH CARON + #x017E ;; 236:LATIN SMALL LETTER Z WITH CARON + #x016A ;; 237:LATIN CAPITAL LETTER U WITH MACRON + #x00D3 ;; 238:LATIN CAPITAL LETTER O WITH ACUTE + #x00D4 ;; 239:LATIN CAPITAL LETTER O WITH CIRCUMFLEX + #x016B ;; 240:LATIN SMALL LETTER U WITH MACRON + #x016E ;; 241:LATIN CAPITAL LETTER U WITH RING ABOVE + #x00DA ;; 242:LATIN CAPITAL LETTER U WITH ACUTE + #x016F ;; 243:LATIN SMALL LETTER U WITH RING ABOVE + #x0170 ;; 244:LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + #x0171 ;; 245:LATIN SMALL LETTER U WITH DOUBLE ACUTE + #x0172 ;; 246:LATIN CAPITAL LETTER U WITH OGONEK + #x0173 ;; 247:LATIN SMALL LETTER U WITH OGONEK + #x00DD ;; 248:LATIN CAPITAL LETTER Y WITH ACUTE + #x00FD ;; 249:LATIN SMALL LETTER Y WITH ACUTE + #x0137 ;; 250:LATIN SMALL LETTER K WITH CEDILLA + #x017B ;; 251:LATIN CAPITAL LETTER Z WITH DOT ABOVE + #x0141 ;; 252:LATIN CAPITAL LETTER L WITH STROKE + #x017C ;; 253:LATIN SMALL LETTER Z WITH DOT ABOVE + #x0122 ;; 254:LATIN CAPITAL LETTER G WITH CEDILLA + #x02C7 ;; 255:CARON + ]) + translation-table) + (while (< i 128) + (aset encoding-vector i i) + (setq i (1+ i))) + (while (< i 256) + (aset encoding-vector i + (decode-char 'ucs (aref vec (- i 128)))) + (setq i (1+ i))) + (setq translation-table + (make-translation-table-from-vector encoding-vector)) +;; (define-translation-table 'mac-centraleurroman-decoder translation-table) + (define-translation-table 'mac-centraleurroman-encoder + (char-table-extra-slot translation-table 0))) + +(let + ((encoding-vector (make-vector 256 nil)) + (i 0) + (vec ;; mac-cyrillic (128..255) -> UCS mapping + [ #x0410 ;; 128:CYRILLIC CAPITAL LETTER A + #x0411 ;; 129:CYRILLIC CAPITAL LETTER BE + #x0412 ;; 130:CYRILLIC CAPITAL LETTER VE + #x0413 ;; 131:CYRILLIC CAPITAL LETTER GHE + #x0414 ;; 132:CYRILLIC CAPITAL LETTER DE + #x0415 ;; 133:CYRILLIC CAPITAL LETTER IE + #x0416 ;; 134:CYRILLIC CAPITAL LETTER ZHE + #x0417 ;; 135:CYRILLIC CAPITAL LETTER ZE + #x0418 ;; 136:CYRILLIC CAPITAL LETTER I + #x0419 ;; 137:CYRILLIC CAPITAL LETTER SHORT I + #x041A ;; 138:CYRILLIC CAPITAL LETTER KA + #x041B ;; 139:CYRILLIC CAPITAL LETTER EL + #x041C ;; 140:CYRILLIC CAPITAL LETTER EM + #x041D ;; 141:CYRILLIC CAPITAL LETTER EN + #x041E ;; 142:CYRILLIC CAPITAL LETTER O + #x041F ;; 143:CYRILLIC CAPITAL LETTER PE + #x0420 ;; 144:CYRILLIC CAPITAL LETTER ER + #x0421 ;; 145:CYRILLIC CAPITAL LETTER ES + #x0422 ;; 146:CYRILLIC CAPITAL LETTER TE + #x0423 ;; 147:CYRILLIC CAPITAL LETTER U + #x0424 ;; 148:CYRILLIC CAPITAL LETTER EF + #x0425 ;; 149:CYRILLIC CAPITAL LETTER HA + #x0426 ;; 150:CYRILLIC CAPITAL LETTER TSE + #x0427 ;; 151:CYRILLIC CAPITAL LETTER CHE + #x0428 ;; 152:CYRILLIC CAPITAL LETTER SHA + #x0429 ;; 153:CYRILLIC CAPITAL LETTER SHCHA + #x042A ;; 154:CYRILLIC CAPITAL LETTER HARD SIGN + #x042B ;; 155:CYRILLIC CAPITAL LETTER YERU + #x042C ;; 156:CYRILLIC CAPITAL LETTER SOFT SIGN + #x042D ;; 157:CYRILLIC CAPITAL LETTER E + #x042E ;; 158:CYRILLIC CAPITAL LETTER YU + #x042F ;; 159:CYRILLIC CAPITAL LETTER YA + #x2020 ;; 160:DAGGER + #x00B0 ;; 161:DEGREE SIGN + #x0490 ;; 162:CYRILLIC CAPITAL LETTER GHE WITH UPTURN + #x00A3 ;; 163:POUND SIGN + #x00A7 ;; 164:SECTION SIGN + #x2022 ;; 165:BULLET + #x00B6 ;; 166:PILCROW SIGN + #x0406 ;; 167:CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + #x00AE ;; 168:REGISTERED SIGN + #x00A9 ;; 169:COPYRIGHT SIGN + #x2122 ;; 170:TRADE MARK SIGN + #x0402 ;; 171:CYRILLIC CAPITAL LETTER DJE + #x0452 ;; 172:CYRILLIC SMALL LETTER DJE + #x2260 ;; 173:NOT EQUAL TO + #x0403 ;; 174:CYRILLIC CAPITAL LETTER GJE + #x0453 ;; 175:CYRILLIC SMALL LETTER GJE + #x221E ;; 176:INFINITY + #x00B1 ;; 177:PLUS-MINUS SIGN + #x2264 ;; 178:LESS-THAN OR EQUAL TO + #x2265 ;; 179:GREATER-THAN OR EQUAL TO + #x0456 ;; 180:CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + #x00B5 ;; 181:MICRO SIGN + #x0491 ;; 182:CYRILLIC SMALL LETTER GHE WITH UPTURN + #x0408 ;; 183:CYRILLIC CAPITAL LETTER JE + #x0404 ;; 184:CYRILLIC CAPITAL LETTER UKRAINIAN IE + #x0454 ;; 185:CYRILLIC SMALL LETTER UKRAINIAN IE + #x0407 ;; 186:CYRILLIC CAPITAL LETTER YI + #x0457 ;; 187:CYRILLIC SMALL LETTER YI + #x0409 ;; 188:CYRILLIC CAPITAL LETTER LJE + #x0459 ;; 189:CYRILLIC SMALL LETTER LJE + #x040A ;; 190:CYRILLIC CAPITAL LETTER NJE + #x045A ;; 191:CYRILLIC SMALL LETTER NJE + #x0458 ;; 192:CYRILLIC SMALL LETTER JE + #x0405 ;; 193:CYRILLIC CAPITAL LETTER DZE + #x00AC ;; 194:NOT SIGN + #x221A ;; 195:SQUARE ROOT + #x0192 ;; 196:LATIN SMALL LETTER F WITH HOOK + #x2248 ;; 197:ALMOST EQUAL TO + #x2206 ;; 198:INCREMENT + #x00AB ;; 199:LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + #x00BB ;; 200:RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + #x2026 ;; 201:HORIZONTAL ELLIPSIS + #x00A0 ;; 202:NO-BREAK SPACE + #x040B ;; 203:CYRILLIC CAPITAL LETTER TSHE + #x045B ;; 204:CYRILLIC SMALL LETTER TSHE + #x040C ;; 205:CYRILLIC CAPITAL LETTER KJE + #x045C ;; 206:CYRILLIC SMALL LETTER KJE + #x0455 ;; 207:CYRILLIC SMALL LETTER DZE + #x2013 ;; 208:EN DASH + #x2014 ;; 209:EM DASH + #x201C ;; 210:LEFT DOUBLE QUOTATION MARK + #x201D ;; 211:RIGHT DOUBLE QUOTATION MARK + #x2018 ;; 212:LEFT SINGLE QUOTATION MARK + #x2019 ;; 213:RIGHT SINGLE QUOTATION MARK + #x00F7 ;; 214:DIVISION SIGN + #x201E ;; 215:DOUBLE LOW-9 QUOTATION MARK + #x040E ;; 216:CYRILLIC CAPITAL LETTER SHORT U + #x045E ;; 217:CYRILLIC SMALL LETTER SHORT U + #x040F ;; 218:CYRILLIC CAPITAL LETTER DZHE + #x045F ;; 219:CYRILLIC SMALL LETTER DZHE + #x2116 ;; 220:NUMERO SIGN + #x0401 ;; 221:CYRILLIC CAPITAL LETTER IO + #x0451 ;; 222:CYRILLIC SMALL LETTER IO + #x044F ;; 223:CYRILLIC SMALL LETTER YA + #x0430 ;; 224:CYRILLIC SMALL LETTER A + #x0431 ;; 225:CYRILLIC SMALL LETTER BE + #x0432 ;; 226:CYRILLIC SMALL LETTER VE + #x0433 ;; 227:CYRILLIC SMALL LETTER GHE + #x0434 ;; 228:CYRILLIC SMALL LETTER DE + #x0435 ;; 229:CYRILLIC SMALL LETTER IE + #x0436 ;; 230:CYRILLIC SMALL LETTER ZHE + #x0437 ;; 231:CYRILLIC SMALL LETTER ZE + #x0438 ;; 232:CYRILLIC SMALL LETTER I + #x0439 ;; 233:CYRILLIC SMALL LETTER SHORT I + #x043A ;; 234:CYRILLIC SMALL LETTER KA + #x043B ;; 235:CYRILLIC SMALL LETTER EL + #x043C ;; 236:CYRILLIC SMALL LETTER EM + #x043D ;; 237:CYRILLIC SMALL LETTER EN + #x043E ;; 238:CYRILLIC SMALL LETTER O + #x043F ;; 239:CYRILLIC SMALL LETTER PE + #x0440 ;; 240:CYRILLIC SMALL LETTER ER + #x0441 ;; 241:CYRILLIC SMALL LETTER ES + #x0442 ;; 242:CYRILLIC SMALL LETTER TE + #x0443 ;; 243:CYRILLIC SMALL LETTER U + #x0444 ;; 244:CYRILLIC SMALL LETTER EF + #x0445 ;; 245:CYRILLIC SMALL LETTER HA + #x0446 ;; 246:CYRILLIC SMALL LETTER TSE + #x0447 ;; 247:CYRILLIC SMALL LETTER CHE + #x0448 ;; 248:CYRILLIC SMALL LETTER SHA + #x0449 ;; 249:CYRILLIC SMALL LETTER SHCHA + #x044A ;; 250:CYRILLIC SMALL LETTER HARD SIGN + #x044B ;; 251:CYRILLIC SMALL LETTER YERU + #x044C ;; 252:CYRILLIC SMALL LETTER SOFT SIGN + #x044D ;; 253:CYRILLIC SMALL LETTER E + #x044E ;; 254:CYRILLIC SMALL LETTER YU + #x20AC ;; 255:EURO SIGN + ]) + translation-table) + (while (< i 128) + (aset encoding-vector i i) + (setq i (1+ i))) + (while (< i 256) + (aset encoding-vector i + (decode-char 'ucs (aref vec (- i 128)))) + (setq i (1+ i))) + (setq translation-table + (make-translation-table-from-vector encoding-vector)) +;; (define-translation-table 'mac-cyrillic-decoder translation-table) + (define-translation-table 'mac-cyrillic-encoder + (char-table-extra-slot translation-table 0))) + +(defvar mac-font-encoder-list + '(("mac-roman" mac-roman-encoder + ccl-encode-mac-roman-font "%s") + ("mac-centraleurroman" mac-centraleurroman-encoder + ccl-encode-mac-centraleurroman-font "%s ce") + ("mac-cyrillic" mac-cyrillic-encoder + ccl-encode-mac-cyrillic-font "%s cy"))) + +(let ((encoder-list + (mapcar (lambda (lst) (nth 1 lst)) mac-font-encoder-list)) + (charset-list + '(latin-iso8859-2 + latin-iso8859-3 latin-iso8859-4 + cyrillic-iso8859-5 greek-iso8859-7 hebrew-iso8859-8 + latin-iso8859-9 latin-iso8859-14 latin-iso8859-15))) + (dolist (encoder encoder-list) + (let ((table (get encoder 'translation-table))) + (dolist (charset charset-list) + (dotimes (i 96) + (let* ((c (make-char charset (+ i 32))) + (mu (aref ucs-mule-to-mule-unicode c)) + (mac-encoded (and mu (aref table mu)))) + (if mac-encoded + (aset table c mac-encoded)))))))) + +(define-ccl-program ccl-encode-mac-centraleurroman-font + `(0 + (if (r0 != ,(charset-id 'ascii)) + (if (r0 <= ?\x8f) + (translate-character mac-centraleurroman-encoder r0 r1) + ((r1 <<= 7) + (r1 |= r2) + (translate-character mac-centraleurroman-encoder r0 r1))))) + "CCL program for Mac Central European Roman font") + +(define-ccl-program ccl-encode-mac-cyrillic-font + `(0 + (if (r0 != ,(charset-id 'ascii)) + (if (r0 <= ?\x8f) + (translate-character mac-cyrillic-encoder r0 r1) + ((r1 <<= 7) + (r1 |= r2) + (translate-character mac-cyrillic-encoder r0 r1))))) + "CCL program for Mac Cyrillic font") + + +(setq font-ccl-encoder-alist + (nconc + (mapcar (lambda (lst) (cons (nth 0 lst) (nth 2 lst))) + mac-font-encoder-list) + font-ccl-encoder-alist)) + +(defun fontset-add-mac-fonts (fontset &optional base-family) + (if base-family + (setq base-family (downcase base-family)) + (let ((ascii-font + (downcase (x-resolve-font-name + (fontset-font fontset (charset-id 'ascii)))))) + (setq base-family (aref (x-decompose-font-name ascii-font) + xlfd-regexp-family-subnum)))) +;; (if (not (string-match "^fontset-" fontset)) +;; (setq fontset +;; (concat "fontset-" (aref (x-decompose-font-name fontset) +;; xlfd-regexp-encoding-subnum)))) + (dolist + (font-encoder + (nreverse + (mapcar (lambda (lst) + (cons (cons (format (nth 3 lst) base-family) (nth 0 lst)) + (nth 1 lst))) + mac-font-encoder-list))) + (let ((font (car font-encoder)) + (encoder (cdr font-encoder))) + (map-char-table + (lambda (key val) + (or (null val) + (generic-char-p key) + (memq (char-charset key) + '(ascii eight-bit-control eight-bit-graphic)) + (set-fontset-font fontset key font))) + (get encoder 'translation-table))))) + +(defun create-fontset-from-mac-roman-font (font &optional resolved-font + fontset-name) + "Create a fontset from a Mac roman font FONT. + +Optional 1st arg RESOLVED-FONT is a resolved name of FONT. If +omitted, `x-resolve-font-name' is called to get the resolved name. At +this time, if FONT is not available, error is signaled. + +Optional 2nd arg FONTSET-NAME is a string to be used in +`' fields of a new fontset name. If it is omitted, +an appropriate name is generated automatically. + +It returns a name of the created fontset." + (let ((fontset + (create-fontset-from-ascii-font font resolved-font fontset-name))) + (fontset-add-mac-fonts fontset) + fontset)) + +;; Setup the default fontset. +(setup-default-fontset) + +;; Create a fontset that uses mac-roman font. With this fontset, +;; characters decoded from mac-roman encoding (ascii, latin-iso8859-1, +;; and mule-unicode-xxxx-yyyy) are displayed by a mac-roman font. +(create-fontset-from-fontset-spec + "-etl-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-mac, +ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman") +(fontset-add-mac-fonts "fontset-mac") + +;; Create fontset specified in X resources "Fontset-N" (N is 0, 1, ...). +(create-fontset-from-x-resource) + +;; Try to create a fontset from a font specification which comes +;; from initial-frame-alist, default-frame-alist, or X resource. +;; A font specification in command line argument (i.e. -fn XXXX) +;; should be already in default-frame-alist as a `font' +;; parameter. However, any font specifications in site-start +;; library, user's init file (.emacs), and default.el are not +;; yet handled here. + +(let ((font (or (cdr (assq 'font initial-frame-alist)) + (cdr (assq 'font default-frame-alist)) + (x-get-resource "font" "Font"))) + xlfd-fields resolved-name) + (if (and font + (not (query-fontset font)) + (setq resolved-name (x-resolve-font-name font)) + (setq xlfd-fields (x-decompose-font-name font))) + (if (string= "fontset" (aref xlfd-fields xlfd-regexp-registry-subnum)) + (new-fontset font (x-complement-fontset-spec xlfd-fields nil)) + ;; Create a fontset from FONT. The fontset name is + ;; generated from FONT. + (create-fontset-from-ascii-font font resolved-name "startup")))) + +;; Apply a geometry resource to the initial frame. Put it at the end +;; of the alist, so that anything specified on the command line takes +;; precedence. +(let* ((res-geometry (x-get-resource "geometry" "Geometry")) + parsed) + (if res-geometry + (progn + (setq parsed (x-parse-geometry res-geometry)) + ;; If the resource specifies a position, + ;; call the position and size "user-specified". + (if (or (assq 'top parsed) (assq 'left parsed)) + (setq parsed (cons '(user-position . t) + (cons '(user-size . t) parsed)))) + ;; All geometry parms apply to the initial frame. + (setq initial-frame-alist (append initial-frame-alist parsed)) + ;; The size parms apply to all frames. + (if (assq 'height parsed) + (setq default-frame-alist + (cons (cons 'height (cdr (assq 'height parsed))) + default-frame-alist))) + (if (assq 'width parsed) + (setq default-frame-alist + (cons (cons 'width (cdr (assq 'width parsed))) + default-frame-alist)))))) + +;; Check the reverseVideo resource. +(let ((case-fold-search t)) + (let ((rv (x-get-resource "reverseVideo" "ReverseVideo"))) + (if (and rv + (string-match "^\\(true\\|yes\\|on\\)$" rv)) + (setq default-frame-alist + (cons '(reverse . t) default-frame-alist))))) + +(defun x-win-suspend-error () + (error "Suspending an Emacs running under Mac makes no sense")) +(add-hook 'suspend-hook 'x-win-suspend-error) + +;; Don't show the frame name; that's redundant. +(setq-default mode-line-frame-identification " ") + +;; Turn on support for mouse wheels. +(mouse-wheel-mode 1) + +(defun mac-drag-n-drop (event) + "Edit the files listed in the drag-n-drop event.\n\ +Switch to a buffer editing the last file dropped." + (interactive "e") + (save-excursion + ;; Make sure the drop target has positive co-ords + ;; before setting the selected frame - otherwise it + ;; won't work. + (let* ((window (posn-window (event-start event))) + (coords (posn-x-y (event-start event))) + (x (car coords)) + (y (cdr coords))) + (if (and (> x 0) (> y 0)) + (set-frame-selected-window nil window)) + (mapcar + '(lambda (file) + (find-file + (decode-coding-string + file + (or file-name-coding-system + default-file-name-coding-system)))) + (car (cdr (cdr event))))) + (raise-frame) + (recenter))) + +(global-set-key [drag-n-drop] 'mac-drag-n-drop) + +;; By checking whether the variable mac-ready-for-drag-n-drop has been +;; defined, the event loop in macterm.c can be informed that it can +;; now receive Finder drag and drop events. Files dropped onto the +;; Emacs application icon can only be processed when the initial frame +;; has been created: this is where the files should be opened. +(add-hook 'after-init-hook + '(lambda () + (defvar mac-ready-for-drag-n-drop t))) + +;;;; Scroll bars + +;; for debugging +;; (defun mac-handle-scroll-bar-event (event) (interactive "e") (princ event)) + +;;(global-set-key [vertical-scroll-bar mouse-1] 'mac-handle-scroll-bar-event) + +(global-set-key + [vertical-scroll-bar down-mouse-1] + 'mac-handle-scroll-bar-event) + +(global-unset-key [vertical-scroll-bar drag-mouse-1]) +(global-unset-key [vertical-scroll-bar mouse-1]) + +(defun mac-handle-scroll-bar-event (event) + "Handle scroll bar EVENT to emulate Mac Toolbox style scrolling." + (interactive "e") + (let* ((position (event-start event)) + (window (nth 0 position)) + (bar-part (nth 4 position))) + (select-window window) + (cond + ((eq bar-part 'up) + (goto-char (window-start window)) + (mac-scroll-down-line)) + ((eq bar-part 'above-handle) + (mac-scroll-down)) + ((eq bar-part 'handle) + (scroll-bar-drag event)) + ((eq bar-part 'below-handle) + (mac-scroll-up)) + ((eq bar-part 'down) + (goto-char (window-start window)) + (mac-scroll-up-line))))) + +(defun mac-scroll-ignore-events () + ;; Ignore confusing non-mouse events + (while (not (memq (car-safe (read-event)) + '(mouse-1 double-mouse-1 triple-mouse-1))) nil)) + +(defun mac-scroll-down () + (track-mouse + (mac-scroll-ignore-events) + (scroll-down))) + +(defun mac-scroll-down-line () + (track-mouse + (mac-scroll-ignore-events) + (scroll-down 1))) + +(defun mac-scroll-up () + (track-mouse + (mac-scroll-ignore-events) + (scroll-up))) + +(defun mac-scroll-up-line () + (track-mouse + (mac-scroll-ignore-events) + (scroll-up 1))) + + +;;;; Others + +(unless (eq system-type 'darwin) + ;; This variable specifies the Unix program to call (as a process) to + ;; deteremine the amount of free space on a file system (defaults to + ;; df). If it is not set to nil, ls-lisp will not work correctly + ;; unless an external application df is implemented on the Mac. + (setq directory-free-space-program nil) + + ;; Set this so that Emacs calls subprocesses with "sh" as shell to + ;; expand filenames Note no subprocess for the shell is actually + ;; started (see run_mac_command in sysdep.c). + (setq shell-file-name "sh")) + +;; X Window emulation in macterm.c is not complete enough to start a +;; frame without a minibuffer properly. Call this to tell ediff +;; library to use a single frame. +; (ediff-toggle-multiframe) + +(if (eq system-type 'darwin) + ;; On Darwin filenames are encoded in UTF-8 + (setq file-name-coding-system 'utf-8) + ;; To display filenames in Chinese or Japanese, replace mac-roman with + ;; big5 or sjis + (setq file-name-coding-system 'mac-roman)) + +;; If Emacs is started from the Finder, change the default directory +;; to the user's home directory. +(if (string= default-directory "/") + (cd "~")) + +;; Tell Emacs to use pipes instead of pty's for processes because the +;; latter sometimes lose characters. Pty support is compiled in since +;; ange-ftp will not work without it. +(setq process-connection-type nil) + +;; Assume that fonts are always scalable on the Mac. This sometimes +;; results in characters with jagged edges. However, without it, +;; fonts with both truetype and bitmap representations but no italic +;; or bold bitmap versions will not display these variants correctly. +(setq scalable-fonts-allowed t) + +;; (prefer-coding-system 'mac-roman) + ;;; arch-tag: 71dfcd14-cde8-4d66-b05c-85ec94fb23a6 ;;; mac-win.el ends here -- cgit v1.2.3