|
|
1.1 ! root 1: ;; Parse switches controlling how Emacs interfaces with X window system. ! 2: ;; Copyright (C) 1986, 1988 Free Software Foundation, Inc. ! 3: ! 4: ;; This file is part of GNU Emacs. ! 5: ! 6: ;; GNU Emacs is distributed in the hope that it will be useful, ! 7: ;; but WITHOUT ANY WARRANTY. No author or distributor ! 8: ;; accepts responsibility to anyone for the consequences of using it ! 9: ;; or for whether it serves any particular purpose or works at all, ! 10: ;; unless he says so in writing. Refer to the GNU Emacs General Public ! 11: ;; License for full details. ! 12: ! 13: ;; Everyone is granted permission to copy, modify and redistribute ! 14: ;; GNU Emacs, but only under the conditions described in the ! 15: ;; GNU Emacs General Public License. A copy of this license is ! 16: ;; supposed to have been given to you along with GNU Emacs so you ! 17: ;; can know your rights and responsibilities. It should be in a ! 18: ;; file named COPYING. Among other things, the copyright notice ! 19: ;; and this notice must be preserved on all copies. ! 20: ! 21: (defconst window-system-version window-system-version ! 22: "*Window system version number now in use.") ! 23: ! 24: (defvar x-sigio-bug nil ! 25: "Non-NIL means don't use interrupts for input when using X.") ! 26: ! 27: (defvar x-processed-defaults nil ! 28: "Non-NIL means that user's X defaults have already been processed.") ! 29: ! 30: (defvar x-switches nil ! 31: "Alist of command switches and values for X window system interface. ! 32: You can set this in your init file, if you want some defaults ! 33: for these switches. Example: ! 34: (setq x-switches '((\"-r\" . t) (\"-font\" . \"foo\") (\"-b\" . \"8\"))) ! 35: This feature is currently broken for X11.") ! 36: ! 37: (if (= window-system-version 10) ! 38: (setq command-switch-alist ! 39: (append '(("-r" . x-handle-switch) ! 40: ("-i" . x-handle-switch) ! 41: ("-font" . x-handle-switch) ! 42: ("-w" . x-handle-switch) ! 43: ("-b" . x-handle-switch) ! 44: ("-ib" . x-handle-switch) ! 45: ("-fg" . x-handle-switch) ! 46: ("-bg" . x-handle-switch) ! 47: ("-bd" . x-handle-switch) ! 48: ("-cr" . x-handle-switch) ! 49: ("-ms" . x-handle-switch)) ! 50: command-switch-alist)) ! 51: (setq command-switch-alist ! 52: (append '(("-rn" . x-ignore-arg) ! 53: ("-r" . ignore) ! 54: ("-i" . ignore) ! 55: ("-rn" . x-ignore-arg) ! 56: ("-font" . x-ignore-arg) ! 57: ("-fn" . x-ignore-arg) ! 58: ("-wn" . x-ignore-arg) ! 59: ("-in" . x-ignore-arg) ! 60: ("-w" . x-ignore-arg) ! 61: ("-geometry" . x-ignore-arg) ! 62: ("-b" . x-ignore-arg) ! 63: ("-ib" . x-ignore-arg) ! 64: ("-fg" . x-ignore-arg) ! 65: ("-bg" . x-ignore-arg) ! 66: ("-bd" . x-ignore-arg) ! 67: ("-cr" . x-ignore-arg) ! 68: ("-ms" . x-ignore-arg)) ! 69: command-switch-alist))) ! 70: ! 71: (defun x-ignore-arg (&rest ignore) ! 72: (setq command-line-args-left (cdr command-line-args-left))) ! 73: ! 74: ;; This is run after the command args are parsed. ! 75: (defun x-handle-switch (switch) ! 76: (if (x-handle-switch-1 switch (car command-line-args-left)) ! 77: (setq command-line-args-left (cdr command-line-args-left)))) ! 78: ! 79: (defun x-handle-switch-1 (switch arg) ! 80: (cond ((string= switch "-r") ! 81: (x-flip-color) ! 82: nil) ! 83: ((string= switch "-i") ! 84: (x-set-icon t) ! 85: nil) ! 86: ((string= switch "-font") ! 87: (x-set-font arg) ! 88: t) ! 89: ((string= switch "-b") ! 90: (x-set-border-width (string-to-int arg)) ! 91: t) ! 92: ((string= switch "-ib") ! 93: (x-set-internal-border-width (string-to-int arg)) ! 94: t) ! 95: ((string= switch "-w") ! 96: (x-create-x-window arg) ! 97: t) ! 98: ((string= switch "-fg") ! 99: (x-set-foreground-color arg) ! 100: t) ! 101: ((string= switch "-bg") ! 102: (x-set-background-color arg) ! 103: t) ! 104: ((string= switch "-bd") ! 105: (x-set-border-color arg) ! 106: t) ! 107: ((string= switch "-cr") ! 108: (x-set-cursor-color arg) ! 109: t) ! 110: ((string= switch "-ms") ! 111: (x-set-mouse-color arg) ! 112: t))) ! 113: ! 114: ;; Convert a string of the form "WWxHH+XO+YO", ! 115: ;; where WW, HH, XO and YO are numerals, ! 116: ;; into a list (WW HH XO YO). ! 117: ;; "xHH" may be omitted; then 0 is used for HH. ! 118: ;; XO and YO may be preceded by - instead of + to make them negative. ! 119: ;; Either YO or both XO and YO may be omitted; zero is used. ! 120: (defun x-parse-edge-spec (arg) ! 121: (let ((cols-by-font 0) ! 122: (rows-by-font 0) ! 123: (xoffset 0) ! 124: (yoffset 0)) ! 125: (if (string-match "^=" arg) ! 126: (setq cols-by-font (x-extract-number)) ! 127: (error "Invalid X window size/position spec")) ! 128: (if (string-match "^x" arg) ;get rows-by-font ! 129: (setq rows-by-font (x-extract-number))) ! 130: (if (string-match "^[-+]" arg) ! 131: (setq xoffset (x-extract-number))) ! 132: (if (string-match "^[-+]" arg) ! 133: (setq yoffset (x-extract-number))) ! 134: (or (equal arg "") ! 135: (error "Invalid X window size/position spec")) ! 136: (list cols-by-font rows-by-font xoffset yoffset))) ! 137: ! 138: ;; Subroutine to extract the next numeral from the front of arg, ! 139: ;; returning it and shortening arg to remove its text. ! 140: ;; If arg is negative, subtract 1 before returning it. ! 141: (defun x-extract-number () ! 142: (if (string-match "^[x=]" arg) ! 143: (setq arg (substring arg 1))) ! 144: (or (string-match "[-+]?[0-9]+" arg) ! 145: (error "Invalid X window size/position spec")) ! 146: (prog1 ! 147: (+ (string-to-int arg) ! 148: (if (string-match "^-" arg) -1 0)) ! 149: (setq arg ! 150: (substring arg ! 151: (or (string-match "[^0-9]" arg 1) ! 152: (length arg)))))) ! 153: ! 154: (defun x-get-default-args () ! 155: (setq x-processed-defaults t) ! 156: (let (value) ! 157: (if (not (string= (setq value (x-get-default "bodyfont")) "")) ! 158: (x-handle-switch-1 "-font" value)) ! 159: (if (string-match "on" (x-get-default "bitmapicon")) ! 160: (x-handle-switch-1 "-i" t)) ! 161: (if (not (string= (setq value (x-get-default "borderwidth")) "")) ! 162: (x-handle-switch-1 "-b" value)) ! 163: (if (not (string= (setq value (x-get-default "internalborder")) "")) ! 164: (x-handle-switch-1 "-ib" value)) ! 165: (if (not (string= (setq value (x-get-default "foreground")) "")) ! 166: (x-handle-switch-1 "-fg" value)) ! 167: (if (not (string= (setq value (x-get-default "background")) "")) ! 168: (x-handle-switch-1 "-bg" value)) ! 169: (if (not (string= (setq value (x-get-default "border")) "")) ! 170: (x-handle-switch-1 "-bd" value)) ! 171: (if (not (string= (setq value (x-get-default "cursor")) "")) ! 172: (x-handle-switch-1 "-cr" value)) ! 173: (if (not (string= (setq value (x-get-default "mouse")) "")) ! 174: (x-handle-switch-1 "-ms" value)) ! 175: (if (string-match "on" (x-get-default "reversevideo")) ! 176: (x-handle-switch-1 "-r" t)))) ! 177: ! 178: (defun x-new-display (display) ! 179: "This function takes one argument, the display where you wish to ! 180: continue your editing session. Your current window will be unmapped and ! 181: the current display will be closed. The new X display will be opened and ! 182: the rubber-band outline of the new window will appear on the new X display." ! 183: (interactive "sDisplay to switch emacs to: ") ! 184: (x-change-display display) ! 185: (x-get-default-args)) ! 186: ! 187: ;; So far we have only defined some functions. ! 188: ;; Now we start processing X-related switches ! 189: ;; and redefining commands and variables, ! 190: ;; only if Emacs has been compiled to support direct interface to X. ! 191: ! 192: (if (eq window-system 'x) ! 193: (progn ! 194: (require 'x-mouse) ! 195: (if (= window-system-version 10) ! 196: (progn ! 197: ;; xterm.c depends on using interrupt-driven input. ! 198: (set-input-mode t nil) ! 199: ! 200: ;; Not defvar! This is not DEFINING this variable, just specifying ! 201: ;; a value for it. ! 202: (setq window-setup-hook 'x-pop-up-window) ! 203: ! 204: ;; Process switch settings made by .emacs file. ! 205: (while x-switches ! 206: (x-handle-switch-1 (car (car x-switches)) (cdr (car x-switches))) ! 207: (setq x-switches (cdr x-switches))))) ! 208: ! 209: ;; On certain systems, turn off use of sigio, because it's broken. ! 210: (if x-sigio-bug ! 211: (set-input-mode nil nil)) ! 212: ! 213: (put 'suspend-emacs 'disabled ! 214: "Suspending a program running in an X window is silly ! 215: and you would not be able to start it again. Just switch windows instead.\n") ! 216: (setq suspend-hook '(lambda () (error "Suspending an emacs running under X makes no sense"))) ! 217: (substitute-key-definition 'suspend-emacs nil global-map) ! 218: (substitute-key-definition 'suspend-emacs nil esc-map) ! 219: (substitute-key-definition 'suspend-emacs nil ctl-x-map) ! 220: ;; Not needed any more -- done in C. ! 221: ;; (if (not x-processed-defaults) (x-get-default-args)) ! 222: ))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.