comparison src/frame.c @ 10768:938451cf1b10

(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.
author Richard M. Stallman <rms@gnu.org>
date Fri, 17 Feb 1995 08:09:33 +0000
parents 12ce96dd2afb
children bb2d929daaa3
comparison
equal deleted inserted replaced
10767:2954efb1d06c 10768:938451cf1b10
321 return f; 321 return f;
322 } 322 }
323 323
324 /* Construct a frame that refers to the terminal (stdin and stdout). */ 324 /* Construct a frame that refers to the terminal (stdin and stdout). */
325 325
326 static int terminal_frame_count;
327
326 struct frame * 328 struct frame *
327 make_terminal_frame () 329 make_terminal_frame ()
328 { 330 {
329 register struct frame *f; 331 register struct frame *f;
330 Lisp_Object frame; 332 Lisp_Object frame;
331 333 char name[20];
332 Vframe_list = Qnil; 334
335 /* The first call must initialize Vframe_list. */
336 if (! (NILP (Vframe_list) || CONSP (Vframe_list)))
337 Vframe_list = Qnil;
338
333 f = make_frame (1); 339 f = make_frame (1);
334 340
335 XSETFRAME (frame, f); 341 XSETFRAME (frame, f);
336 Vframe_list = Fcons (frame, Vframe_list); 342 Vframe_list = Fcons (frame, Vframe_list);
337 343
338 f->name = build_string ("terminal"); 344 terminal_frame_count++;
339 FRAME_SET_VISIBLE (f, 1); 345 sprintf (name, "terminal-%d", terminal_frame_count);
340 f->display.nothing = 1; /* Nonzero means frame isn't deleted. */ 346
347 f->name = build_string (name);
348 f->visible = 1; /* FRAME_SET_VISIBLE wd set frame_garbaged. */
349 f->async_visible = 1; /* Don't let visible be cleared later. */
350 f->display.nothing = 1; /* Nonzero means frame isn't deleted. */
341 XSETFRAME (Vterminal_frame, f); 351 XSETFRAME (Vterminal_frame, f);
342 return f; 352 return f;
353 }
354
355 DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame,
356 1, 1, 0, "")
357 (parms)
358 Lisp_Object parms;
359 {
360 struct frame *f;
361 Lisp_Object frame;
362
363 if (selected_frame->output_method != output_termcap)
364 error ("Not using an ASCII terminal now; cannot make a new ASCII frame");
365
366 f = make_terminal_frame ();
367 change_frame_size (f, FRAME_HEIGHT (selected_frame),
368 FRAME_WIDTH (selected_frame), 0, 0);
369 remake_frame_glyphs (f);
370 calculate_costs (f);
371 XSETFRAME (frame, f);
372 Fmodify_frame_parameters (frame, parms);
373 return frame;
343 } 374 }
344 375
345 static Lisp_Object 376 static Lisp_Object
346 do_switch_frame (frame, no_enter, track) 377 do_switch_frame (frame, no_enter, track)
347 Lisp_Object frame, no_enter; 378 Lisp_Object frame, no_enter;
406 Fredirect_frame_focus (xfocus, frame); 437 Fredirect_frame_focus (xfocus, frame);
407 } 438 }
408 } 439 }
409 #endif /* HAVE_X_WINDOWS */ 440 #endif /* HAVE_X_WINDOWS */
410 #endif /* ! 0 */ 441 #endif /* ! 0 */
442
443 if (FRAME_TERMCAP_P (XFRAME (frame)))
444 {
445 /* Since frames on an ASCII terminal share the same display area,
446 switching means we must redisplay the whole thing. */
447 windows_or_buffers_changed++;
448 SET_FRAME_GARBAGED (XFRAME (frame));
449 }
411 450
412 selected_frame = XFRAME (frame); 451 selected_frame = XFRAME (frame);
413 if (! FRAME_MINIBUF_ONLY_P (selected_frame)) 452 if (! FRAME_MINIBUF_ONLY_P (selected_frame))
414 last_nonminibuf_frame = selected_frame; 453 last_nonminibuf_frame = selected_frame;
415 454
1808 have menu bars; `menu-bar-mode' works by altering this element."); 1847 have menu bars; `menu-bar-mode' works by altering this element.");
1809 Vdefault_frame_alist = Qnil; 1848 Vdefault_frame_alist = Qnil;
1810 1849
1811 defsubr (&Sframep); 1850 defsubr (&Sframep);
1812 defsubr (&Sframe_live_p); 1851 defsubr (&Sframe_live_p);
1852 defsubr (&Smake_terminal_frame);
1813 defsubr (&Shandle_switch_frame); 1853 defsubr (&Shandle_switch_frame);
1814 defsubr (&Sselect_frame); 1854 defsubr (&Sselect_frame);
1815 defsubr (&Sselected_frame); 1855 defsubr (&Sselected_frame);
1816 defsubr (&Swindow_frame); 1856 defsubr (&Swindow_frame);
1817 defsubr (&Sframe_root_window); 1857 defsubr (&Sframe_root_window);