Support for opening X frames from a tty session.
lisp/cus-face.el (custom-declare-face): Handle multiple concurrent display methods correctly. lisp/faces.el (x-create-frame-with-faces): Set the window-system frame parameter instead of frame-creation-function. (tty-create-frame-with-faces): Ditto. lisp/frame.el (frame-creation-function): Removed. (frame-creation-function-alist): New variable. (frame-initialize): Use initial-window-system instead of window-system. Add window-system parameter to initial-frame-alist. Removed tty initialization, it was moved to frame-creation-function-alist. (frame-notice-user-settings): Use initial-window-system instead of window-system. (make-frame-on-display): Make sure term/x-win is loaded. Added window-system parameter for make-frame. (make-frame-on-tty): Removed unnecessary autoload declaration. Added window-system parameter for make-frame. (make-frame): Use frame-creation-function-alist to determine the function to use depending on the specified window system. (select-frame-by-name): Use the window-system function instead of the variable. lisp/startup.el (window-system): New variable (previously built-in, now frame-local). (normal-top-level, command-line): Use initial-window-system instead of window-system. lisp/loadup.el: Load startup.el before faces.el, for the window-system variable. lisp/term/x-win.el: Check for the x-create-frame function instead of window-system to see if X is available. Don't exit Emacs if the display can not be opened when X is not the initial display method. Set up frame-creation-function-alist instead of frame-creation-function. Provide the x-win feature. src/dispnew.c (Vwindow_system): Renamed to Vinitial_window_system. (init_display, syms_of_display): Updated to use Vinitial_window_system instead of Vwindow_system. src/emacs.c (shut_down_emacs): Updated to use Vinitial_window_system instead of Vwindow_system. src/keyboard.c (Fset_input_mode): Call reset_all_sys_modes, not reset_sys_modes. Ditto for init_all_sys_modes. Process the quit parameter correctly. src/sysdep.c (init_sys_modes, reset_sys_modes): Unconditionally set up the terminal. We don't get called if there is nothing to do anymore. (sys_select): Use Vinitial_window_system, not Vwindow_system. src/window.h (Vwindow_system): Renamed to Vinitial_window_system. src/xfns.c (Fx_create_frame): Don't check_x. We initialize it anyway. (x_display_info_for_name, Fx_open_connection): Don't look at Vinitial_window_system. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-54
This commit is contained in:
parent
c0707982ab
commit
2246281fb0
13 changed files with 326 additions and 323 deletions
|
@ -2,9 +2,9 @@
|
|||
GOAL
|
||||
----
|
||||
|
||||
The ultimate goal of this branch is to implement support for opening
|
||||
multiple, different tty devices and simultaneous X and tty frames from
|
||||
a single Emacs session.
|
||||
The goal of this branch is to implement support for opening multiple,
|
||||
different tty devices and simultaneous X and tty frames from a single
|
||||
Emacs session.
|
||||
|
||||
Some use cases:
|
||||
|
||||
|
@ -27,7 +27,7 @@ WHO IS DOING IT
|
|||
|
||||
I'm Károly Lőrentey. My address: lorentey@elte.hu.
|
||||
|
||||
Patches or suggestions are welcome!
|
||||
Comments, bug reports, suggestions and patches are welcome!
|
||||
|
||||
Retrieving the latest version of the branch:
|
||||
|
||||
|
@ -46,9 +46,13 @@ STATUS
|
|||
------
|
||||
|
||||
Multi-tty support is stable, I think most of the problems were fixed.
|
||||
(It still needs testing on other architectures, though.) Please let
|
||||
me know if you find any bugs in it. Emacsclient has been extended to
|
||||
support opening a new terminal frame.
|
||||
(It still needs testing on other architectures, though.) Simultaneous
|
||||
X and tty frame support works fine, although there are some small
|
||||
issues. Emacsclient has been extended to support opening a new
|
||||
terminal frame.
|
||||
|
||||
|
||||
Please let me know if you find any bugs in this branch.
|
||||
|
||||
To try it out, compile and run the multi-tty branch with the following
|
||||
commands:
|
||||
|
@ -57,7 +61,7 @@ commands:
|
|||
cd +build
|
||||
../configure
|
||||
make bootstrap
|
||||
src/emacs -nw
|
||||
src/emacs -nw # You can also try without -nw
|
||||
M-x server-start
|
||||
|
||||
and then (from a shell prompt on another terminal) start emacsclient
|
||||
|
@ -77,7 +81,7 @@ all terminals should be restored to their previous states.
|
|||
|
||||
This is work in progress, and probably full of bugs. You should
|
||||
always run emacs from gdb, so that you'll have a live instance to
|
||||
debug if something goes wrong. Please send me your reports.
|
||||
debug if something goes wrong. Please send me your bug reports.
|
||||
|
||||
Problems:
|
||||
|
||||
|
@ -85,39 +89,48 @@ Problems:
|
|||
devices. Also, there is no way to suspend emacsclient. This
|
||||
will be fixed.
|
||||
|
||||
* X support is (I hope) working, but at the moment there are
|
||||
problems with simultaneous X and tty devices, so don't do
|
||||
that - start a separate Emacs with -nw and run the server
|
||||
there.
|
||||
|
||||
* Mac, Windows and DOS support is broken, probably doesn't
|
||||
even compile -- this will be solved later.
|
||||
|
||||
* Only tested on my GNU/Linux box.
|
||||
* Only tested on my GNU/Linux box and on Solaris 8.
|
||||
|
||||
NEWS
|
||||
----
|
||||
|
||||
For the NEWS file:
|
||||
|
||||
** Support for multiple terminal devices has been added. You can
|
||||
specify a terminal device (`tty' parameter) and a terminal type
|
||||
(`tty-type' parameter) to `make-terminal-frame'. `tty' must be a
|
||||
terminal device created by the updated emacsclient, or there will
|
||||
be problems with terminal input and window resizes.
|
||||
** Support for multiple terminal devices has been added.
|
||||
|
||||
You can test for the presence of multiple terminal support by
|
||||
testing for the `multi-tty' feature.
|
||||
*** You can specify a terminal device (`tty' parameter) and a terminal
|
||||
type (`tty-type' parameter) to `make-terminal-frame'.
|
||||
|
||||
** A make-frame-on-tty function has been added to make it easier to
|
||||
create frames on new terminals.
|
||||
*** You can test for the presence of multiple terminal support by
|
||||
testing for the `multi-tty' feature.
|
||||
|
||||
** New functions: frame-tty-name, frame-tty-type for accessing
|
||||
terminal parameters, and delete-tty for closing the terminal
|
||||
device.
|
||||
*** Emacsclient has been extended to support opening a new terminal
|
||||
frame (see -t option).
|
||||
|
||||
*** A make-frame-on-tty function has been added to make it easier to
|
||||
create frames on new terminals.
|
||||
|
||||
*** New functions: frame-tty-name, frame-tty-type for accessing
|
||||
terminal parameters, and delete-tty for closing the terminal
|
||||
device.
|
||||
|
||||
*** talk.el has been extended for multiple tty support.
|
||||
|
||||
|
||||
** Support for simultaneous graphical and terminal frames has been
|
||||
added.
|
||||
|
||||
*** The function `make-frame-on-display' now works during a terminal
|
||||
session, and `make-frame-on-tty' works during a graphical session.
|
||||
|
||||
*** The `window-system' variable has been made frame-local.
|
||||
|
||||
*** The new `initial-window-system' variable contains the
|
||||
`window-system' value for the first frame.
|
||||
|
||||
** Emacsclient has been extended to support opening a new terminal
|
||||
frame.
|
||||
|
||||
CHANGELOG
|
||||
---------
|
||||
|
@ -127,11 +140,13 @@ See arch logs.
|
|||
THINGS TO DO
|
||||
------------
|
||||
|
||||
** Fix color handling during X+tty combo sessions. (It seems that tty
|
||||
** Fix color handling during tty+X combo sessions. (It seems that tty
|
||||
sessions automatically convert the face colors to terminal colors
|
||||
when the face is loaded. This conversion must happen instead on
|
||||
the fly in write_glyphs, which might be problematic, as color
|
||||
approximation is currently done in lisp (term/tty-colors.el).)
|
||||
(Update: hm, colors seem to work fine if I start emacs with -nw and
|
||||
then create an X frame. Maybe it's just a small buglet somewhere.)
|
||||
|
||||
** Fix interactive use of temacs. There are face-related SEGVs, most
|
||||
likely because of changes in realize_default_face, realize_face.
|
||||
|
@ -139,17 +154,12 @@ THINGS TO DO
|
|||
** Very strange bug: visible-bell does not work on secondary
|
||||
terminals. This might be something xterm (konsole) specific.
|
||||
|
||||
** Allow opening an X session after -nw.
|
||||
|
||||
** Find out the best way to support suspending Emacs with multiple
|
||||
ttys. My guess: disable it on the controlling tty, but from other
|
||||
ttys pass it on to emacsclient somehow. (It is (I hope) trivial to
|
||||
extend emacsclient to handle suspend/resume. A `kill -STOP' almost
|
||||
works right now.)
|
||||
|
||||
** Exiting Emacs while there are emacsclient frames doesn't restore the
|
||||
ttys to their default states.
|
||||
|
||||
** Move baud_rate to struct display.
|
||||
|
||||
** Implement support for starting an interactive Emacs session without
|
||||
|
@ -187,6 +197,8 @@ THINGS TO DO
|
|||
single_kboard mode, and is not easily solvable. The best thing to
|
||||
do is to simply refuse to create a tty frame of type `eterm'.
|
||||
|
||||
** Maybe standard-display-table should be display-local.
|
||||
|
||||
DIARY OF CHANGES
|
||||
----------------
|
||||
|
||||
|
@ -545,4 +557,14 @@ DIARY OF CHANGES
|
|||
Note that the above strace output seems to be an unrelated but
|
||||
similar bug. I think that is now fixed.)
|
||||
|
||||
-- Exiting Emacs while there are emacsclient frames doesn't restore the
|
||||
ttys to their default states.
|
||||
|
||||
(This seems to be fixed by some previous change.)
|
||||
|
||||
-- Allow opening an X session after -nw.
|
||||
|
||||
(Done.)
|
||||
|
||||
|
||||
;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
;; If the user has already created the face, respect that.
|
||||
(let ((value (or (get face 'saved-face) spec))
|
||||
(frames (frame-list))
|
||||
(have-window-system (memq initial-window-system '(x w32)))
|
||||
frame)
|
||||
;; Create global face.
|
||||
(make-empty-face face)
|
||||
|
@ -48,10 +49,12 @@
|
|||
(while frames
|
||||
(setq frame (car frames)
|
||||
frames (cdr frames))
|
||||
(face-spec-set face value frame)))
|
||||
;; When making a face after frames already exist
|
||||
(if (memq window-system '(x w32))
|
||||
(make-face-x-resource-internal face))))
|
||||
(face-spec-set face value frame)
|
||||
(when (memq (window-system frame) '(x w32))
|
||||
(setq have-window-system t)))
|
||||
;; When making a face after frames already exist
|
||||
(if have-window-system
|
||||
(make-face-x-resource-internal face)))))
|
||||
;; Don't record SPEC until we see it causes no errors.
|
||||
(put face 'face-defface-spec spec)
|
||||
(when (and doc (null (face-documentation face)))
|
||||
|
|
|
@ -1658,8 +1658,7 @@ Value is the new frame created."
|
|||
(setq parameters (x-handle-named-frame-geometry parameters))
|
||||
(let ((visibility-spec (assq 'visibility parameters))
|
||||
(frame-list (frame-list))
|
||||
(frame (x-create-frame `((frame-creation-function . x-create-frame-with-faces)
|
||||
(visibility . nil) . ,parameters)))
|
||||
(frame (x-create-frame `((window-system . x) (visibility . nil) . ,parameters)))
|
||||
success)
|
||||
(unwind-protect
|
||||
(progn
|
||||
|
@ -1745,8 +1744,7 @@ Parameters not specified by PARAMETERS are taken from
|
|||
`default-frame-alist'. If either PARAMETERS or `default-frame-alist'
|
||||
contains a `reverse' parameter, handle that. Value is the new frame
|
||||
created."
|
||||
(let ((frame (make-terminal-frame `((frame-creation-function . tty-create-frame-with-faces) .
|
||||
,parameters)))
|
||||
(let ((frame (make-terminal-frame `((window-system . nil) . ,parameters)))
|
||||
success)
|
||||
(unwind-protect
|
||||
(progn
|
||||
|
|
|
@ -27,12 +27,17 @@
|
|||
|
||||
;;; Code:
|
||||
|
||||
(defvar frame-creation-function nil
|
||||
"Window-system dependent function to call to create a new frame.
|
||||
The window system startup file should set this to its frame creation
|
||||
function, which should take an alist of parameters as its argument.")
|
||||
|
||||
(make-variable-frame-local 'frame-creation-function)
|
||||
(defvar frame-creation-function-alist
|
||||
(list (cons nil
|
||||
(if (fboundp 'tty-create-frame-with-faces)
|
||||
'tty-create-frame-with-faces
|
||||
(function
|
||||
(lambda (parameters)
|
||||
(error "Can't create multiple frames without a window system"))))))
|
||||
"Alist of window-system dependent functions to call to create a new frame.
|
||||
The window system startup file should add its frame creation
|
||||
function to this list, which should take an alist of parameters
|
||||
as its argument.")
|
||||
|
||||
;; The initial value given here used to ask for a minibuffer.
|
||||
;; But that's not necessary, because the default is to have one.
|
||||
|
@ -188,7 +193,9 @@ Pass it BUFFER as first arg, and (cdr ARGS) gives the rest of the args."
|
|||
(defun frame-initialize ()
|
||||
"Create an initial frame if necessary."
|
||||
;; Are we actually running under a window system at all?
|
||||
(if (and window-system (not noninteractive) (not (eq window-system 'pc)))
|
||||
(if (and initial-window-system
|
||||
(not noninteractive)
|
||||
(not (eq initial-window-system 'pc)))
|
||||
(progn
|
||||
;; Turn on special-display processing only if there's a window system.
|
||||
(setq special-display-function 'special-display-popup-frame)
|
||||
|
@ -205,6 +212,9 @@ Pass it BUFFER as first arg, and (cdr ARGS) gives the rest of the args."
|
|||
(setq frame-initial-frame-alist
|
||||
(cons '(horizontal-scroll-bars . t)
|
||||
frame-initial-frame-alist)))
|
||||
(setq frame-initial-frame-alist
|
||||
(cons (cons 'window-system initial-window-system)
|
||||
frame-initial-frame-alist))
|
||||
(setq default-minibuffer-frame
|
||||
(setq frame-initial-frame
|
||||
(make-frame frame-initial-frame-alist)))
|
||||
|
@ -217,18 +227,7 @@ Pass it BUFFER as first arg, and (cdr ARGS) gives the rest of the args."
|
|||
;; At this point, we know that we have a frame open, so we
|
||||
;; can delete the terminal frame.
|
||||
(delete-frame terminal-frame)
|
||||
(setq terminal-frame nil))
|
||||
|
||||
;; No, we're not running a window system. Use make-terminal-frame if
|
||||
;; we support that feature, otherwise arrange to cause errors.
|
||||
(or (eq window-system 'pc)
|
||||
(setq frame-creation-function
|
||||
(if (fboundp 'tty-create-frame-with-faces)
|
||||
'tty-create-frame-with-faces
|
||||
(function
|
||||
(lambda (parameters)
|
||||
(error
|
||||
"Can't create multiple frames without a window system"))))))))
|
||||
(setq terminal-frame nil))))
|
||||
|
||||
(defvar frame-notice-user-settings t
|
||||
"Non-nil means function `frame-notice-user-settings' wasn't run yet.")
|
||||
|
@ -278,7 +277,7 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
|
|||
;; Can't modify the minibuffer parameter, so don't try.
|
||||
(setq parms (delq (assq 'minibuffer parms) parms))
|
||||
(modify-frame-parameters nil
|
||||
(if (null window-system)
|
||||
(if (null initial-window-system)
|
||||
(append initial-frame-alist
|
||||
default-frame-alist
|
||||
parms
|
||||
|
@ -287,7 +286,7 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
|
|||
;; default-frame-alist were already
|
||||
;; applied in pc-win.el.
|
||||
parms))
|
||||
(if (null window-system) ;; MS-DOS does this differently in pc-win.el
|
||||
(if (null initial-window-system) ;; MS-DOS does this differently in pc-win.el
|
||||
(let ((newparms (frame-parameters))
|
||||
(frame (selected-frame)))
|
||||
(tty-handle-reverse-video frame newparms)
|
||||
|
@ -571,26 +570,18 @@ The optional second argument PARAMETERS specifies additional frame parameters."
|
|||
(interactive "sMake frame on display: ")
|
||||
(or (string-match "\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'" display)
|
||||
(error "Invalid display, not HOST:SERVER or HOST:SERVER.SCREEN"))
|
||||
(make-frame (cons (cons 'display display) parameters)))
|
||||
(load (concat term-file-prefix "x-win"))
|
||||
(make-frame `((window-system . x) (display . ,display) . ,parameters)))
|
||||
|
||||
;;;###autoload
|
||||
(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.
|
||||
|
||||
DEVICE must be a proxy psudo terminal created by emacsclient,
|
||||
otherwise there will be problems with terminal input and window
|
||||
resizes. (The kernel notifies processes about pending input or
|
||||
terminal resizes only on the controlling terminal, so we need
|
||||
emacsclient to sit on the real terminal device, create SIGIO
|
||||
signals upon terminal input, and forward SIGWINCH signals to
|
||||
us.)"
|
||||
The optional third argument PARAMETERS specifies additional frame parameters."
|
||||
(interactive "fOpen frame on tty device: \nsTerminal type of %s: ")
|
||||
(unless device
|
||||
(error "Invalid terminal device"))
|
||||
(unless type
|
||||
(error "Invalid terminal type"))
|
||||
(tty-create-frame-with-faces (append (list (cons 'tty device) (cons 'tty-type type)) parameters)))
|
||||
(make-frame `((window-system . nil) (tty . ,device) (tty-type . ,type) . ,parameters)))
|
||||
|
||||
(defun make-frame-command ()
|
||||
"Make a new frame, and select it if the terminal displays only one frame."
|
||||
|
@ -630,12 +621,22 @@ You cannot specify either `width' or `height', you must use neither or both.
|
|||
(minibuffer . only) The frame should contain only a minibuffer.
|
||||
(minibuffer . WINDOW) The frame should use WINDOW as its minibuffer window.
|
||||
|
||||
Before the frame is created (via `frame-creation-function'), functions on the
|
||||
(window-system . nil) The frame should be displayed on a terminal device.
|
||||
(window-system . x) The frame should be displayed in an X window.
|
||||
|
||||
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
|
||||
on `after-make-frame-functions' are run with one arg, the newly created frame."
|
||||
(interactive)
|
||||
(run-hooks 'before-make-frame-hook)
|
||||
(let ((frame (funcall frame-creation-function parameters)))
|
||||
(let* ((w (if (assq 'window-system parameters)
|
||||
(cdr (assq 'window-system parameters))
|
||||
window-system))
|
||||
(frame-creation-function (cdr (assq w frame-creation-function-alist)))
|
||||
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)
|
||||
(funcall frame-creation-function parameters)
|
||||
(run-hook-with-args 'after-make-frame-functions frame)
|
||||
frame))
|
||||
|
||||
|
@ -780,9 +781,9 @@ If there is no frame by that name, signal an error."
|
|||
(raise-frame frame)
|
||||
(select-frame frame)
|
||||
;; Ensure, if possible, that frame gets input focus.
|
||||
(cond ((eq window-system 'x)
|
||||
(cond ((eq (window-system frame) 'x)
|
||||
(x-focus-frame frame))
|
||||
((eq window-system 'w32)
|
||||
((eq (window-system frame) 'w32)
|
||||
(w32-focus-frame frame)))
|
||||
(when focus-follows-mouse
|
||||
(set-mouse-position frame (1- (frame-width frame)) 0))))
|
||||
|
|
|
@ -67,6 +67,8 @@
|
|||
(setq load-source-file-function 'load-with-code-conversion)
|
||||
(load "files")
|
||||
|
||||
(load "startup")
|
||||
|
||||
(load "cus-face")
|
||||
(load "faces") ; after here, `defface' may be used.
|
||||
|
||||
|
@ -146,7 +148,6 @@
|
|||
(message "%s" (garbage-collect))
|
||||
(load "menu-bar")
|
||||
(load "paths.el") ;Don't get confused if someone compiled paths by mistake.
|
||||
(load "startup")
|
||||
(load "emacs-lisp/lisp")
|
||||
(load "textmodes/page")
|
||||
(load "register")
|
||||
|
|
|
@ -128,6 +128,13 @@
|
|||
(defvar command-line-processed nil
|
||||
"Non-nil once command line has been processed.")
|
||||
|
||||
(defvar window-system initial-window-system
|
||||
"Name of window system the selected frame is displaying through.
|
||||
The value is a symbol--for instance, `x' for X windows.
|
||||
The value is nil if the selected frame is on a text-only-terminal.")
|
||||
|
||||
(make-variable-frame-local 'window-system)
|
||||
|
||||
(defgroup initialization nil
|
||||
"Emacs start-up procedure"
|
||||
:group 'internal)
|
||||
|
@ -512,9 +519,9 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
|
|||
;; for instance due to a dense colormap.
|
||||
(when (or frame-initial-frame
|
||||
;; If frame-initial-frame has no meaning, do this anyway.
|
||||
(not (and window-system
|
||||
(not (and initial-window-system
|
||||
(not noninteractive)
|
||||
(not (eq window-system 'pc)))))
|
||||
(not (eq initial-window-system 'pc)))))
|
||||
;; Modify the initial frame based on what .emacs puts into
|
||||
;; ...-frame-alist.
|
||||
(if (fboundp 'frame-notice-user-settings)
|
||||
|
@ -527,7 +534,7 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
|
|||
(let ((frame-background-mode frame-background-mode)
|
||||
(frame (selected-frame))
|
||||
term)
|
||||
(when (and (null window-system)
|
||||
(when (and (null initial-window-system)
|
||||
;; Don't override a possibly customized value.
|
||||
(null frame-background-mode)
|
||||
;; Don't override user specifications.
|
||||
|
@ -702,9 +709,9 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
|
|||
|
||||
;; Read window system's init file if using a window system.
|
||||
(condition-case error
|
||||
(if (and window-system (not noninteractive))
|
||||
(if (and initial-window-system (not noninteractive))
|
||||
(load (concat term-file-prefix
|
||||
(symbol-name window-system)
|
||||
(symbol-name initial-window-system)
|
||||
"-win")
|
||||
;; Every window system should have a startup file;
|
||||
;; barf if we can't find it.
|
||||
|
@ -725,7 +732,7 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
|
|||
(cdr error) ", "))))
|
||||
'external-debugging-output)
|
||||
(terpri 'external-debugging-output)
|
||||
(setq window-system nil)
|
||||
(setq initial-window-system nil)
|
||||
(kill-emacs)))
|
||||
|
||||
;; Windowed displays do this inside their *-win.el.
|
||||
|
@ -808,7 +815,7 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
|
|||
|
||||
;; If frame was created with a menu bar, set menu-bar-mode on.
|
||||
(unless (or noninteractive
|
||||
(and (memq window-system '(x w32))
|
||||
(and (memq initial-window-system '(x w32))
|
||||
(<= (frame-parameter nil 'menu-bar-lines) 0)))
|
||||
(menu-bar-mode 1))
|
||||
|
||||
|
@ -818,10 +825,10 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
|
|||
(<= (frame-parameter nil 'tool-bar-lines) 0))
|
||||
(tool-bar-mode 1))
|
||||
|
||||
;; Can't do this init in defcustom because window-system isn't set.
|
||||
;; Can't do this init in defcustom because initial-window-system isn't set.
|
||||
(unless (or noninteractive
|
||||
(eq system-type 'ms-dos)
|
||||
(not (memq window-system '(x w32))))
|
||||
(not (memq initial-window-system '(x w32))))
|
||||
(setq-default blink-cursor t)
|
||||
(blink-cursor-mode 1))
|
||||
|
||||
|
@ -829,13 +836,13 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
|
|||
;; DOS/Windows systems have a PC-type keyboard which has both
|
||||
;; <delete> and <backspace> keys.
|
||||
(when (or (memq system-type '(ms-dos windows-nt))
|
||||
(and (memq window-system '(x))
|
||||
(and (memq initial-window-system '(x))
|
||||
(fboundp 'x-backspace-delete-keys-p)
|
||||
(x-backspace-delete-keys-p))
|
||||
;; If the terminal Emacs is running on has erase char
|
||||
;; set to ^H, use the Backspace key for deleting
|
||||
;; backward and, and the Delete key for deleting forward.
|
||||
(and (null window-system)
|
||||
(and (null initial-window-system)
|
||||
(eq tty-erase-char 8)))
|
||||
(setq-default normal-erase-is-backspace t)
|
||||
(normal-erase-is-backspace-mode 1)))
|
||||
|
@ -848,7 +855,7 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
|
|||
|
||||
;; Register default TTY colors for the case the terminal hasn't a
|
||||
;; terminal init file.
|
||||
(unless (memq window-system '(x w32))
|
||||
(unless (memq initial-window-system '(x w32))
|
||||
;; We do this regardles of whether the terminal supports colors
|
||||
;; or not, since they can switch that support on or off in
|
||||
;; mid-session by setting the tty-color-mode frame parameter.
|
||||
|
@ -1046,7 +1053,7 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
|
|||
;; Load library for our terminal type.
|
||||
;; User init file can set term-file-prefix to nil to prevent this.
|
||||
(unless (or noninteractive
|
||||
window-system
|
||||
initial-window-system
|
||||
(null term-file-prefix))
|
||||
(let ((term (getenv "TERM"))
|
||||
hyphend)
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
;; An alist of X options and the function which handles them. See
|
||||
;; ../startup.el.
|
||||
|
||||
(if (not (eq window-system 'x))
|
||||
(if (not (fboundp 'x-create-frame))
|
||||
(error "%s: Loading x-win.el but not compiled for X" (invocation-name)))
|
||||
|
||||
(require 'frame)
|
||||
|
@ -1159,6 +1159,7 @@ XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp")
|
|||
|
||||
;;;; Function keys
|
||||
|
||||
;;; XXX This might be wrong with multi-tty support.
|
||||
(substitute-key-definition 'suspend-emacs 'iconify-or-deiconify-frame
|
||||
global-map)
|
||||
|
||||
|
@ -2346,10 +2347,11 @@ order until succeed.")
|
|||
(x-open-connection (or x-display-name
|
||||
(setq x-display-name (getenv "DISPLAY")))
|
||||
x-command-line-resources
|
||||
;; Exit Emacs with fatal error if this fails.
|
||||
t)
|
||||
;; Exit Emacs with fatal error if this fails and we
|
||||
;; are the initial display.
|
||||
(eq initial-window-system 'x))
|
||||
|
||||
(setq frame-creation-function 'x-create-frame-with-faces)
|
||||
(add-to-list 'frame-creation-function-alist '(x . x-create-frame-with-faces))
|
||||
|
||||
(setq x-cut-buffer-max (min (- (/ (x-server-max-request-size) 2) 100)
|
||||
x-cut-buffer-max))
|
||||
|
@ -2431,6 +2433,7 @@ order until succeed.")
|
|||
(if res-selection-timeout
|
||||
(setq x-selection-timeout (string-to-number res-selection-timeout))))
|
||||
|
||||
;; XXX This is wrong with multi-tty support.
|
||||
(defun x-win-suspend-error ()
|
||||
(error "Suspending an Emacs running under X makes no sense"))
|
||||
(add-hook 'suspend-hook 'x-win-suspend-error)
|
||||
|
@ -2453,5 +2456,7 @@ order until succeed.")
|
|||
;; Turn on support for mouse wheels.
|
||||
(mouse-wheel-mode 1)
|
||||
|
||||
(provide 'x-win)
|
||||
|
||||
;;; arch-tag: f1501302-db8b-4d95-88e3-116697d89f78
|
||||
;;; x-win.el ends here
|
||||
|
|
|
@ -214,9 +214,9 @@ int inverse_video;
|
|||
EMACS_INT baud_rate;
|
||||
|
||||
/* Either nil or a symbol naming the window system under which Emacs
|
||||
is running. */
|
||||
creates the first frame. */
|
||||
|
||||
Lisp_Object Vwindow_system;
|
||||
Lisp_Object Vinitial_window_system;
|
||||
|
||||
/* Version number of X windows: 10, 11 or nil. */
|
||||
|
||||
|
@ -6569,7 +6569,7 @@ init_display ()
|
|||
|
||||
/* Now is the time to initialize this; it's used by init_sys_modes
|
||||
during startup. */
|
||||
Vwindow_system = Qnil;
|
||||
Vinitial_window_system = Qnil;
|
||||
|
||||
/* If the user wants to use a window system, we shouldn't bother
|
||||
initializing the terminal. This is especially important when the
|
||||
|
@ -6598,7 +6598,7 @@ init_display ()
|
|||
#endif
|
||||
)
|
||||
{
|
||||
Vwindow_system = intern ("x");
|
||||
Vinitial_window_system = intern ("x");
|
||||
#ifdef HAVE_X11
|
||||
Vwindow_system_version = make_number (11);
|
||||
#else
|
||||
|
@ -6618,7 +6618,7 @@ init_display ()
|
|||
#ifdef HAVE_NTGUI
|
||||
if (!inhibit_window_system)
|
||||
{
|
||||
Vwindow_system = intern ("w32");
|
||||
Vinitial_window_system = intern ("w32");
|
||||
Vwindow_system_version = make_number (1);
|
||||
adjust_frame_glyphs_initially ();
|
||||
return;
|
||||
|
@ -6628,7 +6628,7 @@ init_display ()
|
|||
#ifdef MAC_OS
|
||||
if (!inhibit_window_system)
|
||||
{
|
||||
Vwindow_system = intern ("mac");
|
||||
Vinitial_window_system = intern ("mac");
|
||||
Vwindow_system_version = make_number (1);
|
||||
adjust_frame_glyphs_initially ();
|
||||
return;
|
||||
|
@ -6730,7 +6730,7 @@ For types not defined in VMS, use define emacs_term \"TYPE\".\n\
|
|||
and internal_terminal_init. */
|
||||
&& (strcmp (terminal_type, "internal") != 0 || inhibit_window_system)
|
||||
#endif
|
||||
&& NILP (Vwindow_system))
|
||||
&& NILP (Vinitial_window_system))
|
||||
{
|
||||
/* For the initial frame, we don't have any way of knowing what
|
||||
are the foreground and background colors of the terminal. */
|
||||
|
@ -6842,8 +6842,8 @@ A non-nil value is useful if the terminal can automatically preserve
|
|||
Emacs's frame display when you reenter Emacs.
|
||||
It is up to you to set this variable if your terminal can do that. */);
|
||||
|
||||
DEFVAR_LISP ("window-system", &Vwindow_system,
|
||||
doc: /* Name of window system that Emacs is displaying through.
|
||||
DEFVAR_LISP ("initial-window-system", &Vinitial_window_system,
|
||||
doc: /* Name of the window system that Emacs uses for the first frame.
|
||||
The value is a symbol--for instance, `x' for X windows.
|
||||
The value is nil if Emacs is using a text-only terminal. */);
|
||||
|
||||
|
@ -6879,7 +6879,7 @@ See `buffer-display-table' for more information. */);
|
|||
if (noninteractive)
|
||||
#endif
|
||||
{
|
||||
Vwindow_system = Qnil;
|
||||
Vinitial_window_system = Qnil;
|
||||
Vwindow_system_version = Qnil;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -192,7 +192,7 @@ int display_arg;
|
|||
char *stack_bottom;
|
||||
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
extern Lisp_Object Vwindow_system;
|
||||
extern Lisp_Object Vinitial_window_system;
|
||||
#endif /* HAVE_WINDOW_SYSTEM */
|
||||
|
||||
extern Lisp_Object Vauto_save_list_file_name;
|
||||
|
@ -2017,9 +2017,9 @@ shut_down_emacs (sig, no_x, stuff)
|
|||
#if 0 /* This triggers a bug in XCloseDisplay and is not needed. */
|
||||
#ifdef HAVE_X_WINDOWS
|
||||
/* It's not safe to call intern here. Maybe we are crashing. */
|
||||
if (!noninteractive && SYMBOLP (Vwindow_system)
|
||||
&& SCHARS (SYMBOL_NAME (Vwindow_system)) == 1
|
||||
&& SREF (SYMBOL_NAME (Vwindow_system), 0) == 'x'
|
||||
if (!noninteractive && SYMBOLP (Vinitial_window_system)
|
||||
&& SCHARS (SYMBOL_NAME (Vinitial_window_system)) == 1
|
||||
&& SREF (SYMBOL_NAME (Vinitial_window_system), 0) == 'x'
|
||||
&& ! no_x)
|
||||
Fx_close_current_connection ();
|
||||
#endif /* HAVE_X_WINDOWS */
|
||||
|
|
|
@ -10503,8 +10503,7 @@ See also `current-input-mode'. */)
|
|||
|
||||
#ifndef DOS_NT
|
||||
/* this causes startup screen to be restored and messes with the mouse */
|
||||
if (FRAME_TERMCAP_P (SELECTED_FRAME ()))
|
||||
reset_sys_modes (CURTTY ());
|
||||
reset_all_sys_modes ();
|
||||
#endif
|
||||
|
||||
#ifdef SIGIO
|
||||
|
@ -10542,13 +10541,12 @@ See also `current-input-mode'. */)
|
|||
tty->meta_key = 2;
|
||||
}
|
||||
|
||||
if (FRAME_TERMCAP_P (XFRAME (selected_frame)) && !NILP (quit))
|
||||
if (!NILP (quit))
|
||||
/* Don't let this value be out of range. */
|
||||
quit_char = XINT (quit) & (CURTTY ()->meta_key ? 0377 : 0177);
|
||||
quit_char = XINT (quit) & (NILP (meta) ? 0177 : 0377);
|
||||
|
||||
#ifndef DOS_NT
|
||||
if (FRAME_TERMCAP_P (XFRAME (selected_frame)) && CURTTY ()->type)
|
||||
init_sys_modes (CURTTY ());
|
||||
init_all_sys_modes ();
|
||||
#endif
|
||||
|
||||
#ifdef POLL_FOR_INPUT
|
||||
|
|
360
src/sysdep.c
360
src/sysdep.c
|
@ -1394,267 +1394,261 @@ nil means don't delete them until `list-processes' is run. */);
|
|||
#if 0
|
||||
/* read_socket_hook is not global anymore. I think doing this
|
||||
unconditionally will not cause any problems. */
|
||||
if (! read_socket_hook && EQ (Vwindow_system, Qnil))
|
||||
if (! read_socket_hook && EQ (Vinitial_window_system, Qnil))
|
||||
#endif
|
||||
narrow_foreground_group (fileno (TTY_INPUT (tty_out)));
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
/* Emacs' window system on MSDOG uses the `internal terminal' and therefore
|
||||
needs the initialization code below. */
|
||||
if (tty_out->input != stdin || EQ (Vwindow_system, Qnil))
|
||||
#endif
|
||||
{
|
||||
if (! tty_out->old_tty)
|
||||
tty_out->old_tty = (struct emacs_tty *) xmalloc (sizeof (struct emacs_tty));
|
||||
if (! tty_out->old_tty)
|
||||
tty_out->old_tty = (struct emacs_tty *) xmalloc (sizeof (struct emacs_tty));
|
||||
|
||||
EMACS_GET_TTY (fileno (TTY_INPUT (tty_out)), tty_out->old_tty);
|
||||
EMACS_GET_TTY (fileno (TTY_INPUT (tty_out)), tty_out->old_tty);
|
||||
|
||||
tty = *tty_out->old_tty;
|
||||
tty = *tty_out->old_tty;
|
||||
|
||||
#if defined (HAVE_TERMIO) || defined (HAVE_TERMIOS)
|
||||
XSETINT (Vtty_erase_char, tty.main.c_cc[VERASE]);
|
||||
XSETINT (Vtty_erase_char, tty.main.c_cc[VERASE]);
|
||||
|
||||
#ifdef DGUX
|
||||
/* This allows meta to be sent on 8th bit. */
|
||||
tty.main.c_iflag &= ~INPCK; /* don't check input for parity */
|
||||
/* This allows meta to be sent on 8th bit. */
|
||||
tty.main.c_iflag &= ~INPCK; /* don't check input for parity */
|
||||
#endif
|
||||
tty.main.c_iflag |= (IGNBRK); /* Ignore break condition */
|
||||
tty.main.c_iflag &= ~ICRNL; /* Disable map of CR to NL on input */
|
||||
tty.main.c_iflag |= (IGNBRK); /* Ignore break condition */
|
||||
tty.main.c_iflag &= ~ICRNL; /* Disable map of CR to NL on input */
|
||||
#ifdef INLCR /* I'm just being cautious,
|
||||
since I can't check how widespread INLCR is--rms. */
|
||||
tty.main.c_iflag &= ~INLCR; /* Disable map of NL to CR on input */
|
||||
tty.main.c_iflag &= ~INLCR; /* Disable map of NL to CR on input */
|
||||
#endif
|
||||
#ifdef ISTRIP
|
||||
tty.main.c_iflag &= ~ISTRIP; /* don't strip 8th bit on input */
|
||||
tty.main.c_iflag &= ~ISTRIP; /* don't strip 8th bit on input */
|
||||
#endif
|
||||
tty.main.c_lflag &= ~ECHO; /* Disable echo */
|
||||
tty.main.c_lflag &= ~ICANON; /* Disable erase/kill processing */
|
||||
tty.main.c_lflag &= ~ECHO; /* Disable echo */
|
||||
tty.main.c_lflag &= ~ICANON; /* Disable erase/kill processing */
|
||||
#ifdef IEXTEN
|
||||
tty.main.c_lflag &= ~IEXTEN; /* Disable other editing characters. */
|
||||
tty.main.c_lflag &= ~IEXTEN; /* Disable other editing characters. */
|
||||
#endif
|
||||
tty.main.c_lflag |= ISIG; /* Enable signals */
|
||||
if (tty_out->flow_control)
|
||||
{
|
||||
tty.main.c_iflag |= IXON; /* Enable start/stop output control */
|
||||
tty.main.c_lflag |= ISIG; /* Enable signals */
|
||||
if (tty_out->flow_control)
|
||||
{
|
||||
tty.main.c_iflag |= IXON; /* Enable start/stop output control */
|
||||
#ifdef IXANY
|
||||
tty.main.c_iflag &= ~IXANY;
|
||||
tty.main.c_iflag &= ~IXANY;
|
||||
#endif /* IXANY */
|
||||
}
|
||||
else
|
||||
tty.main.c_iflag &= ~IXON; /* Disable start/stop output control */
|
||||
tty.main.c_oflag &= ~ONLCR; /* Disable map of NL to CR-NL
|
||||
on output */
|
||||
tty.main.c_oflag &= ~TAB3; /* Disable tab expansion */
|
||||
}
|
||||
else
|
||||
tty.main.c_iflag &= ~IXON; /* Disable start/stop output control */
|
||||
tty.main.c_oflag &= ~ONLCR; /* Disable map of NL to CR-NL
|
||||
on output */
|
||||
tty.main.c_oflag &= ~TAB3; /* Disable tab expansion */
|
||||
#ifdef CS8
|
||||
if (tty_out->meta_key)
|
||||
{
|
||||
tty.main.c_cflag |= CS8; /* allow 8th bit on input */
|
||||
tty.main.c_cflag &= ~PARENB;/* Don't check parity */
|
||||
}
|
||||
if (tty_out->meta_key)
|
||||
{
|
||||
tty.main.c_cflag |= CS8; /* allow 8th bit on input */
|
||||
tty.main.c_cflag &= ~PARENB;/* Don't check parity */
|
||||
}
|
||||
#endif
|
||||
if (tty_out->input == stdin)
|
||||
{
|
||||
tty.main.c_cc[VINTR] = quit_char; /* C-g (usually) gives SIGINT */
|
||||
/* Set up C-g for both SIGQUIT and SIGINT.
|
||||
We don't know which we will get, but we handle both alike
|
||||
so which one it really gives us does not matter. */
|
||||
tty.main.c_cc[VQUIT] = quit_char;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We normally don't get interrupt or quit signals from tty
|
||||
devices other than our controlling terminal; therefore,
|
||||
we must handle C-g as normal input. Unfortunately, this
|
||||
means that the interrupt and quit feature must be
|
||||
disabled on secondary ttys, or we would not even see the
|
||||
keypress.
|
||||
|
||||
Note that even though emacsclient could have special code
|
||||
to pass SIGINT to Emacs, we should _not_ enable
|
||||
interrupt/quit keys for emacsclient frames. This means
|
||||
that we can't break out of loops in C code from a
|
||||
secondary tty frame, but we can always decide what
|
||||
display the C-g came from, which is more important from a
|
||||
usability point of view. (Consider the case when two
|
||||
people work together using the same Emacs instance.) */
|
||||
tty.main.c_cc[VINTR] = CDISABLE;
|
||||
tty.main.c_cc[VQUIT] = CDISABLE;
|
||||
}
|
||||
tty.main.c_cc[VMIN] = 1; /* Input should wait for at least 1 char */
|
||||
tty.main.c_cc[VTIME] = 0; /* no matter how long that takes. */
|
||||
if (tty_out->input == stdin)
|
||||
{
|
||||
tty.main.c_cc[VINTR] = quit_char; /* C-g (usually) gives SIGINT */
|
||||
/* Set up C-g for both SIGQUIT and SIGINT.
|
||||
We don't know which we will get, but we handle both alike
|
||||
so which one it really gives us does not matter. */
|
||||
tty.main.c_cc[VQUIT] = quit_char;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We normally don't get interrupt or quit signals from tty
|
||||
devices other than our controlling terminal; therefore,
|
||||
we must handle C-g as normal input. Unfortunately, this
|
||||
means that the interrupt and quit feature must be
|
||||
disabled on secondary ttys, or we would not even see the
|
||||
keypress.
|
||||
|
||||
Note that even though emacsclient could have special code
|
||||
to pass SIGINT to Emacs, we should _not_ enable
|
||||
interrupt/quit keys for emacsclient frames. This means
|
||||
that we can't break out of loops in C code from a
|
||||
secondary tty frame, but we can always decide what
|
||||
display the C-g came from, which is more important from a
|
||||
usability point of view. (Consider the case when two
|
||||
people work together using the same Emacs instance.) */
|
||||
tty.main.c_cc[VINTR] = CDISABLE;
|
||||
tty.main.c_cc[VQUIT] = CDISABLE;
|
||||
}
|
||||
tty.main.c_cc[VMIN] = 1; /* Input should wait for at least 1 char */
|
||||
tty.main.c_cc[VTIME] = 0; /* no matter how long that takes. */
|
||||
#ifdef VSWTCH
|
||||
tty.main.c_cc[VSWTCH] = CDISABLE; /* Turn off shell layering use
|
||||
tty.main.c_cc[VSWTCH] = CDISABLE; /* Turn off shell layering use
|
||||
of C-z */
|
||||
#endif /* VSWTCH */
|
||||
|
||||
|
||||
#if defined (mips) || defined (HAVE_TCATTR)
|
||||
#ifdef VSUSP
|
||||
tty.main.c_cc[VSUSP] = CDISABLE; /* Turn off mips handling of C-z. */
|
||||
tty.main.c_cc[VSUSP] = CDISABLE; /* Turn off mips handling of C-z. */
|
||||
#endif /* VSUSP */
|
||||
#ifdef V_DSUSP
|
||||
tty.main.c_cc[V_DSUSP] = CDISABLE; /* Turn off mips handling of C-y. */
|
||||
tty.main.c_cc[V_DSUSP] = CDISABLE; /* Turn off mips handling of C-y. */
|
||||
#endif /* V_DSUSP */
|
||||
#ifdef VDSUSP /* Some systems have VDSUSP, some have V_DSUSP. */
|
||||
tty.main.c_cc[VDSUSP] = CDISABLE;
|
||||
tty.main.c_cc[VDSUSP] = CDISABLE;
|
||||
#endif /* VDSUSP */
|
||||
#ifdef VLNEXT
|
||||
tty.main.c_cc[VLNEXT] = CDISABLE;
|
||||
tty.main.c_cc[VLNEXT] = CDISABLE;
|
||||
#endif /* VLNEXT */
|
||||
#ifdef VREPRINT
|
||||
tty.main.c_cc[VREPRINT] = CDISABLE;
|
||||
tty.main.c_cc[VREPRINT] = CDISABLE;
|
||||
#endif /* VREPRINT */
|
||||
#ifdef VWERASE
|
||||
tty.main.c_cc[VWERASE] = CDISABLE;
|
||||
tty.main.c_cc[VWERASE] = CDISABLE;
|
||||
#endif /* VWERASE */
|
||||
#ifdef VDISCARD
|
||||
tty.main.c_cc[VDISCARD] = CDISABLE;
|
||||
tty.main.c_cc[VDISCARD] = CDISABLE;
|
||||
#endif /* VDISCARD */
|
||||
|
||||
if (tty_out->flow_control)
|
||||
{
|
||||
if (tty_out->flow_control)
|
||||
{
|
||||
#ifdef VSTART
|
||||
tty.main.c_cc[VSTART] = '\021';
|
||||
tty.main.c_cc[VSTART] = '\021';
|
||||
#endif /* VSTART */
|
||||
#ifdef VSTOP
|
||||
tty.main.c_cc[VSTOP] = '\023';
|
||||
tty.main.c_cc[VSTOP] = '\023';
|
||||
#endif /* VSTOP */
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef VSTART
|
||||
tty.main.c_cc[VSTART] = CDISABLE;
|
||||
tty.main.c_cc[VSTART] = CDISABLE;
|
||||
#endif /* VSTART */
|
||||
#ifdef VSTOP
|
||||
tty.main.c_cc[VSTOP] = CDISABLE;
|
||||
tty.main.c_cc[VSTOP] = CDISABLE;
|
||||
#endif /* VSTOP */
|
||||
}
|
||||
}
|
||||
#endif /* mips or HAVE_TCATTR */
|
||||
|
||||
#ifdef SET_LINE_DISCIPLINE
|
||||
/* Need to explicitly request TERMIODISC line discipline or
|
||||
Ultrix's termios does not work correctly. */
|
||||
tty.main.c_line = SET_LINE_DISCIPLINE;
|
||||
/* Need to explicitly request TERMIODISC line discipline or
|
||||
Ultrix's termios does not work correctly. */
|
||||
tty.main.c_line = SET_LINE_DISCIPLINE;
|
||||
#endif
|
||||
#ifdef AIX
|
||||
#ifndef IBMR2AIX
|
||||
/* AIX enhanced edit loses NULs, so disable it. */
|
||||
tty.main.c_line = 0;
|
||||
tty.main.c_iflag &= ~ASCEDIT;
|
||||
/* AIX enhanced edit loses NULs, so disable it. */
|
||||
tty.main.c_line = 0;
|
||||
tty.main.c_iflag &= ~ASCEDIT;
|
||||
#else
|
||||
tty.main.c_cc[VSTRT] = 255;
|
||||
tty.main.c_cc[VSTOP] = 255;
|
||||
tty.main.c_cc[VSUSP] = 255;
|
||||
tty.main.c_cc[VDSUSP] = 255;
|
||||
tty.main.c_cc[VSTRT] = 255;
|
||||
tty.main.c_cc[VSTOP] = 255;
|
||||
tty.main.c_cc[VSUSP] = 255;
|
||||
tty.main.c_cc[VDSUSP] = 255;
|
||||
#endif /* IBMR2AIX */
|
||||
if (tty_out->flow_control)
|
||||
{
|
||||
if (tty_out->flow_control)
|
||||
{
|
||||
#ifdef VSTART
|
||||
tty.main.c_cc[VSTART] = '\021';
|
||||
tty.main.c_cc[VSTART] = '\021';
|
||||
#endif /* VSTART */
|
||||
#ifdef VSTOP
|
||||
tty.main.c_cc[VSTOP] = '\023';
|
||||
tty.main.c_cc[VSTOP] = '\023';
|
||||
#endif /* VSTOP */
|
||||
}
|
||||
/* Also, PTY overloads NUL and BREAK.
|
||||
don't ignore break, but don't signal either, so it looks like NUL.
|
||||
This really serves a purpose only if running in an XTERM window
|
||||
or via TELNET or the like, but does no harm elsewhere. */
|
||||
tty.main.c_iflag &= ~IGNBRK;
|
||||
tty.main.c_iflag &= ~BRKINT;
|
||||
}
|
||||
/* Also, PTY overloads NUL and BREAK.
|
||||
don't ignore break, but don't signal either, so it looks like NUL.
|
||||
This really serves a purpose only if running in an XTERM window
|
||||
or via TELNET or the like, but does no harm elsewhere. */
|
||||
tty.main.c_iflag &= ~IGNBRK;
|
||||
tty.main.c_iflag &= ~BRKINT;
|
||||
#endif
|
||||
#else /* if not HAVE_TERMIO */
|
||||
#ifdef VMS
|
||||
tty.main.tt_char |= TT$M_NOECHO;
|
||||
if (meta_key)
|
||||
tty.main.tt_char |= TT$M_EIGHTBIT;
|
||||
if (tty_out->flow_control)
|
||||
tty.main.tt_char |= TT$M_TTSYNC;
|
||||
else
|
||||
tty.main.tt_char &= ~TT$M_TTSYNC;
|
||||
tty.main.tt2_char |= TT2$M_PASTHRU | TT2$M_XON;
|
||||
tty.main.tt_char |= TT$M_NOECHO;
|
||||
if (meta_key)
|
||||
tty.main.tt_char |= TT$M_EIGHTBIT;
|
||||
if (tty_out->flow_control)
|
||||
tty.main.tt_char |= TT$M_TTSYNC;
|
||||
else
|
||||
tty.main.tt_char &= ~TT$M_TTSYNC;
|
||||
tty.main.tt2_char |= TT2$M_PASTHRU | TT2$M_XON;
|
||||
#else /* not VMS (BSD, that is) */
|
||||
#ifndef DOS_NT
|
||||
XSETINT (Vtty_erase_char, tty.main.sg_erase);
|
||||
tty.main.sg_flags &= ~(ECHO | CRMOD | XTABS);
|
||||
if (meta_key)
|
||||
tty.main.sg_flags |= ANYP;
|
||||
tty.main.sg_flags |= interrupt_input ? RAW : CBREAK;
|
||||
XSETINT (Vtty_erase_char, tty.main.sg_erase);
|
||||
tty.main.sg_flags &= ~(ECHO | CRMOD | XTABS);
|
||||
if (meta_key)
|
||||
tty.main.sg_flags |= ANYP;
|
||||
tty.main.sg_flags |= interrupt_input ? RAW : CBREAK;
|
||||
#endif /* not DOS_NT */
|
||||
#endif /* not VMS (BSD, that is) */
|
||||
#endif /* not HAVE_TERMIO */
|
||||
|
||||
/* If going to use CBREAK mode, we must request C-g to interrupt
|
||||
and turn off start and stop chars, etc. If not going to use
|
||||
CBREAK mode, do this anyway so as to turn off local flow
|
||||
control for user coming over network on 4.2; in this case,
|
||||
only t_stopc and t_startc really matter. */
|
||||
/* If going to use CBREAK mode, we must request C-g to interrupt
|
||||
and turn off start and stop chars, etc. If not going to use
|
||||
CBREAK mode, do this anyway so as to turn off local flow
|
||||
control for user coming over network on 4.2; in this case,
|
||||
only t_stopc and t_startc really matter. */
|
||||
#ifndef HAVE_TERMIO
|
||||
#ifdef HAVE_TCHARS
|
||||
/* Note: if not using CBREAK mode, it makes no difference how we
|
||||
set this */
|
||||
tty.tchars = new_tchars;
|
||||
tty.tchars.t_intrc = quit_char;
|
||||
if (tty_out->flow_control)
|
||||
{
|
||||
tty.tchars.t_startc = '\021';
|
||||
tty.tchars.t_stopc = '\023';
|
||||
}
|
||||
|
||||
tty.lmode = LDECCTQ | LLITOUT | LPASS8 | LNOFLSH | tty_out->old_tty.lmode;
|
||||
/* Note: if not using CBREAK mode, it makes no difference how we
|
||||
set this */
|
||||
tty.tchars = new_tchars;
|
||||
tty.tchars.t_intrc = quit_char;
|
||||
if (tty_out->flow_control)
|
||||
{
|
||||
tty.tchars.t_startc = '\021';
|
||||
tty.tchars.t_stopc = '\023';
|
||||
}
|
||||
|
||||
tty.lmode = LDECCTQ | LLITOUT | LPASS8 | LNOFLSH | tty_out->old_tty.lmode;
|
||||
#ifdef ultrix
|
||||
/* Under Ultrix 4.2a, leaving this out doesn't seem to hurt
|
||||
anything, and leaving it in breaks the meta key. Go figure. */
|
||||
tty.lmode &= ~LLITOUT;
|
||||
/* Under Ultrix 4.2a, leaving this out doesn't seem to hurt
|
||||
anything, and leaving it in breaks the meta key. Go figure. */
|
||||
tty.lmode &= ~LLITOUT;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef BSD4_1
|
||||
lmode = tty.lmode;
|
||||
lmode = tty.lmode;
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_TCHARS */
|
||||
#endif /* not HAVE_TERMIO */
|
||||
|
||||
#ifdef HAVE_LTCHARS
|
||||
tty.ltchars = new_ltchars;
|
||||
tty.ltchars = new_ltchars;
|
||||
#endif /* HAVE_LTCHARS */
|
||||
#ifdef MSDOS /* Demacs 1.1.2 91/10/20 Manabu Higashida, MW Aug 1993 */
|
||||
if (!tty_out->term_initted)
|
||||
internal_terminal_init ();
|
||||
dos_ttraw ();
|
||||
if (!tty_out->term_initted)
|
||||
internal_terminal_init ();
|
||||
dos_ttraw ();
|
||||
#endif
|
||||
|
||||
EMACS_SET_TTY (fileno (TTY_INPUT (tty_out)), &tty, 0);
|
||||
EMACS_SET_TTY (fileno (TTY_INPUT (tty_out)), &tty, 0);
|
||||
|
||||
/* This code added to insure that, if flow-control is not to be used,
|
||||
we have an unlocked terminal at the start. */
|
||||
/* This code added to insure that, if flow-control is not to be used,
|
||||
we have an unlocked terminal at the start. */
|
||||
|
||||
#ifdef TCXONC
|
||||
if (!tty_out->flow_control) ioctl (fileno (TTY_INPUT (tty_out)), TCXONC, 1);
|
||||
if (!tty_out->flow_control) ioctl (fileno (TTY_INPUT (tty_out)), TCXONC, 1);
|
||||
#endif
|
||||
#ifndef APOLLO
|
||||
#ifdef TIOCSTART
|
||||
if (!tty_out->flow_control) ioctl (fileno (TTY_INPUT (tty_out)), TIOCSTART, 0);
|
||||
if (!tty_out->flow_control) ioctl (fileno (TTY_INPUT (tty_out)), TIOCSTART, 0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (HAVE_TERMIOS) || defined (HPUX9)
|
||||
#ifdef TCOON
|
||||
if (!tty_out->flow_control) tcflow (fileno (TTY_INPUT (tty_out)), TCOON);
|
||||
if (!tty_out->flow_control) tcflow (fileno (TTY_INPUT (tty_out)), TCOON);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef AIXHFT
|
||||
hft_init (tty_out);
|
||||
hft_init (tty_out);
|
||||
#ifdef IBMR2AIX
|
||||
{
|
||||
/* IBM's HFT device usually thinks a ^J should be LF/CR. We need it
|
||||
to be only LF. This is the way that is done. */
|
||||
struct termio tty;
|
||||
|
||||
if (ioctl (1, HFTGETID, &tty) != -1)
|
||||
write (1, "\033[20l", 5);
|
||||
}
|
||||
{
|
||||
/* IBM's HFT device usually thinks a ^J should be LF/CR. We need it
|
||||
to be only LF. This is the way that is done. */
|
||||
struct termio tty;
|
||||
|
||||
if (ioctl (1, HFTGETID, &tty) != -1)
|
||||
write (1, "\033[20l", 5);
|
||||
}
|
||||
#endif
|
||||
#endif /* AIXHFT */
|
||||
|
||||
|
@ -1663,15 +1657,13 @@ nil means don't delete them until `list-processes' is run. */);
|
|||
SYS$QIOW (0, fileno (TTY_INPUT (tty_out)), IO$_SETMODE|IO$M_OUTBAND, 0, 0, 0,
|
||||
interrupt_signal, oob_chars, 0, 0, 0, 0);
|
||||
*/
|
||||
queue_kbd_input (0);
|
||||
queue_kbd_input (0);
|
||||
#endif /* VMS */
|
||||
}
|
||||
|
||||
#ifdef F_SETFL
|
||||
#ifndef F_SETOWN_BUG
|
||||
#ifdef F_GETOWN /* F_SETFL does not imply existence of F_GETOWN */
|
||||
if (interrupt_input
|
||||
&& (tty_out->input != stdin || EQ (Vwindow_system, Qnil)))
|
||||
if (interrupt_input)
|
||||
{
|
||||
old_fcntl_owner[fileno (TTY_INPUT (tty_out))] =
|
||||
fcntl (fileno (TTY_INPUT (tty_out)), F_GETOWN, 0);
|
||||
|
@ -1699,20 +1691,7 @@ nil means don't delete them until `list-processes' is run. */);
|
|||
setbuf (TTY_OUTPUT (tty_out), (char *) _sobuf);
|
||||
#endif
|
||||
|
||||
#if 0 /* We always need this with multi-tty support. */
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
/* Emacs' window system on MSDOG uses the `internal terminal' and therefore
|
||||
needs the initialization code below. */
|
||||
if (EQ (Vwindow_system, Qnil)
|
||||
#ifndef WINDOWSNT
|
||||
/* When running in tty mode on NT/Win95, we have a read_socket
|
||||
hook, but still need the rest of the initialization code below. */
|
||||
&& (! read_socket_hook)
|
||||
#endif
|
||||
)
|
||||
#endif
|
||||
#endif
|
||||
tty_set_terminal_modes (tty_out->display);
|
||||
tty_set_terminal_modes (tty_out->display);
|
||||
|
||||
if (!tty_out->term_initted)
|
||||
{
|
||||
|
@ -1875,21 +1854,6 @@ reset_sys_modes (tty_out)
|
|||
}
|
||||
if (!tty_out->term_initted)
|
||||
return;
|
||||
#if 0 /* We always need to do this with multi-tty support. */
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
/* Emacs' window system on MSDOG uses the `internal terminal' and therefore
|
||||
needs the clean-up code below. */
|
||||
if (tty_out->input != stdin
|
||||
|| (!EQ (Vwindow_system, Qnil)
|
||||
#ifndef WINDOWSNT
|
||||
/* When running in tty mode on NT/Win95, we have a read_socket
|
||||
hook, but still need the rest of the clean-up code below. */
|
||||
|| read_socket_hook
|
||||
#endif
|
||||
))
|
||||
return;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
cmgoto (tty_out, FrameRows (tty_out) - 1, 0);
|
||||
#if 0 /* XXX This doesn't work anymore, the signature has changed. */
|
||||
|
@ -2578,7 +2542,9 @@ sys_select (nfds, rfds, wfds, efds, timeout)
|
|||
SELECT_TYPE *rfds, *wfds, *efds;
|
||||
EMACS_TIME *timeout;
|
||||
{
|
||||
int ravail = 0;
|
||||
/* XXX This needs to be updated for multi-tty support. Is there
|
||||
anybody who needs to emulate select these days? */
|
||||
int ravail = 0;
|
||||
SELECT_TYPE orfds;
|
||||
int timeoutval;
|
||||
int *local_timeout;
|
||||
|
@ -2593,7 +2559,7 @@ sys_select (nfds, rfds, wfds, efds, timeout)
|
|||
#if defined (HAVE_SELECT) && defined (HAVE_X_WINDOWS)
|
||||
/* If we're using X, then the native select will work; we only need the
|
||||
emulation for non-X usage. */
|
||||
if (!NILP (Vwindow_system))
|
||||
if (!NILP (Vinitial_window_system))
|
||||
return select (nfds, rfds, wfds, efds, timeout);
|
||||
#endif
|
||||
timeoutval = timeout ? EMACS_SECS (*timeout) : 100000;
|
||||
|
@ -2717,8 +2683,8 @@ sys_select (nfds, rfds, wfds, efds, timeout)
|
|||
void
|
||||
read_input_waiting ()
|
||||
{
|
||||
/* XXX This needs to be updated for multi-tty support. Does
|
||||
anybody need to emulate select these days? */
|
||||
/* XXX This needs to be updated for multi-tty support. Is there
|
||||
anybody who needs to emulate select these days? */
|
||||
int nread, i;
|
||||
extern int quit_char;
|
||||
|
||||
|
|
|
@ -744,7 +744,7 @@ extern Lisp_Object Vminibuf_scroll_window;
|
|||
/* Nil or a symbol naming the window system under which emacs is
|
||||
running ('x is the only current possibility) */
|
||||
|
||||
extern Lisp_Object Vwindow_system;
|
||||
extern Lisp_Object Vinitial_window_system;
|
||||
|
||||
/* Version number of X windows: 10, 11 or nil. */
|
||||
|
||||
|
|
14
src/xfns.c
14
src/xfns.c
|
@ -3188,8 +3188,6 @@ This function is an internal primitive--use `make-frame' instead. */)
|
|||
Lisp_Object parent;
|
||||
struct kboard *kb;
|
||||
|
||||
check_x ();
|
||||
|
||||
/* Use this general default value to start with
|
||||
until we know if this frame has a specified name. */
|
||||
Vx_resource_name = Vinvocation_name;
|
||||
|
@ -4124,8 +4122,10 @@ x_display_info_for_name (name)
|
|||
|
||||
CHECK_STRING (name);
|
||||
|
||||
if (! EQ (Vwindow_system, intern ("x")))
|
||||
error ("Not using X Windows");
|
||||
#if 0
|
||||
if (! EQ (Vinitial_window_system, intern ("x")))
|
||||
error ("Not using X Windows"); /* That doesn't stop us anymore. */
|
||||
#endif
|
||||
|
||||
for (dpyinfo = x_display_list, names = x_display_name_list;
|
||||
dpyinfo;
|
||||
|
@ -4172,8 +4172,10 @@ terminate Emacs if we can't open the connection. */)
|
|||
if (! NILP (xrm_string))
|
||||
CHECK_STRING (xrm_string);
|
||||
|
||||
if (! EQ (Vwindow_system, intern ("x")))
|
||||
error ("Not using X Windows");
|
||||
#if 0
|
||||
if (! EQ (Vinitial_window_system, intern ("x")))
|
||||
error ("Not using X Windows"); /* That doesn't stop us anymore. */
|
||||
#endif
|
||||
|
||||
if (! NILP (xrm_string))
|
||||
xrm_option = (unsigned char *) SDATA (xrm_string);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue