X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/84545e78c3c53148d033d00386d9c1f4ff50f03c..e7399dcc7256ba7bbde1491e68417f0804a60438:/lisp/term/x-win.el?ds=sidebyside diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el index 833ccf1580..7632905ce5 100644 --- a/lisp/term/x-win.el +++ b/lisp/term/x-win.el @@ -1,23 +1,26 @@ -;; Parse switches controlling how Emacs interfaces with X window system. -;; Copyright (C) 1990 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 --- parse switches controlling interface with X window system +;; Copyright (C) 1993, 1994 Free Software Foundation, Inc. + +;; Author: FSF +;; Keywords: terminals + +;;; This file is part of GNU Emacs. +;;; +;;; 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 2, or (at your option) +;;; any later version. +;;; +;;; 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. + +;;; Commentary: ;; 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 @@ -26,6 +29,8 @@ ;; startup.el will then examine startup files, and eventually call the hooks ;; which create the first window (s). + +;;; Code: ;; These are the standard X switches from the Xt Initialize.c file of ;; Release 4. @@ -46,43 +51,46 @@ ;; -font *font ;; -foreground *foreground ;; -geometry .geometry +;; -i .iconType +;; -itype .iconType ;; -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. (if (not (eq window-system 'x)) - (error "Loading x-win.el but not compiled for X")) + (error "%s: Loading x-win.el but not compiled for X" (invocation-name))) -;; 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)) +(require 'frame) +(require 'mouse) +(require 'scroll-bar) +(require 'faces) +(require 'select) +(require 'menu-bar) + +(defvar x-invocation-args) -(require 'x-mouse) -(require 'screen) +(defvar x-command-line-resources nil) (setq command-switch-alist - (append '(("-dm" . x-establish-daemon-mode) - ("-bw" . x-handle-numeric-switch) + (append '(("-bw" . x-handle-numeric-switch) ("-d" . x-handle-display) ("-display" . x-handle-display) - ("-name" . x-handle-switch) + ("-name" . x-handle-name-rn-switch) + ("-rn" . x-handle-name-rn-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) + ("-ib" . x-handle-numeric-switch) ("-g" . x-handle-geometry) ("-geometry" . x-handle-geometry) ("-fg" . x-handle-switch) @@ -90,8 +98,10 @@ ("-bg" . x-handle-switch) ("-background". x-handle-switch) ("-ms" . x-handle-switch) - ("-ib" . x-handle-switch) - ("-iconic" . x-handle-switch) + ("-itype" . x-handle-switch) + ("-i" . x-handle-switch) + ("-iconic" . x-handle-iconic) + ("-xrm" . x-handle-xrm-switch) ("-cr" . x-handle-switch) ("-vb" . x-handle-switch) ("-hb" . x-handle-switch) @@ -101,9 +111,9 @@ (defconst x-switch-definitions '(("-name" name) ("-T" name) - ("-r" lose) - ("-rv" lose) - ("-reverse" lose) + ("-r" reverse t) + ("-rv" reverse t) + ("-reverse" reverse t) ("-fn" font) ("-font" font) ("-ib" internal-border-width) @@ -113,10 +123,10 @@ ("-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) + ("-itype" icon-type t) + ("-i" icon-type t) + ("-vb" vertical-scroll-bars t) + ("-hb" horizontal-scroll-bars t) ("-bd" border-color) ("-bw" border-width))) @@ -125,41 +135,64 @@ (let ((aelt (assoc switch x-switch-definitions))) (if aelt (if (nth 2 aelt) - (setq screen-default-alist + (setq default-frame-alist (cons (cons (nth 1 aelt) (nth 2 aelt)) - screen-default-alist)) - (setq screen-default-alist + default-frame-alist)) + (setq default-frame-alist (cons (cons (nth 1 aelt) (car x-invocation-args)) - screen-default-alist) + default-frame-alist) x-invocation-args (cdr x-invocation-args)))))) +;; Make -iconic apply only to the initial frame! +(defun x-handle-iconic (switch) + (setq initial-frame-alist + (cons '(visibility . icon) initial-frame-alist))) + ;; Handler for switches of the form "-switch n" (defun x-handle-numeric-switch (switch) (let ((aelt (assoc switch x-switch-definitions))) (if aelt - (setq screen-default-alist + (setq default-frame-alist (cons (cons (nth 1 aelt) (string-to-int (car x-invocation-args))) - screen-default-alist) + default-frame-alist) x-invocation-args (cdr x-invocation-args))))) +;; Handle the -xrm option. +(defun x-handle-xrm-switch (switch) + (or (consp x-invocation-args) + (error "%s: missing argument to `%s' option" (invocation-name) switch)) + (setq x-command-line-resources (car x-invocation-args)) + (setq x-invocation-args (cdr x-invocation-args))) + ;; Handle the geometry option (defun x-handle-geometry (switch) - (setq initial-screen-alist (append initial-screen-alist - (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)) + (let ((geo (x-parse-geometry (car x-invocation-args)))) + (setq initial-frame-alist + (append initial-frame-alist + (if (or (assq 'left geo) (assq 'top geo)) + '((user-position . t))) + (if (or (assq 'height geo) (assq 'width geo)) + '((user-size . t))) + geo) + x-invocation-args (cdr x-invocation-args)))) + +;; Handle the -name and -rn options. Set the variable x-resource-name +;; to the option's operand; if the switch was `-name', set the name of +;; the initial frame, too. +(defun x-handle-name-rn-switch (switch) + (or (consp x-invocation-args) + (error "%s: missing argument to `%s' option" (invocation-name) switch)) + (setq x-resource-name (car x-invocation-args) + x-invocation-args (cdr x-invocation-args)) + (if (string= switch "-name") + (setq initial-frame-alist (cons (cons 'name x-resource-name) + initial-frame-alist)))) (defvar x-display-name nil - "The X display name specifying server and X screen.") + "The X display name specifying server and X frame.") (defun x-handle-display (switch) (setq x-display-name (car x-invocation-args) @@ -167,15 +200,13 @@ (defvar x-invocation-args nil) -(defun x-handle-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." +(defun x-handle-args (args) + "Process the X-related command line options in ARGS. +This is done before the user's startup file is loaded. 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). +This returns ARGS with the arguments that have been processed removed." (setq x-invocation-args args args nil) (while x-invocation-args @@ -188,44 +219,6 @@ are left in ARGS." (setq args (nreverse args))) -;; Handle Xresources. - -(defun x-read-resources () - "Reread the X defaults from the X server and install them in -`screen-default-alist', to be used in new screens." - (interactive) - (mapcar (function - (lambda (key-resname-default) - (let* ((key (nth 0 key-resname-default)) - (tail (assq key screen-default-alist)) - (value - (or (x-get-resource (nth 1 key-resname-default)) - (nth 2 key-resname-default)))) - (if tail (setcdr tail value) - (setq screen-default-alist - (cons (cons key value) - screen-default-alist)))))) - '((font "font" "9x15") - (background-color "background" "white") - (border-width "#BorderWidth" 2) - (internal-border-width "#InternalBorderWidth" 1) - - (foreground-color "foreground" "black") - (mouse-color "mouse" "black") - (cursor-color "cursor" "black") - (border-color "border" "black"))) - (setq x-screen-defaults screen-default-alist)) - - -;; This is the function which creates the first X window. It is called -;; from startup.el before the user's init file is processed. - -(defun x-pop-initial-window () - ;; see screen.el for this function - (pop-initial-screen (append initial-screen-alist - screen-default-alist)) - (delete-screen terminal-screen)) - ;; ;; Standard X cursor shapes, courtesy of Mr. Fox, who wanted ALL of them. @@ -465,179 +458,216 @@ are left in ARGS." (while all-colors (setq this-color (car all-colors) all-colors (cdr all-colors)) - (and (x-defined-color this-color) + (and (x-color-defined-p 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)))))) +;;;; Function keys -;; For unused keysyms. If this happens, it's probably a server or -;; Xlib bug. - -(defun weird-x-keysym () +(defun iconify-or-deiconify-frame () + "Iconify the selected frame, or deiconify if it's currently an icon." (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 (eq (cdr (assq 'visibility (frame-parameters))) t) + (iconify-frame) + (make-frame-visible))) + +(substitute-key-definition 'suspend-emacs 'iconify-or-deiconify-frame + global-map) + +;; Map certain keypad keys into ASCII characters +;; that people usually expect. +(define-key function-key-map [backspace] [127]) +(define-key function-key-map [delete] [127]) +(define-key function-key-map [tab] [?\t]) +(define-key function-key-map [linefeed] [?\n]) +(define-key function-key-map [clear] [11]) +(define-key function-key-map [return] [13]) +(define-key function-key-map [escape] [?\e]) +(define-key function-key-map [M-backspace] [?\M-\d]) +(define-key function-key-map [M-delete] [?\M-\d]) +(define-key function-key-map [M-tab] [?\M-\t]) +(define-key function-key-map [M-linefeed] [?\M-\n]) +(define-key function-key-map [M-clear] [?\M-\013]) +(define-key function-key-map [M-return] [?\M-\015]) +(define-key function-key-map [M-escape] [?\M-\e]) + +;; These tell read-char how to convert +;; these special chars to ASCII. +(put 'backspace 'ascii-character 127) +(put 'delete 'ascii-character 127) +(put 'tab 'ascii-character ?\t) +(put 'linefeed 'ascii-character ?\n) +(put 'clear 'ascii-character 12) +(put 'return 'ascii-character 13) +(put 'escape 'ascii-character ?\e) + +;; Set up to recognize vendor-specific keysyms. +;; Unless/until there is a real conflict, +;; we need not try to make this list depend on +;; the type of X server in use. +(setq system-key-alist + '( + ;; These are some HP keys. + ( 168 . mute-acute) + ( 169 . mute-grave) + ( 170 . mute-asciicircum) + ( 171 . mute-diaeresis) + ( 172 . mute-asciitilde) + ( 175 . lira) + ( 190 . guilder) + ( 252 . block) + ( 256 . longminus) + (65388 . reset) + (65389 . system) + (65390 . user) + (65391 . clearline) + (65392 . insertline) + (65393 . deleteline) + (65394 . insertchar) + (65395 . deletechar) + (65396 . backtab) + (65397 . kp-backtab) + ;; This is used by DEC's X server. + (65280 . remove) + ;; These are for Sun. + (392963 . mute-acute) + (392976 . f35) + (392977 . f36) + (393056 . req) + ;; These are for Sun under X11R6 + (393072 . props) + (393073 . front) + (393074 . copy) + (393075 . open) + (393076 . paste) + (393077 . cut) + )) + +;;;; Selections and cut buffers + +;;; We keep track of the last text selected here, so we can check the +;;; current selection against it, and avoid passing back our own text +;;; from x-cut-buffer-or-selection-value. +(defvar x-last-selected-text nil) + +;;; It is said that overlarge strings are slow to put into the cut buffer. +;;; Note this value is overridden below. +(defvar x-cut-buffer-max 20000 + "Max number of characters to put in the cut buffer.") + +(defvar x-select-enable-clipboard nil + "Non-nil means cutting and pasting uses the clipboard. +This is in addition to the primary selection.") + +;;; Make TEXT, a string, the primary X selection. +;;; Also, set the value of X cut buffer 0, for backward compatibility +;;; with older X applications. +;;; gildea@lcs.mit.edu says it's not desirable to put kills +;;; in the clipboard. +(defun x-select-text (text &optional push) + ;; Don't send the cut buffer too much text. + ;; It becomes slow, and if really big it causes errors. + (if (< (length text) x-cut-buffer-max) + (x-set-cut-buffer text push) + (x-set-cut-buffer "" push)) + (x-set-selection 'PRIMARY text) + (if x-select-enable-clipboard + (x-set-selection 'CLIPBOARD text)) + (setq x-last-selected-text text)) + +;;; Return the value of the current X selection. +;;; Consult the selection, then the cut buffer. Treat empty strings +;;; as if they were unset. +(defun x-cut-buffer-or-selection-value () + (let (text) + + ;; Don't die if x-get-selection signals an error. + (condition-case c + (setq text (x-get-selection 'PRIMARY)) + (error (message "%s" c))) + (if (string= text "") (setq text nil)) + + (if x-select-enable-clipboard + (condition-case c + (setq text (x-get-selection 'CLIPBOARD)) + (error (message "%s" c)))) + (if (string= text "") (setq text nil)) + (or text (setq text (x-get-cut-buffer 0))) + (if (string= text "") (setq text nil)) + + (cond + ((not text) nil) + ((eq text x-last-selected-text) nil) + ((string= text x-last-selected-text) + ;; Record the newer string, so subsequent calls can use the `eq' test. + (setq x-last-selected-text text) + nil) + (t + (setq x-last-selected-text text))))) + ;;; Do the actual X Windows setup here; the above code just defines ;;; functions and variables that we use now. -;; xterm.c depends on using interrupt-driven input. -(set-input-mode t nil t) -(x-open-connection (or x-display-name - (setq x-display-name (getenv "DISPLAY")))) -(x-read-resources) -(x-handle-args) -(x-pop-initial-window) +(setq command-line-args (x-handle-args command-line-args)) + +;;; Make sure we have a valid resource name. +(or (stringp x-resource-name) + (let (i) + (setq x-resource-name (invocation-name)) -(setq suspend-hook - '(lambda () - (error "Suspending an emacs running under X makes no sense"))) + ;; Change any . or * characters in x-resource-name to hyphens, + ;; so as not to choke when we use it in X resource queries. + (while (setq i (string-match "[.*]" x-resource-name)) + (aset x-resource-name i ?-)))) -(define-key global-map "\C-z" 'iconify-emacs) +(x-open-connection (or x-display-name + (setq x-display-name (getenv "DISPLAY"))) + x-command-line-resources) + +(setq frame-creation-function 'x-create-frame-with-faces) + +(setq x-cut-buffer-max (min (- (/ (x-server-max-request-size) 2) 100) + x-cut-buffer-max)) + +;; Sun expects the menu bar cut and paste commands to use the clipboard. +(if (string-match "X11/NeWS - Sun Microsystems Inc\\." + (x-server-vendor)) + (menu-bar-enable-clipboard)) + +;; Apply a geometry resource to the initial frame. Put it at the end +;; of the alist, so that anything specified on the command line takes +;; precedence. +(let ((res-geometry (x-get-resource "geometry" "Geometry"))) + (if res-geometry + (setq initial-frame-alist (append initial-frame-alist + (x-parse-geometry res-geometry))))) + +;; Check the reverseVideo resource. +(let ((case-fold-search t)) + (let ((rv (x-get-resource "reverseVideo" "ReverseVideo"))) + (if (and rv + (string-match "^\\(true\\|yes\\|on\\)$" rv)) + (setq default-frame-alist + (cons '(reverse . t) default-frame-alist))))) + +;; Set x-selection-timeout, measured in milliseconds. +(let ((res-selection-timeout + (x-get-resource "selectionTimeout" "SelectionTimeout"))) + (setq x-selection-timeout 20000) + (if res-selection-timeout + (setq x-selection-timeout (string-to-number res-selection-timeout)))) + +(defun x-win-suspend-error () + (error "Suspending an emacs running under X makes no sense")) +(add-hook 'suspend-hook 'x-win-suspend-error) + +;;; Arrange for the kill and yank functions to set and check the clipboard. +(setq interprogram-cut-function 'x-select-text) +(setq interprogram-paste-function 'x-cut-buffer-or-selection-value) + +;;; Turn off window-splitting optimization; X is usually fast enough +;;; that this is only annoying. +(setq split-window-keep-point t) + +;;; x-win.el ends here