|
|
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.