# HG changeset patch # User Richard M. Stallman # Date 793008573 0 # Node ID 938451cf1b102ae621ec3e2d945657e60f575cf1 # Parent 2954efb1d06c6c5290573062bd8a1fe2c71caf07 (Fmake_terminal_frame): New function. (syms_of_frame): defsubr it. (make_terminal_frame): Init Vframe_list only the first time. Set visible and async_visible directly. (redisplay): Don't display nonselected terminal frames. diff -r 2954efb1d06c -r 938451cf1b10 src/frame.c --- a/src/frame.c Thu Feb 16 06:45:36 1995 +0000 +++ b/src/frame.c Fri Feb 17 08:09:33 1995 +0000 @@ -323,24 +323,55 @@ /* Construct a frame that refers to the terminal (stdin and stdout). */ +static int terminal_frame_count; + struct frame * make_terminal_frame () { register struct frame *f; Lisp_Object frame; + char name[20]; - Vframe_list = Qnil; + /* The first call must initialize Vframe_list. */ + if (! (NILP (Vframe_list) || CONSP (Vframe_list))) + Vframe_list = Qnil; + f = make_frame (1); XSETFRAME (frame, f); Vframe_list = Fcons (frame, Vframe_list); - f->name = build_string ("terminal"); - FRAME_SET_VISIBLE (f, 1); - f->display.nothing = 1; /* Nonzero means frame isn't deleted. */ + terminal_frame_count++; + sprintf (name, "terminal-%d", terminal_frame_count); + + f->name = build_string (name); + f->visible = 1; /* FRAME_SET_VISIBLE wd set frame_garbaged. */ + f->async_visible = 1; /* Don't let visible be cleared later. */ + f->display.nothing = 1; /* Nonzero means frame isn't deleted. */ XSETFRAME (Vterminal_frame, f); return f; } + +DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame, + 1, 1, 0, "") + (parms) + Lisp_Object parms; +{ + struct frame *f; + Lisp_Object frame; + + if (selected_frame->output_method != output_termcap) + error ("Not using an ASCII terminal now; cannot make a new ASCII frame"); + + f = make_terminal_frame (); + change_frame_size (f, FRAME_HEIGHT (selected_frame), + FRAME_WIDTH (selected_frame), 0, 0); + remake_frame_glyphs (f); + calculate_costs (f); + XSETFRAME (frame, f); + Fmodify_frame_parameters (frame, parms); + return frame; +} static Lisp_Object do_switch_frame (frame, no_enter, track) @@ -409,6 +440,14 @@ #endif /* HAVE_X_WINDOWS */ #endif /* ! 0 */ + if (FRAME_TERMCAP_P (XFRAME (frame))) + { + /* Since frames on an ASCII terminal share the same display area, + switching means we must redisplay the whole thing. */ + windows_or_buffers_changed++; + SET_FRAME_GARBAGED (XFRAME (frame)); + } + selected_frame = XFRAME (frame); if (! FRAME_MINIBUF_ONLY_P (selected_frame)) last_nonminibuf_frame = selected_frame; @@ -1810,6 +1849,7 @@ defsubr (&Sframep); defsubr (&Sframe_live_p); + defsubr (&Smake_terminal_frame); defsubr (&Shandle_switch_frame); defsubr (&Sselect_frame); defsubr (&Sselected_frame);