summaryrefslogtreecommitdiff
path: root/lisp/term/x-win.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/term/x-win.el')
-rw-r--r--lisp/term/x-win.el817
1 files changed, 212 insertions, 605 deletions
diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el
index feff6de1865..5d7670a66ac 100644
--- a/lisp/term/x-win.el
+++ b/lisp/term/x-win.el
@@ -1,615 +1,222 @@
;; Parse switches controlling how Emacs interfaces with X window system.
-;; Copyright (C) 1990 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1988 Free Software Foundation, Inc.
;; This file is part of GNU Emacs.
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY. No author or distributor
-;; accepts responsibility to anyone for the consequences of using it
-;; or for whether it serves any particular purpose or works at all,
-;; unless he says so in writing. Refer to the GNU Emacs General Public
-;; License for full details.
-
-;; Everyone is granted permission to copy, modify and redistribute
-;; GNU Emacs, but only under the conditions described in the
-;; GNU Emacs General Public License. A copy of this license is
-;; supposed to have been given to you along with GNU Emacs so you
-;; can know your rights and responsibilities. It should be in a
-;; file named COPYING. Among other things, the copyright notice
-;; and this notice must be preserved on all copies.
-
-
-;; X-win.el: this file is loaded from ../lisp/startup.el when it recognizes
-;; that X windows are to be used. Command line switches are parsed and those
-;; pertaining to X are processed and removed from the command line. The
-;; X display is opened and hooks are set for popping up the initial window.
-
-;; startup.el will then examine startup files, and eventually call the hooks
-;; which create the first window (s).
-
-;; These are the standard X switches from the Xt Initialize.c file of
-;; Release 4.
-
-;; Command line Resource Manager string
-
-;; +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
-;; -iconic .iconic
-;; -name .name
-;; -reverse *reverseVideo
-;; -rv *reverseVideo
-;; -selectionTimeout .selectionTimeout
-;; -synchronous *synchronous
-;; -title .title
-;; -xrm
-
-;; An alist of X options and the function which handles them. See
-;; ../startup.el.
-
-;; This is a temporary work-around while we the separate keymap
-;; stuff isn't yet fixed. These variables aren't used anymore,
-;; but the lisp code wants them to exist. -JimB
-(setq global-mouse-map (make-sparse-keymap))
-(setq global-function-map (make-sparse-keymap))
-
-(setq command-switch-alist
- (append '(("-dm" . x-establish-daemon-mode)
- ("-bw" . x-handle-numeric-switch)
- ("-d" . x-handle-display)
- ("-display" . x-handle-display)
- ("-name" . x-handle-switch)
- ("-T" . x-handle-switch)
- ("-r" . x-handle-switch)
- ("-rv" . x-handle-switch)
- ("-reverse" . x-handle-switch)
- ("-fn" . x-handle-switch)
- ("-font" . x-handle-switch)
- ("-ib" . x-handle-switch)
- ("-g" . x-handle-geometry)
- ("-geometry" . x-handle-geometry)
- ("-fg" . x-handle-switch)
- ("-foreground" . x-handle-switch)
- ("-bg" . x-handle-switch)
- ("-background" . x-handle-switch)
- ("-ms" . x-handle-switch)
- ("-ib" . x-handle-switch)
- ("-iconic" . x-handle-switch)
- ("-cr" . x-handle-switch)
- ("-vb" . x-handle-switch)
- ("-hb" . x-handle-switch)
- ("-bd" . x-handle-switch))
- command-switch-alist))
-
-(defvar x-switches-specified nil)
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 1, or (at your option)
+;; any later version.
-(defconst x-switch-definitions
- '(("-name" name)
- ("-T" name)
- ("-r" lose)
- ("-rv" lose)
- ("-reverse" lose)
- ("-fn" font)
- ("-font" font)
- ("-ib" internal-border-width)
- ("-fg" foreground-color)
- ("-foreground" foreground-color)
- ("-bg" background-color)
- ("-background" background-color)
- ("-ms" mouse-color)
- ("-cr" cursor-color)
- ("-ib" icon-type t)
- ("-iconic" iconic-startup t)
- ("-vb" vertical-scroll-bar t)
- ("-hb" horizontal-scroll-bar t)
- ("-bd" border-color)
- ("-bw" border-width)))
-
-;; Handler for switches of the form "-switch value" or "-switch".
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+(defconst window-system-version window-system-version
+ "*Window system version number now in use.")
+
+(defvar x-sigio-bug nil
+ "Non-NIL means don't use interrupts for input when using X.")
+
+(defvar x-processed-defaults nil
+ "Non-NIL means that user's X defaults have already been processed.")
+
+(defvar x-switches nil
+ "Alist of command switches and values for X window system interface.
+You can set this in your init file, if you want some defaults
+for these switches. Example:
+ (setq x-switches '((\"-r\" . t) (\"-font\" . \"foo\") (\"-b\" . \"8\")))
+This feature is currently broken for X11.")
+
+(if (= window-system-version 10)
+ (setq command-switch-alist
+ (append '(("-r" . x-handle-switch)
+ ("-i" . x-handle-switch)
+ ("-font" . x-handle-switch)
+ ("-w" . x-handle-switch)
+ ("-b" . x-handle-switch)
+ ("-ib" . x-handle-switch)
+ ("-fg" . x-handle-switch)
+ ("-bg" . x-handle-switch)
+ ("-bd" . x-handle-switch)
+ ("-cr" . x-handle-switch)
+ ("-ms" . x-handle-switch))
+ command-switch-alist))
+ (setq command-switch-alist
+ (append '(("-rn" . x-ignore-arg)
+ ("-xrm" . x-ignore-arg)
+ ("-r" . ignore)
+ ("-i" . ignore)
+ ("-rn" . x-ignore-arg)
+ ("-font" . x-ignore-arg)
+ ("-fn" . x-ignore-arg)
+ ("-wn" . x-ignore-arg)
+ ("-in" . x-ignore-arg)
+ ("-w" . x-ignore-arg)
+ ("-geometry" . x-ignore-arg)
+ ("-b" . x-ignore-arg)
+ ("-ib" . x-ignore-arg)
+ ("-fg" . x-ignore-arg)
+ ("-bg" . x-ignore-arg)
+ ("-bd" . x-ignore-arg)
+ ("-cr" . x-ignore-arg)
+ ("-ms" . x-ignore-arg))
+ command-switch-alist)))
+
+(defun x-ignore-arg (&rest ignore)
+ (setq command-line-args-left (cdr command-line-args-left)))
+
+;; This is run after the command args are parsed.
(defun x-handle-switch (switch)
- (let ((aelt (assoc switch x-switch-definitions)))
- (if aelt
- (if (nth 2 aelt)
- (setq x-switches-specified
- (cons (cons (nth 1 aelt) (nth 2 aelt))
- x-switches-specified))
- (setq x-switches-specified
- (cons (cons (nth 1 aelt)
- (car x-invocation-args))
- x-switches-specified)
- x-invocation-args (cdr x-invocation-args))))))
-
-;; Handler for switches of the form "-switch n"
-(defun x-handle-numeric-switch (switch)
- (let ((aelt (assoc switch x-switch-definitions)))
- (if aelt
- (setq x-switches-specified
- (cons (cons (nth 1 aelt)
- (string-to-int (car x-invocation-args)))
- x-switches-specified)
- x-invocation-args
- (cdr x-invocation-args)))))
-
-;; Handle the geometry option
-(defun x-handle-geometry (switch)
- (setq x-switches-specified (append x-switches-specified
- (x-geometry (car x-invocation-args)))
- x-invocation-args (cdr x-invocation-args)))
-
-;; The daemon stuff isn't really useful at the moment.
-(defvar x-daemon-mode nil
- "When set, means initially create just a minibuffer.")
-
-(defun x-establish-daemon-mode (switch)
- (setq x-daemon-mode t))
-
-(defvar x-display-name nil
- "The X display name specifying server and X screen.")
-
-(defun x-handle-display (switch)
- (setq x-display-name (car x-invocation-args)
- x-invocation-args (cdr x-invocation-args)))
-
-;; Here the X-related command line options are processed, before the user's
-;; startup file is loaded. These are present in ARGS (see startup.el).
-;; 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).
-
-;; When finished, only things not pertaining to X (e.g., "-q", filenames)
-;; are left in ARGS
-
-(defvar x-invocation-args nil)
+ (if (x-handle-switch-1 switch (car command-line-args-left))
+ (setq command-line-args-left (cdr command-line-args-left))))
+
+(defun x-handle-switch-1 (switch arg)
+ (cond ((string= switch "-r")
+ (x-flip-color)
+ nil)
+ ((string= switch "-i")
+ (x-set-icon t)
+ nil)
+ ((string= switch "-font")
+ (x-set-font arg)
+ t)
+ ((string= switch "-b")
+ (x-set-border-width (string-to-int arg))
+ t)
+ ((string= switch "-ib")
+ (x-set-internal-border-width (string-to-int arg))
+ t)
+ ((string= switch "-w")
+ (x-create-x-window arg)
+ t)
+ ((string= switch "-fg")
+ (x-set-foreground-color arg)
+ t)
+ ((string= switch "-bg")
+ (x-set-background-color arg)
+ t)
+ ((string= switch "-bd")
+ (x-set-border-color arg)
+ t)
+ ((string= switch "-cr")
+ (x-set-cursor-color arg)
+ t)
+ ((string= switch "-ms")
+ (x-set-mouse-color arg)
+ t)))
+
+;; Convert a string of the form "WWxHH+XO+YO",
+;; where WW, HH, XO and YO are numerals,
+;; into a list (WW HH XO YO).
+;; "xHH" may be omitted; then 0 is used for HH.
+;; XO and YO may be preceded by - instead of + to make them negative.
+;; Either YO or both XO and YO may be omitted; zero is used.
+(defun x-parse-edge-spec (arg)
+ (let ((cols-by-font 0)
+ (rows-by-font 0)
+ (xoffset 0)
+ (yoffset 0))
+ (if (string-match "^=" arg)
+ (setq cols-by-font (x-extract-number))
+ (error "Invalid X window size/position spec"))
+ (if (string-match "^x" arg) ;get rows-by-font
+ (setq rows-by-font (x-extract-number)))
+ (if (string-match "^[-+]" arg)
+ (setq xoffset (x-extract-number)))
+ (if (string-match "^[-+]" arg)
+ (setq yoffset (x-extract-number)))
+ (or (equal arg "")
+ (error "Invalid X window size/position spec"))
+ (list cols-by-font rows-by-font xoffset yoffset)))
+
+;; Subroutine to extract the next numeral from the front of arg,
+;; returning it and shortening arg to remove its text.
+;; If arg is negative, subtract 1 before returning it.
+(defun x-extract-number ()
+ (if (string-match "^[x=]" arg)
+ (setq arg (substring arg 1)))
+ (or (string-match "[-+]?[0-9]+" arg)
+ (error "Invalid X window size/position spec"))
+ (prog1
+ (+ (string-to-int arg)
+ (if (string-match "^-" arg) -1 0))
+ (setq arg
+ (substring arg
+ (or (string-match "[^0-9]" arg 1)
+ (length arg))))))
+
+(defun x-get-default-args ()
+ (setq x-processed-defaults t)
+ (let (value)
+ (if (not (string= (setq value (x-get-default "bodyfont")) ""))
+ (x-handle-switch-1 "-font" value))
+ (if (string-match "on" (x-get-default "bitmapicon"))
+ (x-handle-switch-1 "-i" t))
+ (if (not (string= (setq value (x-get-default "borderwidth")) ""))
+ (x-handle-switch-1 "-b" value))
+ (if (not (string= (setq value (x-get-default "internalborder")) ""))
+ (x-handle-switch-1 "-ib" value))
+ (if (not (string= (setq value (x-get-default "foreground")) ""))
+ (x-handle-switch-1 "-fg" value))
+ (if (not (string= (setq value (x-get-default "background")) ""))
+ (x-handle-switch-1 "-bg" value))
+ (if (not (string= (setq value (x-get-default "border")) ""))
+ (x-handle-switch-1 "-bd" value))
+ (if (not (string= (setq value (x-get-default "cursor")) ""))
+ (x-handle-switch-1 "-cr" value))
+ (if (not (string= (setq value (x-get-default "mouse")) ""))
+ (x-handle-switch-1 "-ms" value))
+ (if (string-match "on" (x-get-default "reversevideo"))
+ (x-handle-switch-1 "-r" t))))
+
+;; So far we have only defined some functions.
+;; Now we start processing X-related switches
+;; and redefining commands and variables,
+;; only if Emacs has been compiled to support direct interface to X.
(if (eq window-system 'x)
(progn
- (setq window-setup-hook 'x-pop-initial-window
- x-invocation-args args
- args nil)
(require 'x-mouse)
- (require 'screen)
- (setq suspend-hook
- '(lambda ()
- (error "Suspending an emacs running under X makes no sense")))
- (define-key global-map "" 'iconify-emacs)
- (while x-invocation-args
- (let* ((this-switch (car x-invocation-args))
- (aelt (assoc this-switch command-switch-alist)))
- (setq x-invocation-args (cdr x-invocation-args))
- (if aelt
- (funcall (cdr aelt) this-switch)
- (setq args (cons this-switch args)))))
- (setq args (nreverse args))
- (x-open-connection (or x-display-name
- (setq x-display-name (getenv "DISPLAY"))))
- ;;
- ;; This is the place to handle Xresources
- ;;
- )
- (error "Loading x-win.el but not compiled for X"))
-
-
-;; This is the function which creates the first X window. It is called
-;; from startup.el after the user's init file is processed.
-
-(defun x-pop-initial-window ()
- ;; xterm.c depends on using interrupt-driven input.
- (set-input-mode t nil t)
- (setq mouse-motion-handler 'x-track-pointer)
- (setq x-switches-specified (append x-switches-specified
- initial-screen-alist
- screen-default-alist))
- ;; see screen.el for this function
- (pop-initial-screen x-switches-specified)
- (delete-screen terminal-screen))
-
-
-;;
-;; Standard X cursor shapes, courtesy of Mr. Fox, who wanted ALL of them.
-;;
-
-(defconst x-pointer-X-cursor 0)
-(defconst x-pointer-arrow 2)
-(defconst x-pointer-based-arrow-down 4)
-(defconst x-pointer-based-arrow-up 6)
-(defconst x-pointer-boat 8)
-(defconst x-pointer-bogosity 10)
-(defconst x-pointer-bottom-left-corner 12)
-(defconst x-pointer-bottom-right-corner 14)
-(defconst x-pointer-bottom-side 16)
-(defconst x-pointer-bottom-tee 18)
-(defconst x-pointer-box-spiral 20)
-(defconst x-pointer-center-ptr 22)
-(defconst x-pointer-circle 24)
-(defconst x-pointer-clock 26)
-(defconst x-pointer-coffee-mug 28)
-(defconst x-pointer-cross 30)
-(defconst x-pointer-cross-reverse 32)
-(defconst x-pointer-crosshair 34)
-(defconst x-pointer-diamond-cross 36)
-(defconst x-pointer-dot 38)
-(defconst x-pointer-dotbox 40)
-(defconst x-pointer-double-arrow 42)
-(defconst x-pointer-draft-large 44)
-(defconst x-pointer-draft-small 46)
-(defconst x-pointer-draped-box 48)
-(defconst x-pointer-exchange 50)
-(defconst x-pointer-fleur 52)
-(defconst x-pointer-gobbler 54)
-(defconst x-pointer-gumby 56)
-(defconst x-pointer-hand1 58)
-(defconst x-pointer-hand2 60)
-(defconst x-pointer-heart 62)
-(defconst x-pointer-icon 64)
-(defconst x-pointer-iron-cross 66)
-(defconst x-pointer-left-ptr 68)
-(defconst x-pointer-left-side 70)
-(defconst x-pointer-left-tee 72)
-(defconst x-pointer-leftbutton 74)
-(defconst x-pointer-ll-angle 76)
-(defconst x-pointer-lr-angle 78)
-(defconst x-pointer-man 80)
-(defconst x-pointer-middlebutton 82)
-(defconst x-pointer-mouse 84)
-(defconst x-pointer-pencil 86)
-(defconst x-pointer-pirate 88)
-(defconst x-pointer-plus 90)
-(defconst x-pointer-question-arrow 92)
-(defconst x-pointer-right-ptr 94)
-(defconst x-pointer-right-side 96)
-(defconst x-pointer-right-tee 98)
-(defconst x-pointer-rightbutton 100)
-(defconst x-pointer-rtl-logo 102)
-(defconst x-pointer-sailboat 104)
-(defconst x-pointer-sb-down-arrow 106)
-(defconst x-pointer-sb-h-double-arrow 108)
-(defconst x-pointer-sb-left-arrow 110)
-(defconst x-pointer-sb-right-arrow 112)
-(defconst x-pointer-sb-up-arrow 114)
-(defconst x-pointer-sb-v-double-arrow 116)
-(defconst x-pointer-shuttle 118)
-(defconst x-pointer-sizing 120)
-(defconst x-pointer-spider 122)
-(defconst x-pointer-spraycan 124)
-(defconst x-pointer-star 126)
-(defconst x-pointer-target 128)
-(defconst x-pointer-tcross 130)
-(defconst x-pointer-top-left-arrow 132)
-(defconst x-pointer-top-left-corner 134)
-(defconst x-pointer-top-right-corner 136)
-(defconst x-pointer-top-side 138)
-(defconst x-pointer-top-tee 140)
-(defconst x-pointer-trek 142)
-(defconst x-pointer-ul-angle 144)
-(defconst x-pointer-umbrella 146)
-(defconst x-pointer-ur-angle 148)
-(defconst x-pointer-watch 150)
-(defconst x-pointer-xterm 152)
-
-;;
-;; Available colors
-;;
-
-(defvar x-colors '("aquamarine"
- "Aquamarine"
- "medium aquamarine"
- "MediumAquamarine"
- "black"
- "Black"
- "blue"
- "Blue"
- "cadet blue"
- "CadetBlue"
- "cornflower blue"
- "CornflowerBlue"
- "dark slate blue"
- "DarkSlateBlue"
- "light blue"
- "LightBlue"
- "light steel blue"
- "LightSteelBlue"
- "medium blue"
- "MediumBlue"
- "medium slate blue"
- "MediumSlateBlue"
- "midnight blue"
- "MidnightBlue"
- "navy blue"
- "NavyBlue"
- "navy"
- "Navy"
- "sky blue"
- "SkyBlue"
- "slate blue"
- "SlateBlue"
- "steel blue"
- "SteelBlue"
- "coral"
- "Coral"
- "cyan"
- "Cyan"
- "firebrick"
- "Firebrick"
- "brown"
- "Brown"
- "gold"
- "Gold"
- "goldenrod"
- "Goldenrod"
- "medium goldenrod"
- "MediumGoldenrod"
- "green"
- "Green"
- "dark green"
- "DarkGreen"
- "dark olive green"
- "DarkOliveGreen"
- "forest green"
- "ForestGreen"
- "lime green"
- "LimeGreen"
- "medium forest green"
- "MediumForestGreen"
- "medium sea green"
- "MediumSeaGreen"
- "medium spring green"
- "MediumSpringGreen"
- "pale green"
- "PaleGreen"
- "sea green"
- "SeaGreen"
- "spring green"
- "SpringGreen"
- "yellow green"
- "YellowGreen"
- "dark slate grey"
- "DarkSlateGrey"
- "dark slate gray"
- "DarkSlateGray"
- "dim grey"
- "DimGrey"
- "dim gray"
- "DimGray"
- "light grey"
- "LightGrey"
- "light gray"
- "LightGray"
- "gray"
- "grey"
- "Gray"
- "Grey"
- "khaki"
- "Khaki"
- "magenta"
- "Magenta"
- "maroon"
- "Maroon"
- "orange"
- "Orange"
- "orchid"
- "Orchid"
- "dark orchid"
- "DarkOrchid"
- "medium orchid"
- "MediumOrchid"
- "pink"
- "Pink"
- "plum"
- "Plum"
- "red"
- "Red"
- "indian red"
- "IndianRed"
- "medium violet red"
- "MediumVioletRed"
- "orange red"
- "OrangeRed"
- "violet red"
- "VioletRed"
- "salmon"
- "Salmon"
- "sienna"
- "Sienna"
- "tan"
- "Tan"
- "thistle"
- "Thistle"
- "turquoise"
- "Turquoise"
- "dark turquoise"
- "DarkTurquoise"
- "medium turquoise"
- "MediumTurquoise"
- "violet"
- "Violet"
- "blue violet"
- "BlueViolet"
- "wheat"
- "Wheat"
- "white"
- "White"
- "yellow"
- "Yellow"
- "green yellow"
- "GreenYellow")
- "The full list of X colors from the rgb.text file.")
-
-(defun x-defined-colors ()
- "Return a list of colors supported by the current X-Display."
- (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 (x-defined-color this-color)
- (setq defined-colors (cons this-color defined-colors))))
- defined-colors))
-
-
-;;
-;; Function key processing under X. Function keys are received through
-;; in the input stream as Lisp symbols.
-;;
-
-(defun define-function-key (map sym definition)
- (let ((exist (assq sym (cdr map))))
- (if exist
- (setcdr exist definition)
- (setcdr map
- (cons (cons sym definition)
- (cdr map))))))
-
-;; For unused keysyms. If this happens, it's probably a server or
-;; Xlib bug.
-
-(defun weird-x-keysym ()
- (interactive)
- (error "Bizarre X keysym received."))
-(define-function-key global-function-map 'xk-not-serious 'weird-x-keysym)
-
-;; Keypad type things
-
-(define-function-key global-function-map 'xk-home 'beginning-of-line)
-(define-function-key global-function-map 'xk-left 'backward-char)
-(define-function-key global-function-map 'xk-up 'previous-line)
-(define-function-key global-function-map 'xk-right 'forward-char)
-(define-function-key global-function-map 'xk-down 'next-line)
-(define-function-key global-function-map 'xk-prior 'previous-line)
-(define-function-key global-function-map 'xk-next 'next-line)
-(define-function-key global-function-map 'xk-end 'end-of-line)
-(define-function-key global-function-map 'xk-begin 'beginning-of-line)
-
- ;; IsMiscFunctionKey
-
-(define-function-key global-function-map 'xk-select nil)
-(define-function-key global-function-map 'xk-print nil)
-(define-function-key global-function-map 'xk-execute nil)
-(define-function-key global-function-map 'xk-insert nil)
-(define-function-key global-function-map 'xk-undo nil)
-(define-function-key global-function-map 'xk-redo nil)
-(define-function-key global-function-map 'xk-menu nil)
-(define-function-key global-function-map 'xk-find nil)
-(define-function-key global-function-map 'xk-cancel nil)
-(define-function-key global-function-map 'xk-help nil)
-(define-function-key global-function-map 'xk-break nil)
-
- ;; IsKeypadKey
-
-(define-function-key global-function-map 'xk-kp-space
- '(lambda nil (interactive)
- (insert " ")))
-(define-function-key global-function-map 'xk-kp-tab
- '(lambda nil (interactive)
- (insert "\t")))
-(define-function-key global-function-map 'xk-kp-enter
- '(lambda nil (interactive)
- (insert "\n")))
-
-(define-function-key global-function-map 'xk-kp-f1 nil)
-(define-function-key global-function-map 'xk-kp-f2 nil)
-(define-function-key global-function-map 'xk-kp-f3 nil)
-(define-function-key global-function-map 'xk-kp-f4 nil)
-
-(define-function-key global-function-map 'xk-kp-equal
- '(lambda nil (interactive)
- (insert "=")))
-(define-function-key global-function-map 'xk-kp-multiply
- '(lambda nil (interactive)
- (insert "*")))
-(define-function-key global-function-map 'xk-kp-add
- '(lambda nil (interactive)
- (insert "+")))
-(define-function-key global-function-map 'xk-kp-separator
- '(lambda nil (interactive)
- (insert ";")))
-(define-function-key global-function-map 'xk-kp-subtract
- '(lambda nil (interactive)
- (insert "-")))
-(define-function-key global-function-map 'xk-kp-decimal
- '(lambda nil (interactive)
- (insert ".")))
-(define-function-key global-function-map 'xk-kp-divide
- '(lambda nil (interactive)
- (insert "/")))
-
-(define-function-key global-function-map 'xk-kp-0
- '(lambda nil (interactive)
- (insert "0")))
-(define-function-key global-function-map 'xk-kp-1
- '(lambda nil (interactive)
- (insert "1")))
-(define-function-key global-function-map 'xk-kp-2
- '(lambda nil (interactive)
- (insert "2")))
-(define-function-key global-function-map 'xk-kp-3
- '(lambda nil (interactive)
- (insert "3")))
-(define-function-key global-function-map 'xk-kp-4
- '(lambda nil (interactive)
- (insert "4")))
-(define-function-key global-function-map 'xk-kp-5
- '(lambda nil (interactive)
- (insert "5")))
-(define-function-key global-function-map 'xk-kp-6
- '(lambda nil (interactive)
- (insert "6")))
-(define-function-key global-function-map 'xk-kp-7
- '(lambda nil (interactive)
- (insert "7")))
-(define-function-key global-function-map 'xk-kp-8
- '(lambda nil (interactive)
- (insert "8")))
-(define-function-key global-function-map 'xk-kp-9
- '(lambda nil (interactive)
- (insert "9")))
-
- ;; IsFunctionKey
-
-(define-function-key global-function-map 'xk-f1 'rmail)
-(define-function-key global-function-map 'xk-f2 nil)
-(define-function-key global-function-map 'xk-f3 nil)
-(define-function-key global-function-map 'xk-f4 nil)
-(define-function-key global-function-map 'xk-f5 nil)
-(define-function-key global-function-map 'xk-f6 nil)
-(define-function-key global-function-map 'xk-f7 nil)
-(define-function-key global-function-map 'xk-f8 nil)
-(define-function-key global-function-map 'xk-f9 nil)
-(define-function-key global-function-map 'xk-f10 nil)
-(define-function-key global-function-map 'xk-f11 nil)
-(define-function-key global-function-map 'xk-f12 nil)
-(define-function-key global-function-map 'xk-f13 nil)
-(define-function-key global-function-map 'xk-f14 nil)
-(define-function-key global-function-map 'xk-f15 nil)
-(define-function-key global-function-map 'xk-f16 nil)
-(define-function-key global-function-map 'xk-f17 nil)
-(define-function-key global-function-map 'xk-f18 nil)
-(define-function-key global-function-map 'xk-f19 nil)
-(define-function-key global-function-map 'xk-f20 nil)
-(define-function-key global-function-map 'xk-f21 nil)
-(define-function-key global-function-map 'xk-f22 nil)
-(define-function-key global-function-map 'xk-f23 nil)
-(define-function-key global-function-map 'xk-f24 nil)
-(define-function-key global-function-map 'xk-f25 nil)
-(define-function-key global-function-map 'xk-f26 nil)
-(define-function-key global-function-map 'xk-f27 nil)
-(define-function-key global-function-map 'xk-f28 nil)
-(define-function-key global-function-map 'xk-f29 nil)
-(define-function-key global-function-map 'xk-f30 nil)
-(define-function-key global-function-map 'xk-f31 nil)
-(define-function-key global-function-map 'xk-f32 nil)
-(define-function-key global-function-map 'xk-f33 nil)
-(define-function-key global-function-map 'xk-f34 nil)
-(define-function-key global-function-map 'xk-f35 nil)
+ (if (= window-system-version 10)
+ (progn
+ ;; xterm.c depends on using interrupt-driven input.
+ (set-input-mode t nil)
+
+ (defun x-new-display (display)
+ "This function takes one argument, the display where you wish to
+continue your editing session. Your current window will be unmapped and
+the current display will be closed. The new X display will be opened and
+the rubber-band outline of the new window will appear on the new X display."
+ (interactive "sDisplay to switch emacs to: ")
+ (x-change-display display)
+ (x-get-default-args))
+
+ ;; Not defvar! This is not DEFINING this variable, just specifying
+ ;; a value for it.
+ (setq window-setup-hook 'x-pop-up-window)
+
+ ;; Process switch settings made by .emacs file.
+ (while x-switches
+ (x-handle-switch-1 (car (car x-switches)) (cdr (car x-switches)))
+ (setq x-switches (cdr x-switches)))))
+
+ ;; On certain systems, turn off use of sigio, because it's broken.
+ (if x-sigio-bug
+ (set-input-mode nil nil))
+
+ (put 'suspend-emacs 'disabled
+ "Suspending a program running in an X window is silly
+and you would not be able to start it again. Just switch windows instead.\n")
+ (setq suspend-hook '(lambda () (error "Suspending an emacs running under X makes no sense")))
+ (substitute-key-definition 'suspend-emacs nil global-map)
+ (substitute-key-definition 'suspend-emacs nil esc-map)
+ (substitute-key-definition 'suspend-emacs nil ctl-x-map)
+ ;; Not needed any more -- done in C.
+ ;; (if (not x-processed-defaults) (x-get-default-args))
+))