|
|
1.1 ! root 1: ;; Parse switches controlling how Emacs interfaces with X window system. ! 2: ;; Copyright (C) 1985 Richard M. Stallman. ! 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: ! 22: (defvar x-switches nil ! 23: "Alist of command switches and values for X window system interface. ! 24: You can set this in your init file, if you want some defaults ! 25: for these switches. Example: ! 26: (setq x-switches '((\"-r\" . t) (\"-font\" . \"foo\") (\"-b\" . \"8\")))") ! 27: ! 28: (setq command-switch-alist ! 29: (append '(("-r" . x-handle-switch) ! 30: ("-i" . x-handle-switch) ! 31: ("-font" . x-handle-switch) ! 32: ("-w" . x-handle-switch) ! 33: ("-d" . x-handle-switch) ! 34: ("-b" . x-handle-switch) ! 35: ("-fg" . x-handle-switch) ! 36: ("-bg" . x-handle-switch) ! 37: ("-bd" . x-handle-switch) ! 38: ("-cr" . x-handle-switch) ! 39: ("-ms" . x-handle-switch)) ! 40: command-switch-alist)) ! 41: ! 42: ;; This is run after the command args are parsed. ! 43: (defun x-handle-switch (switch) ! 44: (if (x-handle-switch-1 switch (car command-line-args)) ! 45: (setq command-line-args (cdr command-line-args)))) ! 46: ! 47: (defun x-handle-switch-1 (switch arg) ! 48: (cond ((string= switch "-r") ! 49: (x-flip-color) ! 50: nil) ! 51: ((string= switch "-i") ! 52: (x-set-icon t) ! 53: nil) ! 54: ((string= switch "-font") ! 55: (x-set-font arg) ! 56: t) ! 57: ((string= switch "-b") ! 58: (x-set-border-width (string-to-int arg)) ! 59: t) ! 60: ((string= switch "-d") ! 61: (x-new-display arg) ! 62: t) ! 63: ((string= switch "-w") ! 64: (x-create-x-window arg) ! 65: t) ! 66: ((string= switch "-fg") ! 67: (x-set-foreground-color arg) ! 68: t) ! 69: ((string= switch "-bg") ! 70: (x-set-background-color arg) ! 71: t) ! 72: ((string= switch "-bd") ! 73: (x-set-border-color arg) ! 74: t) ! 75: ((string= switch "-cr") ! 76: (x-set-cursor-color arg) ! 77: t) ! 78: ((string= switch "-ms") ! 79: (x-set-mouse-color arg) ! 80: t))) ! 81: ! 82: ;; Convert a string of the form "WWxHH+XO+YO", ! 83: ;; where WW, HH, XO and YO are numerals, ! 84: ;; into a list (WW HH XO YO). ! 85: ;; "xHH" may be omitted; then 0 is used for HH. ! 86: ;; XO and YO may be preceded by - instead of + to make them negative. ! 87: ;; Either YO or both XO and YO may be omitted; zero is used. ! 88: (defun x-parse-edge-spec (arg) ! 89: (let ((cols-by-font 0) ! 90: (rows-by-font 0) ! 91: (xoffset 0) ! 92: (yoffset 0)) ! 93: (if (string-match "^=" arg) ! 94: (setq cols-by-font (x-extract-number)) ! 95: (error "Invalid X window size/position spec")) ! 96: (if (string-match "^x" arg) ;get rows-by-font ! 97: (setq rows-by-font (x-extract-number))) ! 98: (if (string-match "^[-+]" arg) ! 99: (setq xoffset (x-extract-number))) ! 100: (if (string-match "^[-+]" arg) ! 101: (setq yoffset (x-extract-number))) ! 102: (or (equal arg "") ! 103: (error "Invalid X window size/position spec")) ! 104: (list cols-by-font rows-by-font xoffset yoffset))) ! 105: ! 106: ;; Subroutine to extract the next numeral from the front of arg, ! 107: ;; returning it and shortening arg to remove its text. ! 108: ;; If arg is negative, subtract 1 before returning it. ! 109: (defun x-extract-number () ! 110: (if (string-match "^[x=]" arg) ! 111: (setq arg (substring arg 1))) ! 112: (or (string-match "[-+]?[0-9]+" arg) ! 113: (error "Invalid X window size/position spec")) ! 114: (prog1 ! 115: (+ (string-to-int arg) ! 116: (if (string-match "^-" arg) -1 0)) ! 117: (setq arg ! 118: (substring arg ! 119: (or (string-match "[^0-9]" arg 1) ! 120: (length arg)))))) ! 121: ! 122: (defun x-get-default-args () ! 123: (let (value) ! 124: (if (not (string= (setq value (x-get-default "bodyfont")) "")) ! 125: (x-handle-switch-1 "-font" value)) ! 126: (if (string-match "On" (x-get-default "reversevideo")) ! 127: (x-handle-switch-1 "-r" t)) ! 128: (if (string-match "On" (x-get-default "bitmapicon")) ! 129: (x-handle-switch-1 "-i" t)) ! 130: (if (not (string= (setq value (x-get-default "borderwidth")) "")) ! 131: (x-handle-switch-1 "-b" value)) ! 132: (if (not (string= (setq value (x-get-default "foreground")) "")) ! 133: (x-handle-switch-1 "-fg" value)) ! 134: (if (not (string= (setq value (x-get-default "background")) "")) ! 135: (x-handle-switch-1 "-bg" value)) ! 136: (if (not (string= (setq value (x-get-default "border")) "")) ! 137: (x-handle-switch-1 "-bd" value)) ! 138: (if (not (string= (setq value (x-get-default "cursor")) "")) ! 139: (x-handle-switch-1 "-cr" value)) ! 140: (if (not (string= (setq value (x-get-default "mouse")) "")) ! 141: (x-handle-switch-1 "-ms" value)))) ! 142: ! 143: (defun x-new-display (display) ! 144: "This function takes one argument, the display where you wish to ! 145: continue your editing session. Your current window will be unmapped and ! 146: the current display will be closed. The new X display will be opened and ! 147: the rubber-band outline of the new window will appear on the new X display." ! 148: (interactive "sDisplay to switch emacs to: ") ! 149: (x-change-display display) ! 150: (x-get-default-args)) ! 151: ! 152: ;; So far we have only defined some functions. ! 153: ;; Now we start processing X-related switches ! 154: ;; and redefining commands and variables, ! 155: ;; only if Emacs has been compiled to support direct interface to X. ! 156: ! 157: (if (fboundp 'x-change-display) ! 158: (progn ! 159: ;; xterm.c depends on using interrupt-driven input. ! 160: (set-input-mode t nil) ! 161: ! 162: ;; Not defvar! This is not DEFINING this variable, just specifying ! 163: ;; a value for it. ! 164: (setq term-setup-hook 'x-pop-up-window) ! 165: ! 166: (load "x-mouse" t t) ! 167: (put 'suspend-emacs 'disabled t) ! 168: (global-set-key "\C-z" 'undefined) ! 169: (global-set-key "\C-x\C-z" 'undefined) ! 170: ! 171: (x-get-default-args) ! 172: ! 173: ;; If used has .Xdefaults file, process switch settings for Emacs ! 174: ;; recorded there. ! 175: ;;(if user ! 176: ;; (let ((Xdefs-file (concat "~" user "/.Xdefaults"))) ! 177: ;; (if (file-exists-p Xdefs-file) ! 178: ;; (x-get-default-args Xdefs-file)))) ! 179: ! 180: ;; Process switch settings made by .emacs file. ! 181: (while x-switches ! 182: (x-handle-switch-1 (car (car x-switches)) (cdr (car x-switches))) ! 183: (setq x-switches (cdr x-switches))) ! 184: ))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.