Mercurial > emacs
diff src/keyboard.c @ 53233:fe9b37bee5f7
Fully eliminated global tty state variables.
lib-src/emacsclient.c (main.c): Fix error message.
lisp/frame.el (make-frame-on-tty): New function.
lisp/server.el (server-process-filter): Notify emacsclient if there
was on error during evaluation.
src/cm.c: Fix remaining cases of direct Wcm references.
src/dispextern.h: Updated prototypes.
src/dispnew.c (Fredraw_frame): Fix set_terminal_modes call.
(init_display): Remove reference to meta_key.
src/frame.c (make_terminal_frame): Renamed first parameter to
tty_name. Call term_init before creating the frame.
(Fmake_terminal_frame): Look up the `tty' and `tty-type' frame
parameters from the currently selected terminal before the global
default.
(Fdelete_frame): Make sure that the new selected frame is live.
src/keyboard.c (meta_key): Moved to struct tty_output.
(read_avail_input): Fix C syntax. Update references to meta_key.
(Fsuspend_emacs): pass current tty to init_sys_modes via
record_unwind_protect.
(Fset_input_mode): Update references to meta_key.
(Fcurrent_input_mode): Ditto.
src/sysdep.c (init_sys_modes): Updated old_tty and meta_key
references. Don't call set_terminal_modes, it needs termcap strings.
(reset_sys_modes): Call tty_reset_terminal_modes instead of
reset_terminal_modes. Updated old_tty references.
src/term.c: Massive updates throuout the file.
(TS_*, TN_*): Moved to struct tty_output.
(RPov, delete_in_insert_mode se_is_so, costs_set, insert_mode): Ditto.
(standout_mode, specified_window, tty_cursor_hidden): Ditto.
(tty_set_terminal_modes, tty_reset_terminal_modes): New functions.
(turn_on_insert, turn_off_insert): Added tty parameter.
(turn_on_highlight, turn_off_highlight, toggle_highlight): Added tty parameter.
(tty_hide_cursor, tty_show_cursor): Ditto.
(background_highlight, highlight_if_desired): Ditto.
(tty_capable_p): Changed first parameter to tty_output.
(term_init): Make sure top_frame is initialized. Don't exit on errors
if this would have been a secondary terminal. Call set_terminal_modes
on the end.
(delete_tty): New function.
(delete_tty_1): New function.
(print_all_frames): New function, marginally useful for debugging.
src/termchar.h (struct tty_output): Changed old_tty to be a pointer.
Removed old_tty_valid member. Added tty-specific variables from term.c.
src/xfaces.c (Ftty_supports_face_attributes_p): Update for new
tty_capable_p.
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-9
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Sat, 27 Dec 2003 10:00:19 +0000 |
parents | 22aaf1e5fbe6 |
children | 09ea561dfa8c |
line wrap: on
line diff
--- a/src/keyboard.c Sat Dec 27 01:12:57 2003 +0000 +++ b/src/keyboard.c Sat Dec 27 10:00:19 2003 +0000 @@ -461,11 +461,6 @@ /* Nonzero if input is available. */ int input_pending; -/* 1 if should obey 0200 bit in input chars as "Meta", 2 if should - keep 0200 bit in input chars. 0 to ignore the 0200 bit. */ - -int meta_key; - /* Non-zero means force key bindings update in parse_menu_item. */ int update_menu_bindings; @@ -6593,7 +6588,9 @@ of characters on some systems when input is stuffed at us. */ unsigned char cbuf[KBD_BUFFER_SIZE - 1]; int n_to_read; - + struct tty_output *tty; + Lisp_Object frame; + #ifdef WINDOWSNT return 0; #else /* not WINDOWSNT */ @@ -6607,12 +6604,14 @@ #else /* not MSDOS */ - struct tty_output *tty; nread = 0; /* Try to read from each available tty, until one succeeds. */ for (tty = tty_list; tty; tty = tty->next) { - + + if (! tty->term_initted) + continue; + /* Determine how many characters we should *try* to read. */ #ifdef FIONREAD /* Find out how much input is available. */ @@ -6720,15 +6719,15 @@ /* Select frame corresponding to the active tty. Note that the value of selected_frame is not reliable here, redisplay tends to temporarily change it. But tty should always be non-NULL. */ - Lisp_Object frame = (tty ? tty->top_frame : selected_frame); - + frame = (tty ? tty->top_frame : selected_frame); + for (i = 0; i < nread; i++) { buf[i].kind = ASCII_KEYSTROKE_EVENT; buf[i].modifiers = 0; - if (meta_key == 1 && (cbuf[i] & 0x80)) + if (tty->meta_key == 1 && (cbuf[i] & 0x80)) buf[i].modifiers = meta_modifier; - if (meta_key != 2) + if (tty->meta_key != 2) cbuf[i] &= ~0x80; buf[i].code = cbuf[i]; @@ -10109,7 +10108,7 @@ /* sys_suspend can get an error if it tries to fork a subshell and the system resources aren't available for that. */ record_unwind_protect ((Lisp_Object (*) P_ ((Lisp_Object))) init_sys_modes, - Qnil); + (Lisp_Object)CURTTY()); /* XXX */ stuff_buffered_input (stuffstring); if (cannot_suspend) sys_subshell (); @@ -10438,14 +10437,14 @@ flow_control = !NILP (flow); if (NILP (meta)) - meta_key = 0; + FRAME_TTY (SELECTED_FRAME ())->meta_key = 0; else if (EQ (meta, Qt)) - meta_key = 1; + FRAME_TTY (SELECTED_FRAME ())->meta_key = 1; else - meta_key = 2; + FRAME_TTY (SELECTED_FRAME ())->meta_key = 2; if (!NILP (quit)) /* Don't let this value be out of range. */ - quit_char = XINT (quit) & (meta_key ? 0377 : 0177); + quit_char = XINT (quit) & (FRAME_TTY (SELECTED_FRAME ())->meta_key ? 0377 : 0177); #ifndef DOS_NT init_all_sys_modes (); @@ -10478,7 +10477,9 @@ val[0] = interrupt_input ? Qt : Qnil; val[1] = flow_control ? Qt : Qnil; - val[2] = meta_key == 2 ? make_number (0) : meta_key == 1 ? Qt : Qnil; + val[2] = FRAME_TTY (SELECTED_FRAME ())->meta_key == 2 + ? make_number (0) + : FRAME_TTY (SELECTED_FRAME ())->meta_key == 1 ? Qt : Qnil; XSETFASTINT (val[3], quit_char); return Flist (sizeof (val) / sizeof (val[0]), val);