(x-initialize-window-system))
(make-frame `((window-system . x) (display . ,display) . ,parameters)))
-(defun make-frame-on-tty (device type &optional parameters)
- "Make a frame on terminal DEVICE which is of type TYPE (e.g., \"xterm\").
-The optional third argument PARAMETERS specifies additional frame parameters."
+(defun make-frame-on-tty (tty type &optional parameters)
+ "Make a frame on terminal device TTY.
+TTY should be the file name of the tty device to use. TYPE
+should be the terminal type string of TTY, for example \"xterm\"
+or \"vt100\". The optional third argument PARAMETERS specifies
+additional frame parameters."
(interactive "fOpen frame on tty device: \nsTerminal type of %s: ")
- (unless device
+ (unless tty
(error "Invalid terminal device"))
(unless type
(error "Invalid terminal type"))
- (make-frame `((window-system . nil) (tty . ,device) (tty-type . ,type) . ,parameters)))
+ (make-frame `((window-system . nil) (tty . ,tty) (tty-type . ,type) . ,parameters)))
(defun make-frame-command ()
"Make a new frame, and select it if the terminal displays only one frame."
(window-system . nil) The frame should be displayed on a terminal device.
(window-system . x) The frame should be displayed in an X window.
- (device . ID) The frame should use the display device identified by ID.
+ (terminal . ID) The frame should use the terminal identified by ID.
Before the frame is created (via `frame-creation-function-alist'), functions on the
hook `before-make-frame-hook' are run. After the frame is created, functions
setup is for focus to follow the pointer."
(interactive)
(let* ((w (cond
- ((assq 'device parameters)
- (let ((type (display-live-p (cdr (assq 'device parameters)))))
+ ((assq 'terminal parameters)
+ (let ((type (terminal-live-p (cdr (assq 'terminal parameters)))))
(cond
((eq type t) nil)
- ((eq type nil) (error "Display %s does not exist" (cdr (assq 'device parameters))))
+ ((eq type nil) (error "Terminal %s does not exist" (cdr (assq 'terminal parameters))))
(t type))))
((assq 'window-system parameters)
(cdr (assq 'window-system parameters)))
(t window-system)))
(frame-creation-function (cdr (assq w frame-creation-function-alist)))
+ (oldframe (selected-frame))
frame)
(unless frame-creation-function
(error "Don't know how to create a frame on window system %s" w))
(run-hooks 'before-make-frame-hook)
(setq frame (funcall frame-creation-function (append parameters (cdr (assq w window-system-default-frame-alist)))))
+ (normal-erase-is-backspace-setup-frame frame)
+ ;; Set up the frame-local environment, if needed.
+ (when (eq (frame-terminal frame) (frame-terminal oldframe))
+ (let ((env (frame-parameter oldframe 'environment)))
+ (if (not (framep env))
+ (setq env oldframe))
+ (if env
+ (set-frame-parameter frame 'environment env))))
(run-hook-with-args 'after-make-frame-functions frame)
frame))
(function (lambda (frame)
(eq frame (window-frame (minibuffer-window frame)))))))
-(defun frames-on-display-list (&optional display)
- "Return a list of all frames on DISPLAY.
+(defun frames-on-display-list (&optional terminal)
+ "Return a list of all frames on TERMINAL.
-DISPLAY should be a display identifier (an integer), but it may
-also be a name of a display, a string of the form HOST:SERVER.SCREEN.
+TERMINAL should be a terminal identifier (an integer), a frame,
+or a name of an X display (a string of the form
+HOST:SERVER.SCREEN).
-If DISPLAY is omitted or nil, it defaults to the selected frame's display."
- (let* ((display (or display (frame-display)))
+If TERMINAL is omitted or nil, it defaults to the selected
+frame's terminal device."
+ (let* ((terminal (terminal-id terminal))
(func #'(lambda (frame)
- (or (eq (frame-display frame) display)
- (equal (frame-parameter frame 'display) display)))))
+ (eq (frame-terminal frame) terminal))))
(filtered-frame-list func)))
-(defun framep-on-display (&optional display)
- "Return the type of frames on DISPLAY.
-DISPLAY may be a display id, a display name or a frame. If it is
-a frame, its type is returned.
-If DISPLAY is omitted or nil, it defaults to the selected frame's display.
-All frames on a given display are of the same type."
- (or (display-live-p display)
- (framep display)
- (framep (car (frames-on-display-list display)))))
+(defun framep-on-display (&optional terminal)
+ "Return the type of frames on TERMINAL.
+TERMINAL may be a terminal id, a display name or a frame. If it
+is a frame, its type is returned. If TERMINAL is omitted or nil,
+it defaults to the selected frame's terminal device. All frames
+on a given display are of the same type."
+ (or (terminal-live-p terminal)
+ (framep terminal)
+ (framep (car (frames-on-display-list terminal)))))
(defun frame-remove-geometry-params (param-list)
"Return the parameter list PARAM-LIST, but with geometry specs removed.
(defun suspend-frame ()
"Do whatever is right to suspend the current frame.
-Calls `suspend-emacs' if invoked from the controlling terminal,
-`suspend-tty' from a secondary terminal, and
+Calls `suspend-emacs' if invoked from the controlling tty device,
+`suspend-tty' from a secondary tty device, and
`iconify-or-deiconify-frame' from an X frame."
(interactive)
(let ((type (framep (selected-frame))))
(cond
((eq type 'x) (iconify-or-deiconify-frame))
((eq type t)
- (if (display-controlling-tty-p)
+ (if (controlling-tty-p)
(suspend-emacs)
(suspend-tty)))
(t (suspend-emacs)))))
-
(defun make-frame-names-alist ()
(let* ((current-frame (selected-frame))
(falist
(run-hooks 'after-setting-font-hook 'after-setting-font-hooks))
(defun set-frame-parameter (frame parameter value)
+ "Set frame parameter PARAMETER to VALUE on FRAME.
+If FRAME is nil, it defaults to the selected frame.
+See `modify-frame-parameters.'"
(modify-frame-parameters frame (list (cons parameter value))))
(defun set-background-color (color-name)
"Set the background color of the selected frame to COLOR-NAME.
When called interactively, prompt for the name of the color to use.
To get the frame's current background color, use `frame-parameters'."
- (interactive (list (facemenu-read-color)))
+ (interactive (list (facemenu-read-color "Background color: ")))
(modify-frame-parameters (selected-frame)
(list (cons 'background-color color-name)))
(or window-system
"Set the foreground color of the selected frame to COLOR-NAME.
When called interactively, prompt for the name of the color to use.
To get the frame's current foreground color, use `frame-parameters'."
- (interactive (list (facemenu-read-color)))
+ (interactive (list (facemenu-read-color "Foreground color: ")))
(modify-frame-parameters (selected-frame)
(list (cons 'foreground-color color-name)))
(or window-system
"Set the text cursor color of the selected frame to COLOR-NAME.
When called interactively, prompt for the name of the color to use.
To get the frame's current cursor color, use `frame-parameters'."
- (interactive (list (facemenu-read-color)))
+ (interactive (list (facemenu-read-color "Cursor color: ")))
(modify-frame-parameters (selected-frame)
(list (cons 'cursor-color color-name))))
"Set the color of the mouse pointer of the selected frame to COLOR-NAME.
When called interactively, prompt for the name of the color to use.
To get the frame's current mouse color, use `frame-parameters'."
- (interactive (list (facemenu-read-color)))
+ (interactive (list (facemenu-read-color "Mouse color: ")))
(modify-frame-parameters (selected-frame)
(list (cons 'mouse-color
(or color-name
"Set the color of the border of the selected frame to COLOR-NAME.
When called interactively, prompt for the name of the color to use.
To get the frame's current border color, use `frame-parameters'."
- (interactive (list (facemenu-read-color)))
+ (interactive (list (facemenu-read-color "Border color: ")))
(modify-frame-parameters (selected-frame)
(list (cons 'border-color color-name))))
(cons vert hor)))
\f
;;;; Frame/display capabilities.
-(defun selected-display ()
- "Return the display that is now selected."
- (frame-display (selected-frame)))
+(defun selected-terminal ()
+ "Return the terminal that is now selected."
+ (frame-terminal (selected-frame)))
(defun display-mouse-p (&optional display)
"Return non-nil if DISPLAY has a mouse available.
"Return the number of screens associated with DISPLAY."
(let ((frame-type (framep-on-display display)))
(cond
- ((memq frame-type '(x w32))
+ ((memq frame-type '(x w32 mac))
(x-display-screens display))
- (t ;; FIXME: is this correct for the Mac?
+ (t
1))))
(defun display-pixel-height (&optional display)
(defcustom show-trailing-whitespace nil
"*Non-nil means highlight trailing whitespace.
This is done in the face `trailing-whitespace'."
- :tag "Highlight trailing whitespace."
:type 'boolean
:group 'whitespace-faces)
(defcustom blink-cursor-delay 0.5
"*Seconds of idle time after which cursor starts to blink."
- :tag "Delay in seconds."
:type 'number
:group 'cursor)
(defcustom blink-cursor-interval 0.5
"*Length of cursor blink interval in seconds."
- :tag "Blink interval in seconds."
:type 'number
:group 'cursor)
:init-value (not (or noninteractive
no-blinking-cursor
(eq system-type 'ms-dos)
- (not (memq initial-window-system '(x w32)))))
+ (not (memq initial-window-system '(x w32 mac)))))
:initialize 'custom-initialize-safe-default
:group 'cursor
:global t
;; Hourglass pointer
(defcustom display-hourglass t
- "*Non-nil means show an hourglass pointer when running under a window system."
- :tag "Hourglass pointer"
+ "*Non-nil means show an hourglass pointer, when Emacs is busy.
+This feature only works when on a window system that can change
+cursor shapes."
:type 'boolean
:group 'cursor)
(defcustom hourglass-delay 1
- "*Seconds to wait before displaying an hourglass pointer."
- :tag "Hourglass delay"
+ "*Seconds to wait before displaying an hourglass pointer when Emacs is busy."
:type 'number
:group 'cursor)
"*Non-nil means show a hollow box cursor in non-selected windows.
If nil, don't show a cursor except in the selected window.
Use Custom to set this variable to get the display updated."
- :tag "Cursor in non-selected windows"
+ :tag "Cursor In Non-selected Windows"
:type 'boolean
:group 'cursor
:set #'(lambda (symbol value)
(define-key ctl-x-5-map "0" 'delete-frame)
(define-key ctl-x-5-map "o" 'other-frame)
-(substitute-key-definition 'suspend-emacs 'suspend-frame global-map)
-
-
-(defun terminal-id (terminal)
- "Return the numerical id of terminal TERMINAL.
-
-TERMINAL can be a terminal id, a frame, or nil (meaning the
-selected frame's terminal)."
- (cond
- ((integerp terminal)
- terminal)
- ((or (null terminal) (framep terminal))
- (frame-display terminal))
- (t
- (error "Invalid argument %s in `terminal-id'" terminal))))
-
-(defvar terminal-parameter-alist nil
- "An alist of terminal parameter alists.")
-
-(defun terminal-parameters (&optional terminal)
- "Return the paramater-alist of terminal TERMINAL.
-It is a list of elements of the form (PARM . VALUE), where PARM is a symbol.
-
-TERMINAL can be a terminal id, a frame, or nil (meaning the
-selected frame's terminal)."
- (cdr (assq (terminal-id terminal) terminal-parameter-alist)))
-
-(defun terminal-parameter (terminal parameter)
- "Return TERMINAL's value for parameter PARAMETER.
-
-TERMINAL can be a terminal id, a frame, or nil (meaning the
-selected frame's terminal)."
- (cdr (assq parameter (cdr (assq (terminal-id terminal) terminal-parameter-alist)))))
-
-(defun set-terminal-parameter (terminal parameter value)
- "Set TERMINAL's value for parameter PARAMETER to VALUE.
-Returns the previous value of PARAMETER.
-
-TERMINAL can be a terminal id, a frame, or nil (meaning the
-selected frame's terminal)."
- (setq terminal (terminal-id terminal))
- (let* ((alist (assq terminal terminal-parameter-alist))
- (pair (assq parameter (cdr alist)))
- (result (cdr pair)))
- (cond
- (pair (setcdr pair value))
- (alist (setcdr alist (cons (cons parameter value) (cdr alist))))
- (t (setq terminal-parameter-alist
- (cons (cons terminal
- (cons (cons parameter value)
- nil))
- terminal-parameter-alist))))
- result))
-
-(defun terminal-handle-delete-frame (frame)
- "Clean up terminal parameters of FRAME, if it's the last frame on its terminal."
- ;; XXX We assume that the display is closed immediately after the
- ;; last frame is deleted on it. It would be better to create a hook
- ;; called `delete-display-functions', and use it instead.
- (when (and (frame-live-p frame)
- (= 1 (length (frames-on-display-list (frame-display frame)))))
- (setq terminal-parameter-alist
- (assq-delete-all (frame-display frame) terminal-parameter-alist))))
-
-(add-hook 'delete-frame-functions 'terminal-handle-delete-frame)
-
(provide 'frame)
;; arch-tag: 82979c70-b8f2-4306-b2ad-ddbd6b328b56