Mercurial > emacs
comparison lisp/term/ns-win.el @ 96748:92f7bbffcb45
Require CL; fix up comment style; reindent.
(ns-define-service): Use subst-char-in-string. Avoid `eval'.
(ns-save-preferences): Use `case'.
(ns-initialize-window-system): Use `dolist'.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Wed, 16 Jul 2008 20:06:14 +0000 |
parents | e2bc3521cdab |
children | 18b856a0216f |
comparison
equal
deleted
inserted
replaced
96747:ebf3bd5f0017 | 96748:92f7bbffcb45 |
---|---|
37 | 37 |
38 | 38 |
39 (if (not (featurep 'ns-windowing)) | 39 (if (not (featurep 'ns-windowing)) |
40 (error "%s: Loading ns-win.el but not compiled for *Step/OS X" | 40 (error "%s: Loading ns-win.el but not compiled for *Step/OS X" |
41 (invocation-name))) | 41 (invocation-name))) |
42 | |
43 (eval-when-compile (require 'cl)) | |
42 | 44 |
43 ;; Documentation-purposes only: actually loaded in loadup.el | 45 ;; Documentation-purposes only: actually loaded in loadup.el |
44 (require 'frame) | 46 (require 'frame) |
45 (require 'mouse) | 47 (require 'mouse) |
46 (require 'faces) | 48 (require 'faces) |
47 (require 'easymenu) | 49 (require 'easymenu) |
48 (require 'menu-bar) | 50 (require 'menu-bar) |
49 (require 'fontset) | 51 (require 'fontset) |
50 | 52 |
51 ; Not needed? | 53 ;; Not needed? |
52 ;(require 'ispell) | 54 ;;(require 'ispell) |
53 | 55 |
54 ;; nsterm.m | 56 ;; nsterm.m |
55 (defvar ns-version-string) | 57 (defvar ns-version-string) |
56 (defvar ns-expand-space) | 58 (defvar ns-expand-space) |
57 (defvar ns-cursor-blink-rate) | 59 (defvar ns-cursor-blink-rate) |
59 | 61 |
60 (declare-function ns-server-vendor "nsfns.m" (&optional display)) | 62 (declare-function ns-server-vendor "nsfns.m" (&optional display)) |
61 (declare-function ns-server-version "nsfns.m" (&optional display)) | 63 (declare-function ns-server-version "nsfns.m" (&optional display)) |
62 | 64 |
63 (defun ns-submit-bug-report () | 65 (defun ns-submit-bug-report () |
64 "Submit via mail a bug report on Emacs 23.0.0 for GNUstep / OS X." | 66 "Submit via mail a bug report on Emacs 23.0.0 for GNUstep / OS X." |
65 (interactive) | 67 (interactive) |
66 (let ((frame-parameters (frame-parameters)) | 68 (let ((frame-parameters (frame-parameters)) |
67 (server-vendor (ns-server-vendor)) | 69 (server-vendor (ns-server-vendor)) |
68 (server-version (ns-server-version))) | 70 (server-version (ns-server-version))) |
69 (reporter-submit-bug-report | 71 (reporter-submit-bug-report |
70 "Adrian Robert <Adrian.B.Robert@gmail.com>" | 72 "Adrian Robert <Adrian.B.Robert@gmail.com>" |
71 ;;"Christophe de Dinechin <descubes@earthlink.net>" | 73 ;;"Christophe de Dinechin <descubes@earthlink.net>" |
72 ;;"Scott Bender <emacs@harmony-ds.com>" | 74 ;;"Scott Bender <emacs@harmony-ds.com>" |
73 ;;"Christian Limpach <chris@nice.ch>" | 75 ;;"Christian Limpach <chris@nice.ch>" |
74 ;;"Carl Edman <cedman@princeton.edu>" | 76 ;;"Carl Edman <cedman@princeton.edu>" |
75 (concat "Emacs for GNUstep / OS X " ns-version-string) | 77 (concat "Emacs for GNUstep / OS X " ns-version-string) |
76 '(ns-expand-space ns-cursor-blink-rate ns-alternate-modifier | 78 '(ns-expand-space ns-cursor-blink-rate ns-alternate-modifier |
77 data-directory frame-parameters window-system window-system-version | 79 data-directory frame-parameters window-system window-system-version |
78 server-vendor server-version system-configuration-options)))) | 80 server-vendor server-version system-configuration-options)))) |
79 | 81 |
80 | 82 |
81 ;;;; Command line argument handling. | 83 ;;;; Command line argument handling. |
82 | 84 |
83 (defvar ns-invocation-args nil) | 85 (defvar ns-invocation-args nil) |
195 Returns an alist of the form ((top . TOP), (left . LEFT) ... ). | 197 Returns an alist of the form ((top . TOP), (left . LEFT) ... ). |
196 The properties returned may include `top', `left', `height', and `width'." | 198 The properties returned may include `top', `left', `height', and `width'." |
197 (if (string-match "\\([0-9]+\\)\\( \\([0-9]+\\)\\( \\([0-9]+\\)\\( \\([0-9]+\\) ?\\)?\\)?\\)?" | 199 (if (string-match "\\([0-9]+\\)\\( \\([0-9]+\\)\\( \\([0-9]+\\)\\( \\([0-9]+\\) ?\\)?\\)?\\)?" |
198 geom) | 200 geom) |
199 (apply 'append | 201 (apply 'append |
200 (list | 202 (list |
201 (list (cons 'top (string-to-number (match-string 1 geom)))) | 203 (list (cons 'top (string-to-number (match-string 1 geom)))) |
202 (if (match-string 3 geom) | 204 (if (match-string 3 geom) |
203 (list (cons 'left (string-to-number (match-string 3 geom))))) | 205 (list (cons 'left (string-to-number (match-string 3 geom))))) |
204 (if (match-string 5 geom) | 206 (if (match-string 5 geom) |
205 (list (cons 'height (string-to-number (match-string 5 geom))))) | 207 (list (cons 'height (string-to-number (match-string 5 geom))))) |
206 (if (match-string 7 geom) | 208 (if (match-string 7 geom) |
207 (list (cons 'width (string-to-number (match-string 7 geom))))))) | 209 (list (cons 'width (string-to-number (match-string 7 geom))))))) |
208 '())) | 210 '())) |
209 | 211 |
210 | 212 |
211 | 213 |
212 ;;;; Keyboard mapping. | 214 ;;;; Keyboard mapping. |
281 (define-key global-map [?\s-x] 'kill-region) | 283 (define-key global-map [?\s-x] 'kill-region) |
282 (define-key global-map [?\s-y] 'ns-paste-secondary) | 284 (define-key global-map [?\s-y] 'ns-paste-secondary) |
283 (define-key global-map [?\s-z] 'undo) | 285 (define-key global-map [?\s-z] 'undo) |
284 (define-key global-map [?\s-|] 'shell-command-on-region) | 286 (define-key global-map [?\s-|] 'shell-command-on-region) |
285 (define-key global-map [s-kp-bar] 'shell-command-on-region) | 287 (define-key global-map [s-kp-bar] 'shell-command-on-region) |
286 ; (as in Terminal.app) | 288 ;; (as in Terminal.app) |
287 (define-key global-map [s-right] 'ns-next-frame) | 289 (define-key global-map [s-right] 'ns-next-frame) |
288 (define-key global-map [s-left] 'ns-prev-frame) | 290 (define-key global-map [s-left] 'ns-prev-frame) |
289 | 291 |
290 (define-key global-map [home] 'beginning-of-buffer) | 292 (define-key global-map [home] 'beginning-of-buffer) |
291 (define-key global-map [end] 'end-of-buffer) | 293 (define-key global-map [end] 'end-of-buffer) |
296 | 298 |
297 | 299 |
298 ;; Special NeXTSTEP generated events are converted to function keys. Here | 300 ;; Special NeXTSTEP generated events are converted to function keys. Here |
299 ;; are the bindings for them. | 301 ;; are the bindings for them. |
300 (define-key global-map [ns-power-off] | 302 (define-key global-map [ns-power-off] |
301 '(lambda () (interactive) (save-buffers-kill-emacs t))) | 303 (lambda () (interactive) (save-buffers-kill-emacs t))) |
302 (define-key global-map [ns-open-file] 'ns-find-file) | 304 (define-key global-map [ns-open-file] 'ns-find-file) |
303 (define-key global-map [ns-open-temp-file] [ns-open-file]) | 305 (define-key global-map [ns-open-temp-file] [ns-open-file]) |
304 (define-key global-map [ns-drag-file] 'ns-insert-file) | 306 (define-key global-map [ns-drag-file] 'ns-insert-file) |
305 (define-key global-map [ns-drag-color] 'ns-set-foreground-at-mouse) | 307 (define-key global-map [ns-drag-color] 'ns-set-foreground-at-mouse) |
306 (define-key global-map [S-ns-drag-color] 'ns-set-background-at-mouse) | 308 (define-key global-map [S-ns-drag-color] 'ns-set-background-at-mouse) |
340 :init-value nil | 342 :init-value nil |
341 :global t | 343 :global t |
342 :group 'ns | 344 :group 'ns |
343 (if ns-extended-platform-support-mode | 345 (if ns-extended-platform-support-mode |
344 (progn | 346 (progn |
345 (global-set-key [M-up] 'down-one) | 347 (global-set-key [M-up] 'down-one) |
346 (global-set-key [M-down] 'up-one) | 348 (global-set-key [M-down] 'up-one) |
347 ; These conflict w/word-left, word-right | 349 ;; These conflict w/word-left, word-right. |
348 ;;(global-set-key [M-left] 'left-one) | 350 ;;(global-set-key [M-left] 'left-one) |
349 ;;(global-set-key [M-right] 'right-one) | 351 ;;(global-set-key [M-right] 'right-one) |
350 | 352 |
351 (setq scroll-preserve-screen-position t) | 353 (setq scroll-preserve-screen-position t) |
352 (transient-mark-mode 1) | 354 (transient-mark-mode 1) |
353 | 355 |
354 ;; Change file menu to simplify and add a couple of NS-specific items | 356 ;; Change file menu to simplify and add a couple of NS-specific items |
355 (easy-menu-remove-item global-map '("menu-bar") 'file) | 357 (easy-menu-remove-item global-map '("menu-bar") 'file) |
356 (easy-menu-add-item global-map '(menu-bar) | 358 (easy-menu-add-item global-map '(menu-bar) |
357 (cons "File" menu-bar-ns-file-menu) 'edit)) | 359 (cons "File" menu-bar-ns-file-menu) 'edit)) |
358 (progn | 360 (progn |
359 ; undo everything above | 361 ;; Undo everything above. |
360 (global-unset-key [M-up]) | 362 (global-unset-key [M-up]) |
361 (global-unset-key [M-down]) | 363 (global-unset-key [M-down]) |
362 (setq scroll-preserve-screen-position nil) | 364 (setq scroll-preserve-screen-position nil) |
363 (transient-mark-mode 0) | 365 (transient-mark-mode 0) |
364 (easy-menu-remove-item global-map '("menu-bar") 'file) | 366 (easy-menu-remove-item global-map '("menu-bar") 'file) |
365 (easy-menu-add-item global-map '(menu-bar) | 367 (easy-menu-add-item global-map '(menu-bar) |
366 (cons "File" menu-bar-file-menu) 'edit)))) | 368 (cons "File" menu-bar-file-menu) 'edit)))) |
367 | 369 |
368 | 370 |
369 (defun x-setup-function-keys (frame) | 371 (defun x-setup-function-keys (frame) |
370 "Set up function Keys for NS for given FRAME." | 372 "Set up function Keys for NS for given FRAME." |
371 (unless (terminal-parameter frame 'x-setup-function-keys) | 373 (unless (terminal-parameter frame 'x-setup-function-keys) |
372 (with-selected-frame frame | 374 (with-selected-frame frame |
373 (setq interprogram-cut-function 'ns-select-text | 375 (setq interprogram-cut-function 'ns-select-text |
374 interprogram-paste-function 'ns-pasteboard-value) | 376 interprogram-paste-function 'ns-pasteboard-value) |
375 ;;; (let ((map (copy-keymap x-alternatives-map))) | 377 ;; (let ((map (copy-keymap x-alternatives-map))) |
376 ;;; (set-keymap-parent map (keymap-parent local-function-key-map)) | 378 ;; (set-keymap-parent map (keymap-parent local-function-key-map)) |
377 ;;; (set-keymap-parent local-function-key-map map)) | 379 ;; (set-keymap-parent local-function-key-map map)) |
378 (setq system-key-alist | 380 (setq system-key-alist |
379 (list | 381 (list |
380 (cons (logior (lsh 0 16) 1) 'ns-power-off) | 382 (cons (logior (lsh 0 16) 1) 'ns-power-off) |
381 (cons (logior (lsh 0 16) 2) 'ns-open-file) | 383 (cons (logior (lsh 0 16) 2) 'ns-open-file) |
382 (cons (logior (lsh 0 16) 3) 'ns-open-temp-file) | 384 (cons (logior (lsh 0 16) 3) 'ns-open-temp-file) |
383 (cons (logior (lsh 0 16) 4) 'ns-drag-file) | 385 (cons (logior (lsh 0 16) 4) 'ns-drag-file) |
384 (cons (logior (lsh 0 16) 5) 'ns-drag-color) | 386 (cons (logior (lsh 0 16) 5) 'ns-drag-color) |
385 (cons (logior (lsh 0 16) 6) 'ns-drag-text) | 387 (cons (logior (lsh 0 16) 6) 'ns-drag-text) |
386 (cons (logior (lsh 0 16) 7) 'ns-change-font) | 388 (cons (logior (lsh 0 16) 7) 'ns-change-font) |
387 (cons (logior (lsh 0 16) 8) 'ns-open-file-line) | 389 (cons (logior (lsh 0 16) 8) 'ns-open-file-line) |
388 (cons (logior (lsh 0 16) 9) 'ns-insert-working-text) | 390 (cons (logior (lsh 0 16) 9) 'ns-insert-working-text) |
389 (cons (logior (lsh 0 16) 10) 'ns-delete-working-text) | 391 (cons (logior (lsh 0 16) 10) 'ns-delete-working-text) |
390 (cons (logior (lsh 0 16) 11) 'ns-spi-service-call) | 392 (cons (logior (lsh 0 16) 11) 'ns-spi-service-call) |
391 (cons (logior (lsh 1 16) 32) 'f1) | 393 (cons (logior (lsh 1 16) 32) 'f1) |
392 (cons (logior (lsh 1 16) 33) 'f2) | 394 (cons (logior (lsh 1 16) 33) 'f2) |
393 (cons (logior (lsh 1 16) 34) 'f3) | 395 (cons (logior (lsh 1 16) 34) 'f3) |
394 (cons (logior (lsh 1 16) 35) 'f4) | 396 (cons (logior (lsh 1 16) 35) 'f4) |
395 (cons (logior (lsh 1 16) 36) 'f5) | 397 (cons (logior (lsh 1 16) 36) 'f5) |
396 (cons (logior (lsh 1 16) 37) 'f6) | 398 (cons (logior (lsh 1 16) 37) 'f6) |
397 (cons (logior (lsh 1 16) 38) 'f7) | 399 (cons (logior (lsh 1 16) 38) 'f7) |
398 (cons (logior (lsh 1 16) 39) 'f8) | 400 (cons (logior (lsh 1 16) 39) 'f8) |
399 (cons (logior (lsh 1 16) 40) 'f9) | 401 (cons (logior (lsh 1 16) 40) 'f9) |
400 (cons (logior (lsh 1 16) 41) 'f10) | 402 (cons (logior (lsh 1 16) 41) 'f10) |
401 (cons (logior (lsh 1 16) 42) 'f11) | 403 (cons (logior (lsh 1 16) 42) 'f11) |
402 (cons (logior (lsh 1 16) 43) 'f12) | 404 (cons (logior (lsh 1 16) 43) 'f12) |
403 (cons (logior (lsh 1 16) 44) 'kp-insert) | 405 (cons (logior (lsh 1 16) 44) 'kp-insert) |
404 (cons (logior (lsh 1 16) 45) 'kp-delete) | 406 (cons (logior (lsh 1 16) 45) 'kp-delete) |
405 (cons (logior (lsh 1 16) 46) 'kp-home) | 407 (cons (logior (lsh 1 16) 46) 'kp-home) |
406 (cons (logior (lsh 1 16) 47) 'kp-end) | 408 (cons (logior (lsh 1 16) 47) 'kp-end) |
407 (cons (logior (lsh 1 16) 48) 'kp-prior) | 409 (cons (logior (lsh 1 16) 48) 'kp-prior) |
408 (cons (logior (lsh 1 16) 49) 'kp-next) | 410 (cons (logior (lsh 1 16) 49) 'kp-next) |
409 (cons (logior (lsh 1 16) 50) 'print-screen) | 411 (cons (logior (lsh 1 16) 50) 'print-screen) |
410 (cons (logior (lsh 1 16) 51) 'scroll-lock) | 412 (cons (logior (lsh 1 16) 51) 'scroll-lock) |
411 (cons (logior (lsh 1 16) 52) 'pause) | 413 (cons (logior (lsh 1 16) 52) 'pause) |
412 (cons (logior (lsh 1 16) 53) 'system) | 414 (cons (logior (lsh 1 16) 53) 'system) |
413 (cons (logior (lsh 1 16) 54) 'break) | 415 (cons (logior (lsh 1 16) 54) 'break) |
414 (cons (logior (lsh 1 16) 56) 'please-tell-carl-what-this-key-is-called-56) | 416 (cons (logior (lsh 1 16) 56) 'please-tell-carl-what-this-key-is-called-56) |
415 (cons (logior (lsh 1 16) 61) 'please-tell-carl-what-this-key-is-called-61) | 417 (cons (logior (lsh 1 16) 61) 'please-tell-carl-what-this-key-is-called-61) |
416 (cons (logior (lsh 1 16) 62) 'please-tell-carl-what-this-key-is-called-62) | 418 (cons (logior (lsh 1 16) 62) 'please-tell-carl-what-this-key-is-called-62) |
417 (cons (logior (lsh 1 16) 63) 'please-tell-carl-what-this-key-is-called-63) | 419 (cons (logior (lsh 1 16) 63) 'please-tell-carl-what-this-key-is-called-63) |
418 (cons (logior (lsh 1 16) 64) 'please-tell-carl-what-this-key-is-called-64) | 420 (cons (logior (lsh 1 16) 64) 'please-tell-carl-what-this-key-is-called-64) |
419 (cons (logior (lsh 1 16) 69) 'please-tell-carl-what-this-key-is-called-69) | 421 (cons (logior (lsh 1 16) 69) 'please-tell-carl-what-this-key-is-called-69) |
420 (cons (logior (lsh 1 16) 70) 'please-tell-carl-what-this-key-is-called-70) | 422 (cons (logior (lsh 1 16) 70) 'please-tell-carl-what-this-key-is-called-70) |
421 (cons (logior (lsh 1 16) 71) 'please-tell-carl-what-this-key-is-called-71) | 423 (cons (logior (lsh 1 16) 71) 'please-tell-carl-what-this-key-is-called-71) |
422 (cons (logior (lsh 1 16) 72) 'please-tell-carl-what-this-key-is-called-72) | 424 (cons (logior (lsh 1 16) 72) 'please-tell-carl-what-this-key-is-called-72) |
423 (cons (logior (lsh 1 16) 73) 'please-tell-carl-what-this-key-is-called-73) | 425 (cons (logior (lsh 1 16) 73) 'please-tell-carl-what-this-key-is-called-73) |
424 (cons (logior (lsh 2 16) 3) 'kp-enter) | 426 (cons (logior (lsh 2 16) 3) 'kp-enter) |
425 (cons (logior (lsh 2 16) 9) 'kp-tab) | 427 (cons (logior (lsh 2 16) 9) 'kp-tab) |
426 (cons (logior (lsh 2 16) 28) 'kp-quit) | 428 (cons (logior (lsh 2 16) 28) 'kp-quit) |
427 (cons (logior (lsh 2 16) 35) 'kp-hash) | 429 (cons (logior (lsh 2 16) 35) 'kp-hash) |
428 (cons (logior (lsh 2 16) 42) 'kp-multiply) | 430 (cons (logior (lsh 2 16) 42) 'kp-multiply) |
429 (cons (logior (lsh 2 16) 43) 'kp-add) | 431 (cons (logior (lsh 2 16) 43) 'kp-add) |
430 (cons (logior (lsh 2 16) 44) 'kp-separator) | 432 (cons (logior (lsh 2 16) 44) 'kp-separator) |
431 (cons (logior (lsh 2 16) 45) 'kp-subtract) | 433 (cons (logior (lsh 2 16) 45) 'kp-subtract) |
432 (cons (logior (lsh 2 16) 46) 'kp-decimal) | 434 (cons (logior (lsh 2 16) 46) 'kp-decimal) |
433 (cons (logior (lsh 2 16) 47) 'kp-divide) | 435 (cons (logior (lsh 2 16) 47) 'kp-divide) |
434 (cons (logior (lsh 2 16) 48) 'kp-0) | 436 (cons (logior (lsh 2 16) 48) 'kp-0) |
435 (cons (logior (lsh 2 16) 49) 'kp-1) | 437 (cons (logior (lsh 2 16) 49) 'kp-1) |
436 (cons (logior (lsh 2 16) 50) 'kp-2) | 438 (cons (logior (lsh 2 16) 50) 'kp-2) |
437 (cons (logior (lsh 2 16) 51) 'kp-3) | 439 (cons (logior (lsh 2 16) 51) 'kp-3) |
438 (cons (logior (lsh 2 16) 52) 'kp-4) | 440 (cons (logior (lsh 2 16) 52) 'kp-4) |
439 (cons (logior (lsh 2 16) 53) 'kp-5) | 441 (cons (logior (lsh 2 16) 53) 'kp-5) |
440 (cons (logior (lsh 2 16) 54) 'kp-6) | 442 (cons (logior (lsh 2 16) 54) 'kp-6) |
441 (cons (logior (lsh 2 16) 55) 'kp-7) | 443 (cons (logior (lsh 2 16) 55) 'kp-7) |
442 (cons (logior (lsh 2 16) 56) 'kp-8) | 444 (cons (logior (lsh 2 16) 56) 'kp-8) |
443 (cons (logior (lsh 2 16) 57) 'kp-9) | 445 (cons (logior (lsh 2 16) 57) 'kp-9) |
444 (cons (logior (lsh 2 16) 60) 'kp-less) | 446 (cons (logior (lsh 2 16) 60) 'kp-less) |
445 (cons (logior (lsh 2 16) 61) 'kp-equal) | 447 (cons (logior (lsh 2 16) 61) 'kp-equal) |
446 (cons (logior (lsh 2 16) 62) 'kp-more) | 448 (cons (logior (lsh 2 16) 62) 'kp-more) |
447 (cons (logior (lsh 2 16) 64) 'kp-at) | 449 (cons (logior (lsh 2 16) 64) 'kp-at) |
448 (cons (logior (lsh 2 16) 92) 'kp-backslash) | 450 (cons (logior (lsh 2 16) 92) 'kp-backslash) |
449 (cons (logior (lsh 2 16) 96) 'kp-backtick) | 451 (cons (logior (lsh 2 16) 96) 'kp-backtick) |
450 (cons (logior (lsh 2 16) 124) 'kp-bar) | 452 (cons (logior (lsh 2 16) 124) 'kp-bar) |
451 (cons (logior (lsh 2 16) 126) 'kp-tilde) | 453 (cons (logior (lsh 2 16) 126) 'kp-tilde) |
452 (cons (logior (lsh 2 16) 157) 'kp-mu) | 454 (cons (logior (lsh 2 16) 157) 'kp-mu) |
453 (cons (logior (lsh 2 16) 165) 'kp-yen) | 455 (cons (logior (lsh 2 16) 165) 'kp-yen) |
454 (cons (logior (lsh 2 16) 167) 'kp-paragraph) | 456 (cons (logior (lsh 2 16) 167) 'kp-paragraph) |
455 (cons (logior (lsh 2 16) 172) 'left) | 457 (cons (logior (lsh 2 16) 172) 'left) |
456 (cons (logior (lsh 2 16) 173) 'up) | 458 (cons (logior (lsh 2 16) 173) 'up) |
457 (cons (logior (lsh 2 16) 174) 'right) | 459 (cons (logior (lsh 2 16) 174) 'right) |
458 (cons (logior (lsh 2 16) 175) 'down) | 460 (cons (logior (lsh 2 16) 175) 'down) |
459 (cons (logior (lsh 2 16) 176) 'kp-ring) | 461 (cons (logior (lsh 2 16) 176) 'kp-ring) |
460 (cons (logior (lsh 2 16) 201) 'kp-square) | 462 (cons (logior (lsh 2 16) 201) 'kp-square) |
461 (cons (logior (lsh 2 16) 204) 'kp-cube) | 463 (cons (logior (lsh 2 16) 204) 'kp-cube) |
462 (cons (logior (lsh 3 16) 8) 'backspace) | 464 (cons (logior (lsh 3 16) 8) 'backspace) |
463 (cons (logior (lsh 3 16) 9) 'tab) | 465 (cons (logior (lsh 3 16) 9) 'tab) |
464 (cons (logior (lsh 3 16) 10) 'linefeed) | 466 (cons (logior (lsh 3 16) 10) 'linefeed) |
465 (cons (logior (lsh 3 16) 11) 'clear) | 467 (cons (logior (lsh 3 16) 11) 'clear) |
466 (cons (logior (lsh 3 16) 13) 'return) | 468 (cons (logior (lsh 3 16) 13) 'return) |
467 (cons (logior (lsh 3 16) 18) 'pause) | 469 (cons (logior (lsh 3 16) 18) 'pause) |
468 (cons (logior (lsh 3 16) 25) 'S-tab) | 470 (cons (logior (lsh 3 16) 25) 'S-tab) |
469 (cons (logior (lsh 3 16) 27) 'escape) | 471 (cons (logior (lsh 3 16) 27) 'escape) |
470 (cons (logior (lsh 3 16) 127) 'delete) | 472 (cons (logior (lsh 3 16) 127) 'delete) |
471 )) | 473 )) |
472 (set-terminal-parameter frame 'x-setup-function-keys t)))) | 474 (set-terminal-parameter frame 'x-setup-function-keys t)))) |
473 | 475 |
474 | 476 |
475 | 477 |
476 ;;;; Miscellaneous mouse bindings. | 478 ;;;; Miscellaneous mouse bindings. |
477 | 479 |
503 (define-key global-map [S-mouse-1] 'mouse-extend-region) | 505 (define-key global-map [S-mouse-1] 'mouse-extend-region) |
504 (global-unset-key [S-down-mouse-1]) | 506 (global-unset-key [S-down-mouse-1]) |
505 | 507 |
506 | 508 |
507 | 509 |
508 ; must come after keybindings | 510 ;; Must come after keybindings. |
509 | 511 |
510 (fmakunbound 'clipboard-yank) | 512 (fmakunbound 'clipboard-yank) |
511 (fmakunbound 'clipboard-kill-ring-save) | 513 (fmakunbound 'clipboard-kill-ring-save) |
512 (fmakunbound 'clipboard-kill-region) | 514 (fmakunbound 'clipboard-kill-region) |
513 (fmakunbound 'menu-bar-enable-clipboard) | 515 (fmakunbound 'menu-bar-enable-clipboard) |
514 | 516 |
515 ;; Add a couple of menus and rearrange some others; easiest just to redo toplvl | 517 ;; Add a couple of menus and rearrange some others; easiest just to redo toplvl |
516 ;; Note keymap defns must be given last-to-first | 518 ;; Note keymap defns must be given last-to-first |
517 (define-key global-map [menu-bar] (make-sparse-keymap "menu-bar")) | 519 (define-key global-map [menu-bar] (make-sparse-keymap "menu-bar")) |
518 | 520 |
519 (cond ((eq system-type 'darwin) | 521 (setq menu-bar-final-items |
520 (setq menu-bar-final-items '(buffer windows services help-menu))) | 522 (cond ((eq system-type 'darwin) |
521 ;; otherwise, gnustep | 523 '(buffer windows services help-menu)) |
522 (t | 524 ;; Otherwise, GNUstep. |
523 (setq menu-bar-final-items '(buffer windows services hide-app quit)) ) | 525 (t |
524 ) | 526 '(buffer windows services hide-app quit)))) |
525 | 527 |
526 ;; add standard top-level items to GNUstep menu | 528 ;; Add standard top-level items to GNUstep menu. |
527 (cond ((not (eq system-type 'darwin)) | 529 (unless (eq system-type 'darwin) |
528 (define-key global-map [menu-bar quit] '("Quit" . save-buffers-kill-emacs)) | 530 (define-key global-map [menu-bar quit] '("Quit" . save-buffers-kill-emacs)) |
529 (define-key global-map [menu-bar hide-app] '("Hide" . ns-do-hide-emacs)) | 531 (define-key global-map [menu-bar hide-app] '("Hide" . ns-do-hide-emacs))) |
530 )) | |
531 | 532 |
532 (define-key global-map [menu-bar services] | 533 (define-key global-map [menu-bar services] |
533 (cons "Services" (make-sparse-keymap "Services"))) | 534 (cons "Services" (make-sparse-keymap "Services"))) |
534 (define-key global-map [menu-bar windows] (make-sparse-keymap "Windows")) | 535 (define-key global-map [menu-bar windows] (make-sparse-keymap "Windows")) |
535 (define-key global-map [menu-bar buffer] | 536 (define-key global-map [menu-bar buffer] |
621 '("New Frame" . make-frame)) | 622 '("New Frame" . make-frame)) |
622 | 623 |
623 | 624 |
624 ;;;; Edit menu: Modify slightly | 625 ;;;; Edit menu: Modify slightly |
625 | 626 |
626 ; Substitute a Copy function that works better under X (for GNUstep) | 627 ;; Substitute a Copy function that works better under X (for GNUstep). |
627 (easy-menu-remove-item global-map '("menu-bar" "edit") 'copy) | 628 (easy-menu-remove-item global-map '("menu-bar" "edit") 'copy) |
628 (define-key-after menu-bar-edit-menu [copy] | 629 (define-key-after menu-bar-edit-menu [copy] |
629 '(menu-item "Copy" ns-copy-including-secondary | 630 '(menu-item "Copy" ns-copy-including-secondary |
630 :enable mark-active | 631 :enable mark-active |
631 :help "Copy text in region between mark and current position") | 632 :help "Copy text in region between mark and current position") |
632 'cut) | 633 'cut) |
633 | 634 |
634 ; Change to same precondition as select-and-paste, as we don't have | 635 ;; Change to same precondition as select-and-paste, as we don't have |
635 ; 'x-selection-exists-p | 636 ;; `x-selection-exists-p'. |
636 (easy-menu-remove-item global-map '("menu-bar" "edit") 'paste) | 637 (easy-menu-remove-item global-map '("menu-bar" "edit") 'paste) |
637 (define-key-after menu-bar-edit-menu [paste] | 638 (define-key-after menu-bar-edit-menu [paste] |
638 '(menu-item "Paste" yank | 639 '(menu-item "Paste" yank |
639 :enable (and (cdr yank-menu) (not buffer-read-only)) | 640 :enable (and (cdr yank-menu) (not buffer-read-only)) |
640 :help "Paste (yank) text most recently cut/copied") | 641 :help "Paste (yank) text most recently cut/copied") |
641 'copy) | 642 'copy) |
642 | 643 |
643 ; Change text to be more consistent with surrounding menu items 'paste', etc. | 644 ;; Change text to be more consistent with surrounding menu items `paste', etc. |
644 (easy-menu-remove-item global-map '("menu-bar" "edit") 'paste-from-menu) | 645 (easy-menu-remove-item global-map '("menu-bar" "edit") 'paste-from-menu) |
645 (define-key-after menu-bar-edit-menu [select-paste] | 646 (define-key-after menu-bar-edit-menu [select-paste] |
646 '(menu-item "Select and Paste" yank-menu | 647 '(menu-item "Select and Paste" yank-menu |
647 :enable (and (cdr yank-menu) (not buffer-read-only)) | 648 :enable (and (cdr yank-menu) (not buffer-read-only)) |
648 :help "Choose a string from the kill ring and paste it") | 649 :help "Choose a string from the kill ring and paste it") |
649 'paste) | 650 'paste) |
650 | 651 |
651 ; Separate undo item from cut/paste section, add spell for platform consistency | 652 ;; Separate undo from cut/paste section, add spell for platform consistency. |
652 (define-key-after menu-bar-edit-menu [separator-undo] '("--") 'undo) | 653 (define-key-after menu-bar-edit-menu [separator-undo] '("--") 'undo) |
653 (define-key-after menu-bar-edit-menu [spell] '("Spell" . ispell-menu-map) 'fill) | 654 (define-key-after menu-bar-edit-menu [spell] '("Spell" . ispell-menu-map) 'fill) |
654 | 655 |
655 | 656 |
656 ;;;; Windows menu | 657 ;;;; Windows menu |
660 (raise-frame last-command-event) | 661 (raise-frame last-command-event) |
661 (select-frame last-command-event)) | 662 (select-frame last-command-event)) |
662 | 663 |
663 (defun menu-bar-update-frames () | 664 (defun menu-bar-update-frames () |
664 ;; If user discards the Windows item, play along. | 665 ;; If user discards the Windows item, play along. |
665 (and (lookup-key (current-global-map) [menu-bar windows]) | 666 (when (lookup-key (current-global-map) [menu-bar windows]) |
666 (let ((frames (frame-list)) | 667 (let ((frames (frame-list)) |
667 (frames-menu (make-sparse-keymap "Select Frame"))) | 668 (frames-menu (make-sparse-keymap "Select Frame"))) |
668 (setcdr frames-menu | 669 (setcdr frames-menu |
669 (nconc | 670 (nconc |
670 (mapcar '(lambda (frame) | 671 (mapcar (lambda (frame) |
671 (nconc (list frame | 672 (list* frame |
672 (cdr (assq 'name (frame-parameters frame))) | 673 (cdr (assq 'name (frame-parameters frame))) |
673 (cons nil nil)) | 674 'menu-bar-select-frame)) |
674 'menu-bar-select-frame)) | 675 frames) |
675 frames) | 676 (cdr frames-menu))) |
676 (cdr frames-menu))) | 677 (define-key frames-menu [separator-frames] '("--")) |
677 (define-key frames-menu [separator-frames] '("--")) | 678 (define-key frames-menu [popup-color-panel] |
678 (define-key frames-menu [popup-color-panel] | 679 '("Colors..." . ns-popup-color-panel)) |
679 '("Colors..." . ns-popup-color-panel)) | 680 (define-key frames-menu [popup-font-panel] |
680 (define-key frames-menu [popup-font-panel] | 681 '("Font Panel..." . ns-popup-font-panel)) |
681 '("Font Panel..." . ns-popup-font-panel)) | 682 (define-key frames-menu [separator-arrange] '("--")) |
682 (define-key frames-menu [separator-arrange] '("--")) | 683 (define-key frames-menu [arrange-all-frames] |
683 (define-key frames-menu [arrange-all-frames] | 684 '("Arrange All Frames" . ns-arrange-all-frames)) |
684 '("Arrange All Frames" . ns-arrange-all-frames)) | 685 (define-key frames-menu [arrange-visible-frames] |
685 (define-key frames-menu [arrange-visible-frames] | 686 '("Arrange Visible Frames" . ns-arrange-visible-frames)) |
686 '("Arrange Visible Frames" . ns-arrange-visible-frames)) | 687 ;; Don't use delete-frame as event name |
687 ;; Don't use delete-frame as event name | 688 ;; because that is a special event. |
688 ;; because that is a special event. | 689 (define-key (current-global-map) [menu-bar windows] |
689 (define-key (current-global-map) [menu-bar windows] | 690 (cons "Windows" frames-menu))))) |
690 (cons "Windows" frames-menu))))) | |
691 | 691 |
692 (defun force-menu-bar-update-buffers () | 692 (defun force-menu-bar-update-buffers () |
693 ;; This is a hack to get around fact that we already checked | 693 ;; This is a hack to get around fact that we already checked |
694 ;; frame-or-buffer-changed-p and reset it, so menu-bar-update-buffers | 694 ;; frame-or-buffer-changed-p and reset it, so menu-bar-update-buffers |
695 ;; does not pick up any change. | 695 ;; does not pick up any change. |
729 (x-pos 100) ;start position | 729 (x-pos 100) ;start position |
730 (y-pos 40) | 730 (y-pos 40) |
731 (done nil)) | 731 (done nil)) |
732 (while (not done) ;cycle through all frames | 732 (while (not done) ;cycle through all frames |
733 (if (not (or vis (eq (frame-visible-p frame) t))) | 733 (if (not (or vis (eq (frame-visible-p frame) t))) |
734 (setq x-pos x-pos); do nothing; true case | 734 (setq x-pos x-pos); do nothing; true case |
735 (set-frame-position frame x-pos y-pos) | 735 (set-frame-position frame x-pos y-pos) |
736 (setq x-pos (+ x-pos inc-x)) | 736 (setq x-pos (+ x-pos inc-x)) |
737 (setq y-pos (+ y-pos inc-y)) | 737 (setq y-pos (+ y-pos inc-y)) |
738 (raise-frame frame)) | 738 (raise-frame frame)) |
739 (select-frame frame) | 739 (select-frame frame) |
747 ;;;; Services | 747 ;;;; Services |
748 (defun ns-define-service (path) | 748 (defun ns-define-service (path) |
749 (let ((mapping [menu-bar services]) | 749 (let ((mapping [menu-bar services]) |
750 (service (mapconcat 'identity path "/")) | 750 (service (mapconcat 'identity path "/")) |
751 (name (intern | 751 (name (intern |
752 (mapconcat '(lambda (s) (if (= s 32) "-" (char-to-string s))) | 752 (subst-char-in-string |
753 (mapconcat 'identity (cons "ns-service" path) "-") | 753 ?\s ?- |
754 "")))) | 754 (mapconcat 'identity (cons "ns-service" path) "-"))))) |
755 ;; This defines the function | 755 ;; This defines the function. |
756 (eval (append (list 'defun name) | 756 (defalias name |
757 `((arg) | 757 (lexical-let ((service service)) |
758 (interactive "p") | 758 (lambda (arg) |
759 (let* ((in-string (if (stringp arg) arg (if mark-active | 759 (interactive "p") |
760 (buffer-substring (region-beginning) (region-end))))) | 760 (let* ((in-string |
761 (out-string (ns-perform-service (,@service) in-string))) | 761 (cond ((stringp arg) arg) |
762 (cond | 762 (mark-active |
763 ((stringp arg) out-string) | 763 (buffer-substring (region-beginning) (region-end))))) |
764 ((and out-string (or (not in-string) | 764 (out-string (ns-perform-service service in-string))) |
765 (not (string= in-string out-string)))) | 765 (cond |
766 (if mark-active (delete-region (region-beginning) (region-end))) | 766 ((stringp arg) out-string) |
767 (insert out-string) | 767 ((and out-string (or (not in-string) |
768 (setq deactivate-mark nil))))))) | 768 (not (string= in-string out-string)))) |
769 (if mark-active (delete-region (region-beginning) (region-end))) | |
770 (insert out-string) | |
771 (setq deactivate-mark nil))))))) | |
769 (cond | 772 (cond |
770 ((lookup-key global-map mapping) | 773 ((lookup-key global-map mapping) |
771 (while (cdr path) | 774 (while (cdr path) |
772 (setq mapping (vconcat mapping (list (intern (car path))))) | 775 (setq mapping (vconcat mapping (list (intern (car path))))) |
773 (if (not (keymapp (lookup-key global-map mapping))) | 776 (if (not (keymapp (lookup-key global-map mapping))) |
821 (make-variable-buffer-local 'ns-working-overlay) | 824 (make-variable-buffer-local 'ns-working-overlay) |
822 (defvar ns-working-overlay-len 0 | 825 (defvar ns-working-overlay-len 0 |
823 "Length of working text during compose sequence insert.") | 826 "Length of working text during compose sequence insert.") |
824 (make-variable-buffer-local 'ns-working-overlay-len) | 827 (make-variable-buffer-local 'ns-working-overlay-len) |
825 | 828 |
826 ; Based on mac-win.el 2007/08/26 unicode-2. This will fail if called | 829 ;; Based on mac-win.el 2007/08/26 unicode-2. This will fail if called |
827 ; from an "interactive" function. | 830 ;; from an "interactive" function. |
828 (defun ns-in-echo-area () | 831 (defun ns-in-echo-area () |
829 "Whether, for purposes of inserting working composition text, the minibuffer | 832 "Whether, for purposes of inserting working composition text, the minibuffer |
830 is currently being used." | 833 is currently being used." |
831 (or isearch-mode | 834 (or isearch-mode |
832 (and cursor-in-echo-area (current-message)) | 835 (and cursor-in-echo-area (current-message)) |
838 (get-char-property (point) 'display))) | 841 (get-char-property (point) 'display))) |
839 (and (get-char-property (point) 'composition) | 842 (and (get-char-property (point) 'composition) |
840 (eq (get-char-property (1- (point)) 'composition) | 843 (eq (get-char-property (1- (point)) 'composition) |
841 (get-char-property (point) 'composition))))))) | 844 (get-char-property (point) 'composition))))))) |
842 | 845 |
843 ; currently not used, doesn't work because the 'interactive' here stays | 846 ;; Currently not used, doesn't work because the 'interactive' here stays |
844 ; for subinvocations | 847 ;; for subinvocations. |
845 (defun ns-insert-working-text () | 848 (defun ns-insert-working-text () |
846 (interactive) | 849 (interactive) |
847 (if (ns-in-echo-area) (ns-echo-working-text) (ns-put-working-text))) | 850 (if (ns-in-echo-area) (ns-echo-working-text) (ns-put-working-text))) |
848 | 851 |
849 (defvar ns-working-text) ; nsterm.m | 852 (defvar ns-working-text) ; nsterm.m |
918 (set-file-name-coding-system 'utf-8-nfd))) | 921 (set-file-name-coding-system 'utf-8-nfd))) |
919 | 922 |
920 ;; PENDING: disable composition-based display for Indic scripts as it | 923 ;; PENDING: disable composition-based display for Indic scripts as it |
921 ;; is not working well under NS for some reason | 924 ;; is not working well under NS for some reason |
922 (set-char-table-range composition-function-table | 925 (set-char-table-range composition-function-table |
923 '(#x0900 . #x0DFF) nil) | 926 '(#x0900 . #x0DFF) nil) |
924 | 927 |
925 | 928 |
926 ;;;; Inter-app communications support. | 929 ;;;; Inter-app communications support. |
927 | 930 |
928 (defvar ns-input-text) ; nsterm.m | 931 (defvar ns-input-text) ; nsterm.m |
1024 (ns-set-resource nil "AlternateModifier" (symbol-name ns-alternate-modifier)) | 1027 (ns-set-resource nil "AlternateModifier" (symbol-name ns-alternate-modifier)) |
1025 (ns-set-resource nil "CommandModifier" (symbol-name ns-command-modifier)) | 1028 (ns-set-resource nil "CommandModifier" (symbol-name ns-command-modifier)) |
1026 (ns-set-resource nil "ControlModifier" (symbol-name ns-control-modifier)) | 1029 (ns-set-resource nil "ControlModifier" (symbol-name ns-control-modifier)) |
1027 (ns-set-resource nil "FunctionModifier" (symbol-name ns-function-modifier)) | 1030 (ns-set-resource nil "FunctionModifier" (symbol-name ns-function-modifier)) |
1028 (ns-set-resource nil "CursorBlinkRate" | 1031 (ns-set-resource nil "CursorBlinkRate" |
1029 (if ns-cursor-blink-rate | 1032 (if ns-cursor-blink-rate |
1030 (number-to-string ns-cursor-blink-rate) | 1033 (number-to-string ns-cursor-blink-rate) |
1031 "NO")) | 1034 "NO")) |
1032 (ns-set-resource nil "ExpandSpace" | 1035 (ns-set-resource nil "ExpandSpace" |
1033 (if ns-expand-space | 1036 (if ns-expand-space |
1034 (number-to-string ns-expand-space) | 1037 (number-to-string ns-expand-space) |
1035 "NO")) | 1038 "NO")) |
1036 (ns-set-resource nil "GSFontAntiAlias" (if ns-antialias-text "YES" "NO")) | 1039 (ns-set-resource nil "GSFontAntiAlias" (if ns-antialias-text "YES" "NO")) |
1037 (ns-set-resource nil "UseQuickdrawSmoothing" | 1040 (ns-set-resource nil "UseQuickdrawSmoothing" |
1038 (if ns-use-qd-smoothing "YES" "NO")) | 1041 (if ns-use-qd-smoothing "YES" "NO")) |
1039 (ns-set-resource nil "UseSystemHighlightColor" | 1042 (ns-set-resource nil "UseSystemHighlightColor" |
1040 (if ns-use-system-highlight-color "YES" "NO")) | 1043 (if ns-use-system-highlight-color "YES" "NO")) |
1050 (if bgc (ns-set-resource nil "Background" (cdr bgc)))) | 1053 (if bgc (ns-set-resource nil "Background" (cdr bgc)))) |
1051 (let ((cc (assq 'cursor-color p))) | 1054 (let ((cc (assq 'cursor-color p))) |
1052 (if cc (ns-set-resource nil "CursorColor" (cdr cc)))) | 1055 (if cc (ns-set-resource nil "CursorColor" (cdr cc)))) |
1053 (let ((ct (assq 'cursor-type p))) | 1056 (let ((ct (assq 'cursor-type p))) |
1054 (if ct (ns-set-resource nil "CursorType" | 1057 (if ct (ns-set-resource nil "CursorType" |
1055 (if (symbolp (cdr ct)) (symbol-name (cdr ct)) (cdr ct))))) | 1058 (if (symbolp (cdr ct)) |
1059 (symbol-name (cdr ct)) (cdr ct))))) | |
1056 (let ((under (assq 'underline p))) | 1060 (let ((under (assq 'underline p))) |
1057 (if under (ns-set-resource nil "Underline" | 1061 (if under (ns-set-resource nil "Underline" |
1058 (cond ((eq (cdr under) t) "YES") | 1062 (cond ((eq (cdr under) t) "YES") |
1059 ((eq (cdr under) nil) "NO") | 1063 ((eq (cdr under) nil) "NO") |
1060 (t (cdr under)))))) | 1064 (t (cdr under)))))) |
1061 (let ((ibw (assq 'internal-border-width p))) | 1065 (let ((ibw (assq 'internal-border-width p))) |
1062 (if ibw (ns-set-resource nil "InternalBorderWidth" | 1066 (if ibw (ns-set-resource nil "InternalBorderWidth" |
1063 (number-to-string (cdr ibw))))) | 1067 (number-to-string (cdr ibw))))) |
1064 (let ((vsb (assq 'vertical-scroll-bars p))) | 1068 (let ((vsb (assq 'vertical-scroll-bars p))) |
1065 (if vsb (ns-set-resource nil "VerticalScrollBars" (cond | 1069 (if vsb (ns-set-resource nil "VerticalScrollBars" |
1066 ((eq t (cdr vsb)) "YES") | 1070 (case (cdr vsb) |
1067 ((eq nil (cdr vsb)) "NO") | 1071 ((t) "YES") |
1068 ((eq 'left (cdr vsb)) "left") | 1072 ((nil) "NO") |
1069 ((eq 'right (cdr vsb)) "right") | 1073 ((left) "left") |
1070 (t nil))))) | 1074 ((right) "right") |
1075 (t nil))))) | |
1071 (let ((height (assq 'height p))) | 1076 (let ((height (assq 'height p))) |
1072 (if height (ns-set-resource nil "Height" | 1077 (if height (ns-set-resource nil "Height" |
1073 (number-to-string (cdr height))))) | 1078 (number-to-string (cdr height))))) |
1074 (let ((width (assq 'width p))) | 1079 (let ((width (assq 'width p))) |
1075 (if width (ns-set-resource nil "Width" | 1080 (if width (ns-set-resource nil "Width" |
1076 (number-to-string (cdr width))))) | 1081 (number-to-string (cdr width))))) |
1077 (let ((top (assq 'top p))) | 1082 (let ((top (assq 'top p))) |
1078 (if top (ns-set-resource nil "Top" | 1083 (if top (ns-set-resource nil "Top" |
1079 (number-to-string (cdr top))))) | 1084 (number-to-string (cdr top))))) |
1080 (let ((left (assq 'left p))) | 1085 (let ((left (assq 'left p))) |
1081 (if left (ns-set-resource nil "Left" | 1086 (if left (ns-set-resource nil "Left" |
1082 (number-to-string (cdr left))))) | 1087 (number-to-string (cdr left))))) |
1083 ;; These not fully supported | 1088 ;; These not fully supported |
1084 (let ((ar (assq 'auto-raise p))) | 1089 (let ((ar (assq 'auto-raise p))) |
1085 (if ar (ns-set-resource nil "AutoRaise" | 1090 (if ar (ns-set-resource nil "AutoRaise" |
1086 (if (cdr ar) "YES" "NO")))) | 1091 (if (cdr ar) "YES" "NO")))) |
1087 (let ((al (assq 'auto-lower p))) | 1092 (let ((al (assq 'auto-lower p))) |
1088 (if al (ns-set-resource nil "AutoLower" | 1093 (if al (ns-set-resource nil "AutoLower" |
1089 (if (cdr al) "YES" "NO")))) | 1094 (if (cdr al) "YES" "NO")))) |
1090 (let ((mbl (assq 'menu-bar-lines p))) | 1095 (let ((mbl (assq 'menu-bar-lines p))) |
1091 (if mbl (ns-set-resource nil "Menus" | 1096 (if mbl (ns-set-resource nil "Menus" |
1092 (if (cdr mbl) "YES" "NO")))) | 1097 (if (cdr mbl) "YES" "NO")))) |
1093 ) | 1098 ) |
1094 (let ((fl (face-list))) | 1099 (let ((fl (face-list))) |
1095 (while (consp fl) | 1100 (while (consp fl) |
1096 (or (eq 'default (car fl)) | 1101 (or (eq 'default (car fl)) |
1097 ;; dont save Default* since it causes all created faces to | 1102 ;; dont save Default* since it causes all created faces to |
1098 ;; inherit its values. The properties of the default face | 1103 ;; inherit its values. The properties of the default face |
1099 ;; have already been saved from the frame-parameters anyway. | 1104 ;; have already been saved from the frame-parameters anyway. |
1100 (let* ((name (symbol-name (car fl))) | 1105 (let* ((name (symbol-name (car fl))) |
1101 (font (face-font (car fl))) | 1106 (font (face-font (car fl))) |
1102 ; (fontsize (face-fontsize (car fl))) | 1107 ;; (fontsize (face-fontsize (car fl))) |
1103 (foreground (face-foreground (car fl))) | 1108 (foreground (face-foreground (car fl))) |
1104 (background (face-background (car fl))) | 1109 (background (face-background (car fl))) |
1105 (underline (face-underline-p (car fl))) | 1110 (underline (face-underline-p (car fl))) |
1106 (italic (face-italic-p (car fl))) | 1111 (italic (face-italic-p (car fl))) |
1107 (bold (face-bold-p (car fl))) | 1112 (bold (face-bold-p (car fl))) |
1108 (stipple (face-stipple (car fl)))) | 1113 (stipple (face-stipple (car fl)))) |
1109 ; (ns-set-resource nil (concat name ".attributeFont") | 1114 ;; (ns-set-resource nil (concat name ".attributeFont") |
1110 ; (if font font nil)) | 1115 ;; (if font font nil)) |
1111 ; (ns-set-resource nil (concat name ".attributeFontSize") | 1116 ;; (ns-set-resource nil (concat name ".attributeFontSize") |
1112 ; (if fontsize (number-to-string fontsize) nil)) | 1117 ;; (if fontsize (number-to-string fontsize) nil)) |
1113 (ns-set-resource nil (concat name ".attributeForeground") | 1118 (ns-set-resource nil (concat name ".attributeForeground") |
1114 (if foreground foreground nil)) | 1119 (if foreground foreground nil)) |
1115 (ns-set-resource nil (concat name ".attributeBackground") | 1120 (ns-set-resource nil (concat name ".attributeBackground") |
1116 (if background background nil)) | 1121 (if background background nil)) |
1117 (ns-set-resource nil (concat name ".attributeUnderline") | 1122 (ns-set-resource nil (concat name ".attributeUnderline") |
1118 (if underline "YES" nil)) | 1123 (if underline "YES" nil)) |
1119 (ns-set-resource nil (concat name ".attributeItalic") | 1124 (ns-set-resource nil (concat name ".attributeItalic") |
1120 (if italic "YES" nil)) | 1125 (if italic "YES" nil)) |
1121 (ns-set-resource nil (concat name ".attributeBold") | 1126 (ns-set-resource nil (concat name ".attributeBold") |
1122 (if bold "YES" nil)) | 1127 (if bold "YES" nil)) |
1123 (and stipple | 1128 (and stipple |
1124 (or (stringp stipple) | 1129 (or (stringp stipple) |
1125 (setq stipple (prin1-to-string stipple)))) | 1130 (setq stipple (prin1-to-string stipple)))) |
1126 (ns-set-resource nil (concat name ".attributeStipple") | 1131 (ns-set-resource nil (concat name ".attributeStipple") |
1127 (if stipple stipple nil)))) | 1132 (if stipple stipple nil)))) |
1128 (setq fl (cdr fl))))) | 1133 (setq fl (cdr fl))))) |
1129 | 1134 |
1130 (declare-function menu-bar-options-save-orig "ns-win" () t) | 1135 (declare-function menu-bar-options-save-orig "ns-win" () t) |
1131 | 1136 |
1132 ;; call ns-save-preferences when menu-bar-options-save is called | 1137 ;; call ns-save-preferences when menu-bar-options-save is called |
1141 ;;;; File handling. | 1146 ;;;; File handling. |
1142 | 1147 |
1143 (defun ns-open-file-using-panel () | 1148 (defun ns-open-file-using-panel () |
1144 "Pop up open-file panel, and load the result in a buffer." | 1149 "Pop up open-file panel, and load the result in a buffer." |
1145 (interactive) | 1150 (interactive) |
1146 ; prompt dir defaultName isLoad initial | 1151 ;; Prompt dir defaultName isLoad initial. |
1147 (setq ns-input-file (ns-read-file-name "Select File to Load" nil t nil)) | 1152 (setq ns-input-file (ns-read-file-name "Select File to Load" nil t nil)) |
1148 (if ns-input-file | 1153 (if ns-input-file |
1149 (and (setq ns-input-file (list ns-input-file)) (ns-find-file)))) | 1154 (and (setq ns-input-file (list ns-input-file)) (ns-find-file)))) |
1150 | 1155 |
1151 (defun ns-write-file-using-panel () | 1156 (defun ns-write-file-using-panel () |
1152 "Pop up save-file panel, and save buffer in resulting name." | 1157 "Pop up save-file panel, and save buffer in resulting name." |
1153 (interactive) | 1158 (interactive) |
1154 (let (ns-output-file) | 1159 (let (ns-output-file) |
1155 ; prompt dir defaultName isLoad initial | 1160 ;; Prompt dir defaultName isLoad initial. |
1156 (setq ns-output-file (ns-read-file-name "Save As" nil nil nil)) | 1161 (setq ns-output-file (ns-read-file-name "Save As" nil nil nil)) |
1157 (message ns-output-file) | 1162 (message ns-output-file) |
1158 (if ns-output-file (write-file ns-output-file)))) | 1163 (if ns-output-file (write-file ns-output-file)))) |
1159 | 1164 |
1160 (defvar ns-pop-up-frames 'fresh | 1165 (defvar ns-pop-up-frames 'fresh |
1224 (defun ns-prev-frame () | 1229 (defun ns-prev-frame () |
1225 "Switch to previous visible frame." | 1230 "Switch to previous visible frame." |
1226 (interactive) | 1231 (interactive) |
1227 (other-frame -1)) | 1232 (other-frame -1)) |
1228 | 1233 |
1229 ; If no position specified, make new frame offset by 25 from current. | 1234 ;; If no position specified, make new frame offset by 25 from current. |
1230 (add-hook 'before-make-frame-hook | 1235 (add-hook 'before-make-frame-hook |
1231 '(lambda () | 1236 (lambda () |
1232 (let ((left (cdr (assq 'left (frame-parameters)))) | 1237 (let ((left (cdr (assq 'left (frame-parameters)))) |
1233 (top (cdr (assq 'top (frame-parameters))))) | 1238 (top (cdr (assq 'top (frame-parameters))))) |
1234 (if (consp left) (setq left (cadr left))) | 1239 (if (consp left) (setq left (cadr left))) |
1235 (if (consp top) (setq top (cadr top))) | 1240 (if (consp top) (setq top (cadr top))) |
1236 (cond | 1241 (cond |
1237 ((or (assq 'top parameters) (assq 'left parameters))) | 1242 ((or (assq 'top parameters) (assq 'left parameters))) |
1238 ((or (not left) (not top))) | 1243 ((or (not left) (not top))) |
1239 (t | 1244 (t |
1240 (setq parameters (cons (cons 'left (+ left 25)) | 1245 (setq parameters (cons (cons 'left (+ left 25)) |
1241 (cons (cons 'top (+ top 25)) | 1246 (cons (cons 'top (+ top 25)) |
1242 parameters)))))))) | 1247 parameters)))))))) |
1243 | 1248 |
1244 ; frame will be focused anyway, so select it | 1249 ;; frame will be focused anyway, so select it |
1245 (add-hook 'after-make-frame-functions 'select-frame) | 1250 (add-hook 'after-make-frame-functions 'select-frame) |
1246 | 1251 |
1247 ;;; (defun ns-win-suspend-error () | 1252 ;; (defun ns-win-suspend-error () |
1248 ;;; (error "Suspending an emacs running under *Step/OS X makes no sense")) | 1253 ;; (error "Suspending an emacs running under *Step/OS X makes no sense")) |
1249 ;;; (add-hook 'suspend-hook 'ns-win-suspend-error) | 1254 ;; (add-hook 'suspend-hook 'ns-win-suspend-error) |
1250 ;;; (substitute-key-definition 'suspend-emacs 'iconify-or-deiconify-frame | 1255 ;; (substitute-key-definition 'suspend-emacs 'iconify-or-deiconify-frame |
1251 ;;; global-map) | 1256 ;; global-map) |
1252 | 1257 |
1253 ;; Based on a function by David Reitter <dreitter@inf.ed.ac.uk> ; | 1258 ;; Based on a function by David Reitter <dreitter@inf.ed.ac.uk> ; |
1254 ;; see http://lists.gnu.org/archive/html/emacs-devel/2005-09/msg00681.html . | 1259 ;; see http://lists.gnu.org/archive/html/emacs-devel/2005-09/msg00681.html . |
1255 (defun ns-toggle-toolbar (&optional frame) | 1260 (defun ns-toggle-toolbar (&optional frame) |
1256 "Switches the tool bar on and off in frame FRAME. | 1261 "Switches the tool bar on and off in frame FRAME. |
1257 If FRAME is nil, the change applies to the selected frame." | 1262 If FRAME is nil, the change applies to the selected frame." |
1258 (interactive) | 1263 (interactive) |
1259 (modify-frame-parameters frame | 1264 (modify-frame-parameters |
1260 (list (cons 'tool-bar-lines | 1265 frame (list (cons 'tool-bar-lines |
1261 (if (> (or (frame-parameter frame 'tool-bar-lines) 0) 0) | 1266 (if (> (or (frame-parameter frame 'tool-bar-lines) 0) 0) |
1262 0 1)) )) | 1267 0 1)) )) |
1263 (if (not tool-bar-mode) (tool-bar-mode t))) | 1268 (if (not tool-bar-mode) (tool-bar-mode t))) |
1264 | 1269 |
1265 (defvar ns-cursor-blink-mode) ; nsterm.m | 1270 (defvar ns-cursor-blink-mode) ; nsterm.m |
1266 | 1271 |
1267 ; Redefine from frame.el | 1272 ;; Redefine from frame.el. |
1268 (define-minor-mode blink-cursor-mode | 1273 (define-minor-mode blink-cursor-mode |
1269 "Toggle blinking cursor mode. | 1274 "Toggle blinking cursor mode. |
1270 With a numeric argument, turn blinking cursor mode on if ARG is positive, | 1275 With a numeric argument, turn blinking cursor mode on if ARG is positive, |
1271 otherwise turn it off. When blinking cursor mode is enabled, the | 1276 otherwise turn it off. When blinking cursor mode is enabled, the |
1272 cursor of the selected window blinks. | 1277 cursor of the selected window blinks. |
1291 ;; Ask user for confirm before printing. Due to Kevin Rodgers. | 1296 ;; Ask user for confirm before printing. Due to Kevin Rodgers. |
1292 (defun ns-print-buffer () | 1297 (defun ns-print-buffer () |
1293 "Interactive front-end to `print-buffer': asks for user confirmation first." | 1298 "Interactive front-end to `print-buffer': asks for user confirmation first." |
1294 (interactive) | 1299 (interactive) |
1295 (if (and (interactive-p) | 1300 (if (and (interactive-p) |
1296 (or (listp last-nonmenu-event) | 1301 (or (listp last-nonmenu-event) |
1297 (and (char-or-string-p (event-basic-type last-command-event)) | 1302 (and (char-or-string-p (event-basic-type last-command-event)) |
1298 (memq 'super (event-modifiers last-command-event))))) | 1303 (memq 'super (event-modifiers last-command-event))))) |
1299 (let ((last-nonmenu-event (if (listp last-nonmenu-event) | 1304 (let ((last-nonmenu-event (if (listp last-nonmenu-event) |
1300 last-nonmenu-event | 1305 last-nonmenu-event |
1301 ;; fake it: | 1306 ;; Fake it: |
1302 `(mouse-1 POSITION 1)))) | 1307 `(mouse-1 POSITION 1)))) |
1303 (if (y-or-n-p (format "Print buffer %s? " (buffer-name))) | 1308 (if (y-or-n-p (format "Print buffer %s? " (buffer-name))) |
1304 (print-buffer) | 1309 (print-buffer) |
1305 (error "Cancelled"))) | 1310 (error "Cancelled"))) |
1306 (print-buffer))) | 1311 (print-buffer))) |
1307 | 1312 |
1308 (defun ns-yes-or-no-p (prompt) | 1313 (defun ns-yes-or-no-p (prompt) |
1309 "As yes-or-no-p except that NS panel always used for querying." | 1314 "As yes-or-no-p except that NS panel always used for querying." |
1310 (interactive) | 1315 (interactive) |
1311 (setq last-nonmenu-event nil) | 1316 (setq last-nonmenu-event nil) |
1312 (yes-or-no-p prompt)) | 1317 (yes-or-no-p prompt)) |
1313 | 1318 |
1314 | 1319 |
1315 ;;;; Font support. | 1320 ;;;; Font support. |
1316 | 1321 |
1317 (defalias 'x-list-fonts 'ns-list-fonts) | 1322 (defalias 'x-list-fonts 'ns-list-fonts) |
1338 | 1343 |
1339 ;; Default fontset for Mac OS X. This is mainly here to show how a fontset | 1344 ;; Default fontset for Mac OS X. This is mainly here to show how a fontset |
1340 ;; can be set up manually. Ordinarily, fontsets are auto-created whenever | 1345 ;; can be set up manually. Ordinarily, fontsets are auto-created whenever |
1341 ;; a font is chosen by | 1346 ;; a font is chosen by |
1342 (defvar ns-standard-fontset-spec | 1347 (defvar ns-standard-fontset-spec |
1343 ; Only some code supports this so far, so use uglier XLFD version | 1348 ;; Only some code supports this so far, so use uglier XLFD version |
1344 ; "-ns-*-*-*-*-*-10-*-*-*-*-*-fontset-standard,latin:Courier,han:Kai" | 1349 ;; "-ns-*-*-*-*-*-10-*-*-*-*-*-fontset-standard,latin:Courier,han:Kai" |
1345 "-ns-*-*-*-*-*-10-*-*-*-*-*-fontset-standard,latin:-*-Courier-*-*-*-*-10-*-*-*-*-*-iso10646-1,han:-*-Kai-*-*-*-*-10-*-*-*-*-*-iso10646-1,cyrillic:-*-Trebuchet$MS-*-*-*-*-10-*-*-*-*-*-iso10646-1" | 1350 (mapconcat 'identity |
1346 "String of fontset spec of the standard fontset. | 1351 '("-ns-*-*-*-*-*-10-*-*-*-*-*-fontset-standard" |
1352 "latin:-*-Courier-*-*-*-*-10-*-*-*-*-*-iso10646-1" | |
1353 "han:-*-Kai-*-*-*-*-10-*-*-*-*-*-iso10646-1" | |
1354 "cyrillic:-*-Trebuchet$MS-*-*-*-*-10-*-*-*-*-*-iso10646-1") | |
1355 ",") | |
1356 "String of fontset spec of the standard fontset. | |
1347 This defines a fontset consisting of the Courier and other fonts that | 1357 This defines a fontset consisting of the Courier and other fonts that |
1348 come with OS X\". | 1358 come with OS X\". |
1349 See the documentation of `create-fontset-from-fontset-spec for the format.") | 1359 See the documentation of `create-fontset-from-fontset-spec for the format.") |
1350 | 1360 |
1351 ;; Conditional on new-fontset so bootstrapping works on non-GUI compiles | 1361 ;; Conditional on new-fontset so bootstrapping works on non-GUI compiles. |
1352 (if (fboundp 'new-fontset) | 1362 (if (fboundp 'new-fontset) |
1353 (progn | 1363 (progn |
1354 ;; Setup the default fontset. | 1364 ;; Setup the default fontset. |
1355 (setup-default-fontset) | 1365 (setup-default-fontset) |
1356 ;; Create the standard fontset. | 1366 ;; Create the standard fontset. |
1357 (create-fontset-from-fontset-spec ns-standard-fontset-spec t) | 1367 (create-fontset-from-fontset-spec ns-standard-fontset-spec t))) |
1358 )) | 1368 |
1359 | 1369 ;;(push (cons 'font "-ns-*-*-*-*-*-10-*-*-*-*-*-fontset-standard") |
1360 ;(setq default-frame-alist (cons (cons 'font "-ns-*-*-*-*-*-10-*-*-*-*-*-fontset-standard") default-frame-alist)) | 1370 ;; default-frame-alist) |
1361 | 1371 |
1362 ;; add some additional scripts to var we use for fontset generation | 1372 ;; Add some additional scripts to var we use for fontset generation. |
1363 (setq script-representative-chars | 1373 (setq script-representative-chars |
1364 (cons '(kana #xff8a) | 1374 (cons '(kana #xff8a) |
1365 (cons '(symbol #x2295 #x2287 #x25a1) | 1375 (cons '(symbol #x2295 #x2287 #x25a1) |
1366 script-representative-chars))) | 1376 script-representative-chars))) |
1367 | 1377 |
1368 | 1378 |
1369 ;;;; Pasteboard support. | 1379 ;;;; Pasteboard support. |
1370 | 1380 |
1371 (declare-function ns-get-cut-buffer-internal "nsselect.m" (buffer)) | 1381 (declare-function ns-get-cut-buffer-internal "nsselect.m" (buffer)) |
1380 "Store STRING into the NS server's pasteboard." | 1390 "Store STRING into the NS server's pasteboard." |
1381 ;; Check the data type of STRING. | 1391 ;; Check the data type of STRING. |
1382 (if (not (stringp string)) (error "Nonstring given to pasteboard")) | 1392 (if (not (stringp string)) (error "Nonstring given to pasteboard")) |
1383 (ns-store-cut-buffer-internal 'PRIMARY string)) | 1393 (ns-store-cut-buffer-internal 'PRIMARY string)) |
1384 | 1394 |
1385 ;;; We keep track of the last text selected here, so we can check the | 1395 ;; We keep track of the last text selected here, so we can check the |
1386 ;;; current selection against it, and avoid passing back our own text | 1396 ;; current selection against it, and avoid passing back our own text |
1387 ;;; from ns-pasteboard-value. | 1397 ;; from ns-pasteboard-value. |
1388 (defvar ns-last-selected-text nil) | 1398 (defvar ns-last-selected-text nil) |
1389 | 1399 |
1390 ;;; Put TEXT, a string, on the pasteboard. | |
1391 (defun ns-select-text (text &optional push) | 1400 (defun ns-select-text (text &optional push) |
1401 "Put TEXT, a string, on the pasteboard." | |
1392 ;; Don't send the pasteboard too much text. | 1402 ;; Don't send the pasteboard too much text. |
1393 ;; It becomes slow, and if really big it causes errors. | 1403 ;; It becomes slow, and if really big it causes errors. |
1394 (ns-set-pasteboard text) | 1404 (ns-set-pasteboard text) |
1395 (setq ns-last-selected-text text)) | 1405 (setq ns-last-selected-text text)) |
1396 | 1406 |
1397 ;;; Return the value of the current NS selection. For compatibility | 1407 ;; Return the value of the current NS selection. For compatibility |
1398 ;;; with older NS applications, this checks cut buffer 0 before | 1408 ;; with older NS applications, this checks cut buffer 0 before |
1399 ;;; retrieving the value of the primary selection. | 1409 ;; retrieving the value of the primary selection. |
1400 (defun ns-pasteboard-value () | 1410 (defun ns-pasteboard-value () |
1401 (let (text) | 1411 (let (text) |
1402 | 1412 |
1403 ;; Consult the selection, then the cut buffer. Treat empty strings | 1413 ;; Consult the selection, then the cut buffer. Treat empty strings |
1404 ;; as if they were unset. | 1414 ;; as if they were unset. |
1423 (defun ns-paste-secondary () | 1433 (defun ns-paste-secondary () |
1424 (interactive) | 1434 (interactive) |
1425 (insert (ns-get-cut-buffer-internal 'SECONDARY))) | 1435 (insert (ns-get-cut-buffer-internal 'SECONDARY))) |
1426 | 1436 |
1427 ;; PENDING: not sure what to do here.. for now interprog- are set in | 1437 ;; PENDING: not sure what to do here.. for now interprog- are set in |
1428 ;; init-fn-keys, and unsure whether these x- settings have an effect | 1438 ;; init-fn-keys, and unsure whether these x- settings have an effect. |
1429 ;;(setq interprogram-cut-function 'ns-select-text | 1439 ;;(setq interprogram-cut-function 'ns-select-text |
1430 ;; interprogram-paste-function 'ns-pasteboard-value) | 1440 ;; interprogram-paste-function 'ns-pasteboard-value) |
1431 ; these only needed if above not working | 1441 ;; These only needed if above not working. |
1432 (defalias 'x-select-text 'ns-select-text) | 1442 (defalias 'x-select-text 'ns-select-text) |
1433 (defalias 'x-cut-buffer-or-selection-value 'ns-pasteboard-value) | 1443 (defalias 'x-cut-buffer-or-selection-value 'ns-pasteboard-value) |
1434 (defalias 'x-disown-selection-internal 'ns-disown-selection-internal) | 1444 (defalias 'x-disown-selection-internal 'ns-disown-selection-internal) |
1435 (defalias 'x-get-selection-internal 'ns-get-selection-internal) | 1445 (defalias 'x-get-selection-internal 'ns-get-selection-internal) |
1436 (defalias 'x-own-selection-internal 'ns-own-selection-internal) | 1446 (defalias 'x-own-selection-internal 'ns-own-selection-internal) |
1476 ((eq bar-part 'ratio) | 1486 ((eq bar-part 'ratio) |
1477 (ns-scroll-bar-move event)) | 1487 (ns-scroll-bar-move event)) |
1478 ((eq bar-part 'handle) | 1488 ((eq bar-part 'handle) |
1479 (if (eq window (selected-window)) | 1489 (if (eq window (selected-window)) |
1480 (track-mouse (ns-scroll-bar-move event)) | 1490 (track-mouse (ns-scroll-bar-move event)) |
1481 ; track-mouse faster for selected window, slower for unselected | 1491 ;; track-mouse faster for selected window, slower for unselected. |
1482 (ns-scroll-bar-move event))) | 1492 (ns-scroll-bar-move event))) |
1483 (t | 1493 (t |
1484 (select-window window) | 1494 (select-window window) |
1485 (cond | 1495 (cond |
1486 ((eq bar-part 'up) | 1496 ((eq bar-part 'up) |
1514 (this-color nil) | 1524 (this-color nil) |
1515 (defined-colors nil)) | 1525 (defined-colors nil)) |
1516 (while all-colors | 1526 (while all-colors |
1517 (setq this-color (car all-colors) | 1527 (setq this-color (car all-colors) |
1518 all-colors (cdr all-colors)) | 1528 all-colors (cdr all-colors)) |
1519 ; (and (face-color-supported-p frame this-color t) | 1529 ;; (and (face-color-supported-p frame this-color t) |
1520 (setq defined-colors (cons this-color defined-colors))) | 1530 (setq defined-colors (cons this-color defined-colors))) ;;) |
1521 ;) | |
1522 defined-colors)) | 1531 defined-colors)) |
1523 (defalias 'x-defined-colors 'ns-defined-colors) | 1532 (defalias 'x-defined-colors 'ns-defined-colors) |
1524 (defalias 'xw-defined-colors 'ns-defined-colors) | 1533 (defalias 'xw-defined-colors 'ns-defined-colors) |
1525 | 1534 |
1526 (declare-function ns-set-alpha "nsfns.m" (color alpha)) | 1535 (declare-function ns-set-alpha "nsfns.m" (color alpha)) |
1605 (t | 1614 (t |
1606 (set-face-background face ns-input-color frame))))) | 1615 (set-face-background face ns-input-color frame))))) |
1607 | 1616 |
1608 | 1617 |
1609 | 1618 |
1610 ;; Misc aliases | 1619 ;; Misc aliases. |
1611 (defalias 'x-display-mm-width 'ns-display-mm-width) | 1620 (defalias 'x-display-mm-width 'ns-display-mm-width) |
1612 (defalias 'x-display-mm-height 'ns-display-mm-height) | 1621 (defalias 'x-display-mm-height 'ns-display-mm-height) |
1613 (defalias 'x-display-backing-store 'ns-display-backing-store) | 1622 (defalias 'x-display-backing-store 'ns-display-backing-store) |
1614 (defalias 'x-display-save-under 'ns-display-save-under) | 1623 (defalias 'x-display-save-under 'ns-display-save-under) |
1615 (defalias 'x-display-visual-class 'ns-display-visual-class) | 1624 (defalias 'x-display-visual-class 'ns-display-visual-class) |
1618 | 1627 |
1619 ;; Set some options to be as NS-like as possible. | 1628 ;; Set some options to be as NS-like as possible. |
1620 (setq frame-title-format t | 1629 (setq frame-title-format t |
1621 icon-title-format t) | 1630 icon-title-format t) |
1622 | 1631 |
1623 ;; Set up browser connectivity | 1632 ;; Set up browser connectivity. |
1624 (defvar browse-url-generic-program) | 1633 (defvar browse-url-generic-program) |
1625 | 1634 |
1626 (setq browse-url-browser-function 'browse-url-generic) | 1635 (setq browse-url-browser-function 'browse-url-generic) |
1627 (cond ((eq system-type 'darwin) | 1636 (setq browse-url-generic-program |
1628 (setq browse-url-generic-program "open")) | 1637 (cond ((eq system-type 'darwin) "open") |
1629 ;; otherwise, gnustep | 1638 ;; Otherwise, GNUstep. |
1630 (t | 1639 (t "gopen"))) |
1631 (setq browse-url-generic-program "gopen")) ) | |
1632 | 1640 |
1633 | 1641 |
1634 (defvar ns-initialized nil | 1642 (defvar ns-initialized nil |
1635 "Non-nil if NS windowing has been initialized.") | 1643 "Non-nil if NS windowing has been initialized.") |
1636 | 1644 |
1637 (declare-function ns-open-connection "nsfns.m" | 1645 (declare-function ns-open-connection "nsfns.m" |
1638 (display &optional resource_string must_succeed)) | 1646 (display &optional resource_string must_succeed)) |
1639 | 1647 |
1640 (declare-function ns-list-services "nsfns.m" ()) | 1648 (declare-function ns-list-services "nsfns.m" ()) |
1641 | 1649 |
1642 ;;; Do the actual NS Windows setup here; the above code just defines | 1650 ;; Do the actual NS Windows setup here; the above code just defines |
1643 ;;; functions and variables that we use now. | 1651 ;; functions and variables that we use now. |
1644 (defun ns-initialize-window-system () | 1652 (defun ns-initialize-window-system () |
1645 "Initialize Emacs for NS (Cocoa / GNUstep) windowing." | 1653 "Initialize Emacs for NS (Cocoa / GNUstep) windowing." |
1646 | 1654 |
1647 ; PENDING: not needed? | 1655 ;; PENDING: not needed? |
1648 (setq command-line-args (ns-handle-args command-line-args)) | 1656 (setq command-line-args (ns-handle-args command-line-args)) |
1649 | 1657 |
1650 (ns-open-connection (system-name) nil t) | 1658 (ns-open-connection (system-name) nil t) |
1651 | 1659 |
1652 (let ((services (ns-list-services))) | 1660 (dolist (service (ns-list-services)) |
1653 (while services | 1661 (if (eq (car service) 'undefined) |
1654 (if (eq (caar services) 'undefined) | 1662 (ns-define-service (cdr service)) |
1655 (ns-define-service (cdar services)) | 1663 (define-key global-map (vector (car service)) |
1656 (define-key global-map (vector (caar services)) | 1664 (ns-define-service (cdr service))))) |
1657 (ns-define-service (cdar services))) | |
1658 ) | |
1659 (setq services (cdr services)))) | |
1660 | 1665 |
1661 (if (and (eq (get-lisp-resource nil "NXAutoLaunch") t) | 1666 (if (and (eq (get-lisp-resource nil "NXAutoLaunch") t) |
1662 (eq (get-lisp-resource nil "HideOnAutoLaunch") t)) | 1667 (eq (get-lisp-resource nil "HideOnAutoLaunch") t)) |
1663 (add-hook 'after-init-hook 'ns-do-hide-emacs)) | 1668 (add-hook 'after-init-hook 'ns-do-hide-emacs)) |
1664 | 1669 |
1670 ;; FIXME: This will surely lead to "MODIFIED OUTSIDE CUSTOM" warnings. | |
1665 (menu-bar-mode (if (get-lisp-resource nil "Menus") 1 -1)) | 1671 (menu-bar-mode (if (get-lisp-resource nil "Menus") 1 -1)) |
1666 (mouse-wheel-mode 1) | 1672 (mouse-wheel-mode 1) |
1667 | 1673 |
1668 (setq ns-initialized t)) | 1674 (setq ns-initialized t)) |
1669 | 1675 |