;;; pc-win.el --- setup support for `PC windows' (whatever that is)
-;; Copyright (C) 1994, 1996, 1997, 1999, 2001, 2002, 2003, 2004,
-;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1996-1997, 1999, 2001-2012
+;; Free Software Foundation, Inc.
;; Author: Morten Welinder <terra@diku.dk>
;; Maintainer: FSF
(declare-function msdos-remember-default-colors "msdos.c")
(declare-function w16-set-clipboard-data "w16select.c")
(declare-function w16-get-clipboard-data "w16select.c")
-(declare-function msdos-setup-keyboard "term/internal.el")
+(declare-function msdos-setup-keyboard "internal" (frame))
;;; This was copied from etc/rgb.txt, except that some values were changed
;;; a bit to make them consistent with DOS console colors, and the RGB
;(modify-frame-parameters terminal-frame default-frame-alist)
(defun msdos-face-setup ()
- "Set up initial faces for the MS-DOS display."
- (set-face-foreground 'bold "yellow" terminal-frame)
- (set-face-foreground 'italic "red" terminal-frame)
- (set-face-foreground 'bold-italic "lightred" terminal-frame)
- (set-face-foreground 'underline "white" terminal-frame)
+ "Initial setup of faces for the MS-DOS display."
+ (set-face-foreground 'bold "yellow")
+ (set-face-foreground 'italic "red")
+ (set-face-foreground 'bold-italic "lightred")
+ (set-face-foreground 'underline "white")
(make-face 'msdos-menu-active-face)
(make-face 'msdos-menu-passive-face)
(make-face 'msdos-menu-select-face)
- (set-face-foreground 'msdos-menu-active-face "white" terminal-frame)
- (set-face-foreground 'msdos-menu-passive-face "lightgray" terminal-frame)
- (set-face-background 'msdos-menu-active-face "blue" terminal-frame)
- (set-face-background 'msdos-menu-passive-face "blue" terminal-frame)
- (set-face-background 'msdos-menu-select-face "red" terminal-frame))
+ (set-face-foreground 'msdos-menu-active-face "white")
+ (set-face-foreground 'msdos-menu-passive-face "lightgray")
+ (set-face-background 'msdos-menu-active-face "blue")
+ (set-face-background 'msdos-menu-passive-face "blue")
+ (set-face-background 'msdos-menu-select-face "red"))
(defun msdos-handle-reverse-video (frame parameters)
"Handle the reverse-video frame parameter on MS-DOS frames."
;; terminal-initialization function. Also, our handling of reverse
;; video is slightly different.
(defun msdos-create-frame-with-faces (&optional parameters)
- "Create an frame on MS-DOS display.
+ "Create a frame on MS-DOS display.
Optional frame parameters PARAMETERS specify the frame parameters.
Parameters not specified by PARAMETERS are taken from
`default-frame-alist'. If either PARAMETERS or `default-frame-alist'
;; returned value matters. Also, by the way, recall that `ignore' is
;; a useful function for returning 'nil regardless of argument.
+;; Note: Any re-definition in this file of a function that is defined
+;; in C on other platforms, should either have no doc-string, or one
+;; that is identical to the C version, but with the arglist signature
+;; at the end. Otherwise help-split-fundoc gets confused on other
+;; platforms. (Bug#10783)
+
;; From src/xfns.c
(defun x-list-fonts (pattern &optional face frame maximum width)
(if (or (null width) (and (numberp width) (= width 1)))
;; From lisp/term/x-win.el
(defvar x-display-name "pc"
- "The display name specifying the MS-DOS display and frame type.")
+ "The name of the window display on which Emacs was started.
+On X, the display name of individual X frames is recorded in the
+`display' frame parameter.")
(defvar x-colors (mapcar 'car msdos-color-values)
- "The list of colors available on a PC display under MS-DOS.")
+ "List of basic colors available on color displays.
+For X, the list comes from the `rgb.txt' file,v 10.41 94/02/20.
+For Nextstep, this is a list of non-PANTONE colors returned by
+the operating system.")
;; From lisp/term/w32-win.el
;
-;;;; Selections and cut buffers
+;;;; Selections
;
;;; 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.
+;;; from x-selection-value.
(defvar x-last-selected-text nil)
(defcustom x-select-enable-clipboard t
"Non-nil means cutting and pasting uses the clipboard.
-This is the default on this system, since MS-Windows does not
-support other types of selections."
+This is in addition to, but in preference to, the primary selection.
+
+Note that MS-Windows does not support selection types other than the
+clipboard. (The primary selection that is set by Emacs is not
+accessible to other programs on MS-Windows.)
+
+This variable is not used by the Nextstep port."
:type 'boolean
:group 'killing)
-(defun x-select-text (text &optional push)
+(defun x-select-text (text)
+ "Select TEXT, a string, according to the window system.
+
+On X, if `x-select-enable-clipboard' is non-nil, copy TEXT to the
+clipboard. If `x-select-enable-primary' is non-nil, put TEXT in
+the primary selection.
+
+On MS-Windows, make TEXT the current selection. If
+`x-select-enable-clipboard' is non-nil, copy the text to the
+clipboard as well.
+
+On Nextstep, put TEXT in the pasteboard (`x-select-enable-clipboard'
+is not used)."
(if x-select-enable-clipboard
(w16-set-clipboard-data text))
(setq x-last-selected-text text))
;;; Return the value of the current selection.
-;;; Consult the selection, then the cut buffer. Treat empty strings
-;;; as if they were unset.
+;;; Consult the selection. Treat empty strings as if they were unset.
(defun x-get-selection-value ()
(if x-select-enable-clipboard
(let (text)
(t
(setq x-last-selected-text text))))))
-;; From lisp/faces.el: we only have one font, so always return
-;; it, no matter which variety they've asked for.
-(defun x-frob-font-slant (font which)
- font)
-(make-obsolete 'x-frob-font-slant 'make-face-... "21.1")
-(defun x-frob-font-weight (font which)
- font)
-(make-obsolete 'x-frob-font-weight 'make-face-... "21.1")
-(defun x-font-family-list ()
- "Return a list of available font families on FRAME.\n\
-If FRAME is omitted or nil, use the selected frame.\n\
-Value is a list of conses (FAMILY . FIXED-P) where FAMILY\n\
-is a font family, and FIXED-P is non-nil if fonts of that family\n\
-are fixed-pitch."
- '(("default" . t)))
+;; x-selection-owner-p is used in simple.el.
+(defun x-selection-owner-p (&optional selection terminal)
+ "Whether the current Emacs process owns the given X Selection.
+The arg should be the name of the selection in question, typically one of
+the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.
+\(Those are literal upper-case symbol names, since that's what X expects.)
+For convenience, the symbol nil is the same as `PRIMARY',
+and t is the same as `SECONDARY'.
+
+TERMINAL should be a terminal object or a frame specifying the X
+server to query. If omitted or nil, that stands for the selected
+frame's display, or the first available X display.
+
+On Nextstep, TERMINAL is unused.
+
+\(fn &optional SELECTION TERMINAL)"
+ (if x-select-enable-clipboard
+ (let (text)
+ ;; Don't die if w16-get-clipboard-data signals an error.
+ (ignore-errors
+ (setq text (w16-get-clipboard-data)))
+ ;; We consider ourselves the owner of the selection if it does
+ ;; not exist, or exists and compares equal with the last text
+ ;; we've put into the Windows clipboard.
+ (cond
+ ((not text) t)
+ ((or (eq text x-last-selected-text)
+ (string= text x-last-selected-text))
+ text)
+ (t nil)))))
+
+;; x-own-selection-internal and x-disown-selection-internal are used
+;; in select.el:x-set-selection.
+(defun x-own-selection-internal (selection value &optional frame)
+ "Assert an X selection of the type SELECTION with and value VALUE.
+SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
+\(Those are literal upper-case symbol names, since that's what X expects.)
+VALUE is typically a string, or a cons of two markers, but may be
+anything that the functions on `selection-converter-alist' know about.
+
+FRAME should be a frame that should own the selection. If omitted or
+nil, it defaults to the selected frame.
+
+On Nextstep, FRAME is unused.
+
+\(fn SELECTION VALUE &optional FRAME)"
+ (ignore-errors
+ (x-select-text value))
+ value)
+
+(defun x-disown-selection-internal (selection &optional time-object terminal)
+ "If we own the selection SELECTION, disown it.
+Disowning it means there is no such selection.
+
+Sets the last-change time for the selection to TIME-OBJECT (by default
+the time of the last event).
+
+TERMINAL should be a terminal object or a frame specifying the X
+server to query. If omitted or nil, that stands for the selected
+frame's display, or the first available X display.
+
+On Nextstep, the TIME-OBJECT and TERMINAL arguments are unused.
+On MS-DOS, all this does is return non-nil if we own the selection.
+
+\(fn SELECTION &optional TIME-OBJECT TERMINAL)"
+ (if (x-selection-owner-p selection)
+ t))
+
+;; x-get-selection-internal is used in select.el
+(defun x-get-selection-internal (selection-symbol target-type &optional time-stamp terminal)
+ "Return text selected from some X window.
+SELECTION-SYMBOL is typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
+\(Those are literal upper-case symbol names, since that's what X expects.)
+TARGET-TYPE is the type of data desired, typically `STRING'.
+
+TIME-STAMP is the time to use in the XConvertSelection call for foreign
+selections. If omitted, defaults to the time for the last event.
+
+TERMINAL should be a terminal object or a frame specifying the X
+server to query. If omitted or nil, that stands for the selected
+frame's display, or the first available X display.
+
+On Nextstep, TIME-STAMP and TERMINAL are unused.
+
+\(fn SELECTION-SYMBOL TARGET-TYPE &optional TIME-STAMP TERMINAL)"
+ (x-get-selection-value))
;; From src/fontset.c:
(fset 'query-fontset 'ignore)
(fset 'set-cursor-color 'ignore) ; Hardware determined by char under.
(fset 'set-border-color 'ignore) ; Not useful.
+(defvar msdos-last-help-message nil
+ "The last help message received via `show-help-function'.
+This is used by `msdos-show-help'.")
+
+(defvar msdos-previous-message nil
+ "The content of the echo area before help echo was displayed.")
+
+(defun msdos-show-help (help)
+ "Function installed as `show-help-function' on MS-DOS frames."
+ (when (and (not (window-minibuffer-p)) ;Don't overwrite minibuffer contents.
+ (not cursor-in-echo-area)) ;Don't overwrite a prompt.
+ (cond
+ ((stringp help)
+ (setq help (replace-regexp-in-string "\n" ", " help))
+ (unless (or msdos-previous-message
+ (string-equal help (current-message))
+ (and (stringp msdos-last-help-message)
+ (string-equal msdos-last-help-message
+ (current-message))))
+ (setq msdos-previous-message (current-message)))
+ (setq msdos-last-help-message help)
+ (let ((message-truncate-lines nil)
+ (message-log-max nil))
+ (message "%s" help)))
+ ((stringp msdos-previous-message)
+ (let ((message-log-max nil))
+ (message "%s" msdos-previous-message)
+ (setq msdos-previous-message nil)))
+ (t
+ (message nil)))))
+
+
;; Initialization.
;; ---------------------------------------------------------------------------
;; This function is run, by faces.el:tty-create-frame-with-faces, only
(msdos-face-setup)
;; Set up the initial frame.
(msdos-setup-initial-frame)
+ ;; Help echo is displayed in the echo area.
+ (setq show-help-function 'msdos-show-help)
;; We want to delay the codepage-related setup until after user's
;; .emacs is processed, because people might define their
;; `dos-codepage-setup-hook' there.
(provide 'pc-win)
-;; arch-tag: 5cbdb455-b495-427b-95d0-e417d77d00b4
;;; pc-win.el ends here