diff options
| author | Jim Blandy | 1991-12-11 19:19:07 +0000 |
|---|---|---|
| committer | Jim Blandy | 1991-12-11 19:19:07 +0000 |
| commit | f9898cc66c69d6c931e0ca7f74d85e41538f63c9 (patch) | |
| tree | 3dc8ab44df55c95f5ed18620886362dc84094e24 /src | |
| parent | a17915dc4c38e41ce29ec74dd56074ea01e6a206 (diff) | |
| download | emacs-f9898cc66c69d6c931e0ca7f74d85e41538f63c9.tar.gz emacs-f9898cc66c69d6c931e0ca7f74d85e41538f63c9.zip | |
*** empty log message ***
Diffstat (limited to 'src')
| -rw-r--r-- | src/frame.c | 392 |
1 files changed, 189 insertions, 203 deletions
diff --git a/src/frame.c b/src/frame.c index 4e02463857a..5eaf5897e01 100644 --- a/src/frame.c +++ b/src/frame.c | |||
| @@ -27,9 +27,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |||
| 27 | 27 | ||
| 28 | Lisp_Object Vemacs_iconified; | 28 | Lisp_Object Vemacs_iconified; |
| 29 | Lisp_Object Qscreenp; | 29 | Lisp_Object Qscreenp; |
| 30 | Lisp_Object Qlive_screen_p; | ||
| 30 | Lisp_Object Vscreen_list; | 31 | Lisp_Object Vscreen_list; |
| 31 | Lisp_Object Vterminal_screen; | 32 | Lisp_Object Vterminal_screen; |
| 32 | Lisp_Object Vglobal_minibuffer_screen; | 33 | Lisp_Object Vdefault_minibuffer_screen; |
| 33 | Lisp_Object Vdefault_screen_alist; | 34 | Lisp_Object Vdefault_screen_alist; |
| 34 | 35 | ||
| 35 | /* A screen which is not just a minibuffer, or 0 if there are no | 36 | /* A screen which is not just a minibuffer, or 0 if there are no |
| @@ -43,13 +44,14 @@ extern Lisp_Object get_minibuffer (); | |||
| 43 | DEFUN ("screenp", Fscreenp, Sscreenp, 1, 1, 0, | 44 | DEFUN ("screenp", Fscreenp, Sscreenp, 1, 1, 0, |
| 44 | "Return non-nil if OBJECT is a screen.\n\ | 45 | "Return non-nil if OBJECT is a screen.\n\ |
| 45 | Value is t for a termcap screen (a character-only terminal),\n\ | 46 | Value is t for a termcap screen (a character-only terminal),\n\ |
| 46 | `x' for an Emacs screen that is really an X window.") | 47 | `x' for an Emacs screen that is really an X window.\n\ |
| 47 | (screen) | 48 | Also see live-screen-p.") |
| 48 | Lisp_Object screen; | 49 | (object) |
| 50 | Lisp_Object object; | ||
| 49 | { | 51 | { |
| 50 | if (XTYPE (screen) != Lisp_Screen) | 52 | if (XTYPE (object) != Lisp_Screen) |
| 51 | return Qnil; | 53 | return Qnil; |
| 52 | switch (XSCREEN (screen)->output_method) | 54 | switch (XSCREEN (object)->output_method) |
| 53 | { | 55 | { |
| 54 | case output_termcap: | 56 | case output_termcap: |
| 55 | return Qt; | 57 | return Qt; |
| @@ -60,6 +62,21 @@ Value is t for a termcap screen (a character-only terminal),\n\ | |||
| 60 | } | 62 | } |
| 61 | } | 63 | } |
| 62 | 64 | ||
| 65 | DEFUN ("live-screen-p", Flive_screen_p, Slive_screen_p, 1, 1, 0, | ||
| 66 | "Return non-nil if OBJECT is a screen which has not been deleted.\n\ | ||
| 67 | Value is nil if OBJECT is not a live screen. If object is a live\n\ | ||
| 68 | screen, the return value indicates what sort of output device it is\n\ | ||
| 69 | displayed on. Value is t for a termcap screen (a character-only\n\ | ||
| 70 | terminal), `x' for an Emacs screen being displayed in an X window.") | ||
| 71 | (object) | ||
| 72 | Lisp_Object object; | ||
| 73 | { | ||
| 74 | return ((SCREENP (object) | ||
| 75 | && SCREEN_LIVE_P (XSCREEN (object))) | ||
| 76 | ? Fscreenp (object) | ||
| 77 | : Qnil); | ||
| 78 | } | ||
| 79 | |||
| 63 | struct screen * | 80 | struct screen * |
| 64 | make_screen (mini_p) | 81 | make_screen (mini_p) |
| 65 | int mini_p; | 82 | int mini_p; |
| @@ -175,9 +192,9 @@ make_screen_without_minibuffer (mini_window) | |||
| 175 | /* Choose the minibuffer window to use. */ | 192 | /* Choose the minibuffer window to use. */ |
| 176 | if (NULL (mini_window)) | 193 | if (NULL (mini_window)) |
| 177 | { | 194 | { |
| 178 | if (XTYPE (Vglobal_minibuffer_screen) != Lisp_Screen) | 195 | if (XTYPE (Vdefault_minibuffer_screen) != Lisp_Screen) |
| 179 | error ("global-minibuffer-screen must be set to create minibufferless screens."); | 196 | error ("default-minibuffer-screen must be set when creating minibufferless screens."); |
| 180 | mini_window = XSCREEN (Vglobal_minibuffer_screen)->minibuffer_window; | 197 | mini_window = XSCREEN (Vdefault_minibuffer_screen)->minibuffer_window; |
| 181 | } | 198 | } |
| 182 | else | 199 | else |
| 183 | { | 200 | { |
| @@ -214,7 +231,7 @@ make_minibuffer_screen () | |||
| 214 | s->auto_lower = 0; | 231 | s->auto_lower = 0; |
| 215 | s->no_split = 1; | 232 | s->no_split = 1; |
| 216 | s->wants_modeline = 0; | 233 | s->wants_modeline = 0; |
| 217 | /* Note we leave has_minibuffer as 0. This is a little strange. */ | 234 | s->has_minibuffer = 1; |
| 218 | 235 | ||
| 219 | /* Now label the root window as also being the minibuffer. | 236 | /* Now label the root window as also being the minibuffer. |
| 220 | Avoid infinite looping on the window chain by marking next pointer | 237 | Avoid infinite looping on the window chain by marking next pointer |
| @@ -258,14 +275,13 @@ focus on that screen.") | |||
| 258 | (screen, no_enter) | 275 | (screen, no_enter) |
| 259 | Lisp_Object screen, no_enter; | 276 | Lisp_Object screen, no_enter; |
| 260 | { | 277 | { |
| 261 | CHECK_SCREEN (screen, 0); | 278 | CHECK_LIVE_SCREEN (screen, 0); |
| 262 | 279 | ||
| 263 | if (selected_screen == XSCREEN (screen)) | 280 | if (selected_screen == XSCREEN (screen)) |
| 264 | return screen; | 281 | return screen; |
| 265 | 282 | ||
| 266 | selected_screen = XSCREEN (screen); | 283 | selected_screen = XSCREEN (screen); |
| 267 | if (!EQ (SCREEN_ROOT_WINDOW (selected_screen), | 284 | if (! SCREEN_MINIBUF_ONLY_P (selected_screen)) |
| 268 | SCREEN_MINIBUF_WINDOW (selected_screen))) | ||
| 269 | last_nonminibuf_screen = selected_screen; | 285 | last_nonminibuf_screen = selected_screen; |
| 270 | 286 | ||
| 271 | Fselect_window (XSCREEN (screen)->selected_window); | 287 | Fselect_window (XSCREEN (screen)->selected_window); |
| @@ -309,7 +325,8 @@ DEFUN ("screen-root-window", Fscreen_root_window, Sscreen_root_window, 0, 1, 0, | |||
| 309 | { | 325 | { |
| 310 | if (NULL (screen)) | 326 | if (NULL (screen)) |
| 311 | XSET (screen, Lisp_Screen, selected_screen); | 327 | XSET (screen, Lisp_Screen, selected_screen); |
| 312 | CHECK_SCREEN (screen, 0); | 328 | else |
| 329 | CHECK_LIVE_SCREEN (screen, 0); | ||
| 313 | 330 | ||
| 314 | return XSCREEN (screen)->root_window; | 331 | return XSCREEN (screen)->root_window; |
| 315 | } | 332 | } |
| @@ -322,7 +339,8 @@ DEFUN ("screen-selected-window", Fscreen_selected_window, | |||
| 322 | { | 339 | { |
| 323 | if (NULL (screen)) | 340 | if (NULL (screen)) |
| 324 | XSET (screen, Lisp_Screen, selected_screen); | 341 | XSET (screen, Lisp_Screen, selected_screen); |
| 325 | CHECK_SCREEN (screen, 0); | 342 | else |
| 343 | CHECK_LIVE_SCREEN (screen, 0); | ||
| 326 | 344 | ||
| 327 | return XSCREEN (screen)->selected_window; | 345 | return XSCREEN (screen)->selected_window; |
| 328 | } | 346 | } |
| @@ -336,34 +354,38 @@ DEFUN ("screen-list", Fscreen_list, Sscreen_list, | |||
| 336 | } | 354 | } |
| 337 | 355 | ||
| 338 | #ifdef MULTI_SCREEN | 356 | #ifdef MULTI_SCREEN |
| 357 | |||
| 358 | /* Return the next screen in the screen list after SCREEN. | ||
| 359 | If MINIBUF is non-nil, include all screens. | ||
| 360 | If MINIBUF is nil, exclude minibuffer-only screens. | ||
| 361 | If MINIBUF is a window, include only screens using that window for | ||
| 362 | their minibuffer. */ | ||
| 339 | Lisp_Object | 363 | Lisp_Object |
| 340 | next_screen (screen, mini_screen) | 364 | next_screen (screen, minibuf) |
| 341 | Lisp_Object screen; | 365 | Lisp_Object screen; |
| 342 | int mini_screen; | 366 | Lisp_Object minibuf; |
| 343 | { | 367 | { |
| 344 | Lisp_Object tail; | 368 | Lisp_Object tail; |
| 345 | int passed = 0; | 369 | int passed = 0; |
| 346 | 370 | ||
| 371 | /* There must always be at least one screen in Vscreen_list. */ | ||
| 372 | if (! CONSP (Vscreen_list)) | ||
| 373 | abort (); | ||
| 374 | |||
| 347 | while (1) | 375 | while (1) |
| 348 | for (tail = Vscreen_list; CONSP (tail); tail = XCONS (tail)->cdr) | 376 | for (tail = Vscreen_list; CONSP (tail); tail = XCONS (tail)->cdr) |
| 349 | { | 377 | { |
| 350 | if (passed) | 378 | if (passed) |
| 351 | { | 379 | { |
| 352 | SCREEN_PTR s = XSCREEN (XCONS (tail)->car); | 380 | Lisp_Object s = XCONS (tail)->car; |
| 353 | 381 | ||
| 354 | if (!mini_screen | 382 | /* Decide whether this screen is eligible to be returned, |
| 355 | 383 | according to minibuf. */ | |
| 356 | /* Is this screen only a minibuffer? */ | 384 | if ((NULL (minibuf) && ! SCREEN_MINIBUF_ONLY_P (XSCREEN (s))) |
| 357 | && EQ (SCREEN_ROOT_WINDOW (s), | 385 | || XTYPE (minibuf) != Lisp_Window |
| 358 | SCREEN_MINIBUF_WINDOW (s)) | 386 | || EQ (SCREEN_MINIBUF_WINDOW (XSCREEN (s)), minibuf) |
| 359 | 387 | || EQ (s, screen)) | |
| 360 | /* If we have wrapped all the way around the list (i.e. | 388 | return s; |
| 361 | the only screen is an all-minibuffer screen), return | ||
| 362 | it anyway. */ | ||
| 363 | && s != XSCREEN (screen)) | ||
| 364 | continue; | ||
| 365 | else | ||
| 366 | return XCONS (tail)->car; | ||
| 367 | } | 389 | } |
| 368 | 390 | ||
| 369 | if (EQ (screen, XCONS (tail)->car)) | 391 | if (EQ (screen, XCONS (tail)->car)) |
| @@ -371,34 +393,58 @@ next_screen (screen, mini_screen) | |||
| 371 | } | 393 | } |
| 372 | } | 394 | } |
| 373 | 395 | ||
| 396 | /* Return the previous screen in the screen list before SCREEN. | ||
| 397 | If MINIBUF is non-nil, include all screens. | ||
| 398 | If MINIBUF is nil, exclude minibuffer-only screens. | ||
| 399 | If MINIBUF is a window, include only screens using that window for | ||
| 400 | their minibuffer. */ | ||
| 374 | Lisp_Object | 401 | Lisp_Object |
| 375 | prev_screen (screen, mini_screen) | 402 | prev_screen (screen, minibuf) |
| 376 | Lisp_Object screen; | 403 | Lisp_Object screen; |
| 377 | int mini_screen; | 404 | Lisp_Object minibuf; |
| 378 | { | 405 | { |
| 379 | Lisp_Object tail; | 406 | Lisp_Object tail; |
| 380 | Lisp_Object prev; | 407 | Lisp_Object prev; |
| 381 | 408 | ||
| 409 | /* There must always be at least one screen in Vscreen_list. */ | ||
| 410 | if (! CONSP (Vscreen_list)) | ||
| 411 | abort (); | ||
| 412 | |||
| 382 | prev = Qnil; | 413 | prev = Qnil; |
| 383 | while (1) | 414 | while (1) |
| 384 | for (tail = Vscreen_list; CONSP (tail); tail = XCONS (tail)->cdr) | 415 | { |
| 385 | { | 416 | for (tail = Vscreen_list; CONSP (tail); tail = XCONS (tail)->cdr) |
| 386 | if (EQ (screen, XCONS (tail)->car)) | 417 | { |
| 387 | { | 418 | Lisp_Object scr = XCONS (tail)->car; |
| 388 | if (!NULL (prev) && (mini_screen | 419 | |
| 389 | || !EQ (XCONS (tail)->car, | 420 | if (XTYPE (scr) != Lisp_Screen) |
| 390 | Vglobal_minibuffer_screen))) | 421 | abort (); |
| 391 | return prev; | 422 | |
| 392 | } | 423 | if (EQ (screen, scr) && !NULL (prev)) |
| 393 | prev = XCONS (tail)->car; | 424 | return prev; |
| 394 | } | 425 | |
| 426 | /* Decide whether this screen is eligible to be returned, | ||
| 427 | according to minibuf. */ | ||
| 428 | if ((NULL (minibuf) && ! SCREEN_MINIBUF_ONLY_P (XSCREEN (scr))) | ||
| 429 | || XTYPE (minibuf) != Lisp_Window | ||
| 430 | || EQ (SCREEN_MINIBUF_WINDOW (XSCREEN (scr)), minibuf)) | ||
| 431 | prev = scr; | ||
| 432 | } | ||
| 433 | |||
| 434 | if (NULL (prev)) | ||
| 435 | /* We went through the whole screen list without finding a single | ||
| 436 | acceptable screen. Return the original screen. */ | ||
| 437 | prev = screen; | ||
| 438 | } | ||
| 439 | |||
| 395 | } | 440 | } |
| 396 | 441 | ||
| 397 | DEFUN ("next-screen", Fnext_screen, Snext_screen, | 442 | DEFUN ("next-screen", Fnext_screen, Snext_screen, 0, 2, 0, |
| 398 | 0, 2, 0, | 443 | "Return the next screen in the screen list after SCREEN.\n\ |
| 399 | "Return the next screen in the screen list after SCREEN.\n\ | 444 | If optional argument MINIBUF is non-nil, include all screens. If\n\ |
| 400 | If MINISCREEN is non-nil, include screens whose only window is a minibuffer.\n\ | 445 | MINIBUF is nil or omitted, exclude minibuffer-only screens. If\n\ |
| 401 | If MINISCREEN is nil or omitted, these screens are skipped.") | 446 | MINIBUF is a window, include only screens using that window for their\n\ |
| 447 | minibuffer.") | ||
| 402 | (screen, miniscreen) | 448 | (screen, miniscreen) |
| 403 | Lisp_Object screen, miniscreen; | 449 | Lisp_Object screen, miniscreen; |
| 404 | { | 450 | { |
| @@ -406,16 +452,17 @@ Lisp_Object screen, miniscreen; | |||
| 406 | 452 | ||
| 407 | if (NULL (screen)) | 453 | if (NULL (screen)) |
| 408 | XSET (screen, Lisp_Screen, selected_screen); | 454 | XSET (screen, Lisp_Screen, selected_screen); |
| 409 | CHECK_SCREEN (screen, 0); | 455 | else |
| 456 | CHECK_LIVE_SCREEN (screen, 0); | ||
| 410 | 457 | ||
| 411 | return next_screen (screen, (NULL (miniscreen) ? 0 : 1)); | 458 | return next_screen (screen, miniscreen); |
| 412 | } | 459 | } |
| 413 | #endif /* MULTI_SCREEN */ | 460 | #endif /* MULTI_SCREEN */ |
| 414 | 461 | ||
| 415 | DEFUN ("delete-screen", Fdelete_screen, Sdelete_screen, | 462 | DEFUN ("delete-screen", Fdelete_screen, Sdelete_screen, 0, 1, "", |
| 416 | 0, 1, "", | 463 | "Delete SCREEN, permanently eliminating it from use.\n\ |
| 417 | "Delete SCREEN, permanently eliminating it from use.\n\ | 464 | If omitted, SCREEN defaults to the selected screen.\n\ |
| 418 | Default is current screen.") | 465 | A screen may not be deleted if its minibuffer is used by other screens.") |
| 419 | (screen) | 466 | (screen) |
| 420 | Lisp_Object screen; | 467 | Lisp_Object screen; |
| 421 | { | 468 | { |
| @@ -433,27 +480,32 @@ Default is current screen.") | |||
| 433 | s = XSCREEN (screen); | 480 | s = XSCREEN (screen); |
| 434 | } | 481 | } |
| 435 | 482 | ||
| 483 | if (! SCREEN_LIVE_P (s)) | ||
| 484 | return; | ||
| 485 | |||
| 436 | /* Are there any other screens besides this one? */ | 486 | /* Are there any other screens besides this one? */ |
| 437 | if (s == selected_screen && EQ (next_screen (screen, 1), screen)) | 487 | if (s == selected_screen && EQ (next_screen (screen, Qt), screen)) |
| 438 | error ("Attempt to delete the only screen"); | 488 | error ("Attempt to delete the only screen"); |
| 439 | 489 | ||
| 440 | /* Does this screen have a minibuffer, and is it the surrogate | 490 | /* Does this screen have a minibuffer, and is it the surrogate |
| 441 | minibuffer for any other screen? */ | 491 | minibuffer for any other screen? */ |
| 442 | if (EQ (screen, | 492 | if (SCREEN_HAS_MINIBUF (XSCREEN (screen))) |
| 443 | WINDOW_SCREEN (XWINDOW (SCREEN_MINIBUF_WINDOW (XSCREEN (screen)))))) | ||
| 444 | { | 493 | { |
| 445 | Lisp_Object screen2; | 494 | Lisp_Object screen2; |
| 446 | 495 | ||
| 447 | for (screen2 = Vscreen_list; CONSP (2); screen2 = XCONS (screen2)->cdr) | 496 | for (screen2 = Vscreen_list; CONSP (2); screen2 = XCONS (screen2)->cdr) |
| 448 | if (! EQ (screen2, screen) | 497 | if (! EQ (screen2, screen) |
| 449 | && EQ (screen, | 498 | && EQ (screen, |
| 450 | WINDOW_SCREEN (XWINDOW (SCREEN_MINIBUF_WINDOW (XSCREEN (screen2)))))) | 499 | (WINDOW_SCREEN |
| 500 | (XWINDOW | ||
| 501 | (SCREEN_MINIBUF_WINDOW | ||
| 502 | (XSCREEN (screen2))))))) | ||
| 451 | error ("Attempt to delete a surrogate minibuffer screen"); | 503 | error ("Attempt to delete a surrogate minibuffer screen"); |
| 452 | } | 504 | } |
| 453 | 505 | ||
| 454 | /* Don't let the screen remain selected. */ | 506 | /* Don't let the screen remain selected. */ |
| 455 | if (s == selected_screen) | 507 | if (s == selected_screen) |
| 456 | Fselect_screen (next_screen (screen, 1)); | 508 | Fselect_screen (next_screen (screen, Qt)); |
| 457 | 509 | ||
| 458 | /* Don't allow minibuf_window to remain on a deleted screen. */ | 510 | /* Don't allow minibuf_window to remain on a deleted screen. */ |
| 459 | if (EQ (s->minibuffer_window, minibuf_window)) | 511 | if (EQ (s->minibuffer_window, minibuf_window)) |
| @@ -481,8 +533,8 @@ Default is current screen.") | |||
| 481 | 533 | ||
| 482 | for (screen = Vscreen_list; CONSP (screen); screen = XCONS (screen)->cdr) | 534 | for (screen = Vscreen_list; CONSP (screen); screen = XCONS (screen)->cdr) |
| 483 | { | 535 | { |
| 484 | s = XSCREEN (XCONS (screen)->cdr); | 536 | s = XSCREEN (XCONS (screen)->car); |
| 485 | if (!EQ (SCREEN_ROOT_WINDOW (s), SCREEN_MINIBUF_WINDOW (s))) | 537 | if (!SCREEN_MINIBUF_ONLY_P (s)) |
| 486 | { | 538 | { |
| 487 | last_nonminibuf_screen = s; | 539 | last_nonminibuf_screen = s; |
| 488 | break; | 540 | break; |
| @@ -495,34 +547,26 @@ Default is current screen.") | |||
| 495 | 547 | ||
| 496 | /* Return mouse position in character cell units. */ | 548 | /* Return mouse position in character cell units. */ |
| 497 | 549 | ||
| 498 | static | 550 | DEFUN ("mouse-position", Fmouse_position, Smouse_position, 0, 0, 0, |
| 499 | read_mouse_position (screen, x, y) | 551 | "Return a list (SCREEN X . Y) giving the current mouse screen and position.\n\ |
| 500 | Lisp_Object screen; | 552 | If Emacs is running on a mouseless terminal or hasn't been programmed\n\ |
| 501 | int *x, *y; | 553 | to read the mouse position, it returns the selected screen for SCREEN\n\ |
| 502 | { | 554 | and nil for X and Y.") |
| 503 | CHECK_SCREEN (screen, 0); | 555 | () |
| 504 | |||
| 505 | *x = 1; | ||
| 506 | *y = 1; | ||
| 507 | |||
| 508 | #ifdef HAVE_X_WINDOWS | ||
| 509 | if (XSCREEN (screen)->output_method == output_x_window) | ||
| 510 | x_read_mouse_position (XSCREEN (screen), x, y); | ||
| 511 | #endif | ||
| 512 | } | ||
| 513 | |||
| 514 | DEFUN ("read-mouse-position", Fread_mouse_position, Sread_mouse_position, 1, 1, 0, | ||
| 515 | "Return a cons (x . y) which represents the position of the mouse.") | ||
| 516 | (screen) | ||
| 517 | Lisp_Object screen; | ||
| 518 | { | 556 | { |
| 519 | int x, y; | 557 | Lisp_Object x, y, dummy; |
| 520 | struct screen *s; | 558 | SCREEN_PTR s; |
| 521 | 559 | ||
| 522 | CHECK_SCREEN (screen, 0); | 560 | if (mouse_position_hook) |
| 561 | (*mouse_position_hook) (&s, &x, &y, &dummy); | ||
| 562 | else | ||
| 563 | { | ||
| 564 | s = selected_screen; | ||
| 565 | x = y = Qnil; | ||
| 566 | } | ||
| 523 | 567 | ||
| 524 | read_mouse_position (screen, &x, &y); | 568 | XSET (dummy, Lisp_Screen, s); |
| 525 | return Fcons (make_number (x), make_number (y)); | 569 | return Fcons (dummy, Fcons (make_number (x), make_number (y))); |
| 526 | } | 570 | } |
| 527 | 571 | ||
| 528 | DEFUN ("set-mouse-position", Fset_mouse_position, Sset_mouse_position, 3, 3, 0, | 572 | DEFUN ("set-mouse-position", Fset_mouse_position, Sset_mouse_position, 3, 3, 0, |
| @@ -531,7 +575,7 @@ WARNING: If you use this under X, you should do unfocus-screen afterwards.") | |||
| 531 | (screen, x, y) | 575 | (screen, x, y) |
| 532 | Lisp_Object screen, x, y; | 576 | Lisp_Object screen, x, y; |
| 533 | { | 577 | { |
| 534 | CHECK_SCREEN (screen, 0); | 578 | CHECK_LIVE_SCREEN (screen, 0); |
| 535 | CHECK_NUMBER (x, 2); | 579 | CHECK_NUMBER (x, 2); |
| 536 | CHECK_NUMBER (y, 1); | 580 | CHECK_NUMBER (y, 1); |
| 537 | 581 | ||
| @@ -556,16 +600,15 @@ This object can be given to `restore-screen-configuration'\n\ | |||
| 556 | to restore this screen configuration.") | 600 | to restore this screen configuration.") |
| 557 | () | 601 | () |
| 558 | { | 602 | { |
| 559 | int x, y; | 603 | Lisp_Object c, time; |
| 560 | Lisp_Object c, screen; | ||
| 561 | struct screen *s; | ||
| 562 | 604 | ||
| 563 | c = Fmake_vector (make_number(3), Qnil); | 605 | c = Fmake_vector (make_number(4), Qnil); |
| 564 | XVECTOR (c)->contents[0] = screen = Fselected_screen(); | 606 | XVECTOR (c)->contents[0] = Fselected_screen(); |
| 565 | read_mouse_position (screen, &x, &y); | 607 | if (mouse_position_hook) |
| 566 | XVECTOR (c)->contents[1] = make_number (x); | 608 | (*mouse_position_hook) (&XVECTOR (c)->contents[1] |
| 567 | XVECTOR (c)->contents[2] = make_number (y); | 609 | &XVECTOR (c)->contents[2], |
| 568 | 610 | &XVECTOR (c)->contents[3], | |
| 611 | &time); | ||
| 569 | return c; | 612 | return c; |
| 570 | } | 613 | } |
| 571 | 614 | ||
| @@ -584,14 +627,14 @@ DEFUN ("restore-screen-configuration", Frestore_screen_configuration, | |||
| 584 | error ("Wrong size vector passed to restore-screen-configuration"); | 627 | error ("Wrong size vector passed to restore-screen-configuration"); |
| 585 | } | 628 | } |
| 586 | screen = XVECTOR (config)->contents[0]; | 629 | screen = XVECTOR (config)->contents[0]; |
| 587 | CHECK_SCREEN (screen, 0); | 630 | CHECK_LIVE_SCREEN (screen, 0); |
| 588 | 631 | ||
| 589 | Fselect_screen (screen, Qnil); | 632 | Fselect_screen (screen, Qnil); |
| 590 | 633 | ||
| 591 | #if 0 | 634 | #if 0 |
| 592 | /* This seems to interfere with the screen selection mechanism. jla */ | 635 | /* This seems to interfere with the screen selection mechanism. jla */ |
| 593 | x_pos = XVECTOR (config)->contents[1]; | 636 | x_pos = XVECTOR (config)->contents[2]; |
| 594 | y_pos = XVECTOR (config)->contents[2]; | 637 | y_pos = XVECTOR (config)->contents[3]; |
| 595 | set_mouse_position (screen, XINT (x_pos), XINT (y_pos)); | 638 | set_mouse_position (screen, XINT (x_pos), XINT (y_pos)); |
| 596 | #endif | 639 | #endif |
| 597 | 640 | ||
| @@ -606,10 +649,7 @@ Also raises the screen so that nothing obscures it.") | |||
| 606 | (screen) | 649 | (screen) |
| 607 | Lisp_Object screen; | 650 | Lisp_Object screen; |
| 608 | { | 651 | { |
| 609 | CHECK_SCREEN (screen, 0); | 652 | CHECK_LIVE_SCREEN (screen, 0); |
| 610 | |||
| 611 | if (XSCREEN (screen)->display.nothing == 0) | ||
| 612 | error ("Cannot make a dead screen object visible"); | ||
| 613 | 653 | ||
| 614 | if (XSCREEN (screen)->output_method == output_x_window) | 654 | if (XSCREEN (screen)->output_method == output_x_window) |
| 615 | x_make_screen_visible (XSCREEN (screen)); | 655 | x_make_screen_visible (XSCREEN (screen)); |
| @@ -623,7 +663,7 @@ DEFUN ("make-screen-invisible", Fmake_screen_invisible, Smake_screen_invisible, | |||
| 623 | (screen) | 663 | (screen) |
| 624 | Lisp_Object screen; | 664 | Lisp_Object screen; |
| 625 | { | 665 | { |
| 626 | CHECK_SCREEN (screen, 0); | 666 | CHECK_LIVE_SCREEN (screen, 0); |
| 627 | 667 | ||
| 628 | if (XSCREEN (screen)->output_method == output_x_window) | 668 | if (XSCREEN (screen)->output_method == output_x_window) |
| 629 | x_make_screen_invisible (XSCREEN (screen)); | 669 | x_make_screen_invisible (XSCREEN (screen)); |
| @@ -637,10 +677,7 @@ DEFUN ("iconify-screen", Ficonify_screen, Siconify_screen, | |||
| 637 | (screen) | 677 | (screen) |
| 638 | Lisp_Object screen; | 678 | Lisp_Object screen; |
| 639 | { | 679 | { |
| 640 | CHECK_SCREEN (screen, 0); | 680 | CHECK_LIVE_SCREEN (screen, 0); |
| 641 | |||
| 642 | if (XSCREEN (screen)->display.nothing == 0) | ||
| 643 | error ("Cannot make a dead screen object iconified."); | ||
| 644 | 681 | ||
| 645 | if (XSCREEN (screen)->output_method == output_x_window) | 682 | if (XSCREEN (screen)->output_method == output_x_window) |
| 646 | x_iconify_screen (XSCREEN (screen)); | 683 | x_iconify_screen (XSCREEN (screen)); |
| @@ -654,10 +691,7 @@ DEFUN ("deiconify-screen", Fdeiconify_screen, Sdeiconify_screen, | |||
| 654 | (screen) | 691 | (screen) |
| 655 | Lisp_Object screen; | 692 | Lisp_Object screen; |
| 656 | { | 693 | { |
| 657 | CHECK_SCREEN (screen, 0); | 694 | CHECK_LIVE_SCREEN (screen, 0); |
| 658 | |||
| 659 | if (XSCREEN (screen)->display.nothing == 0) | ||
| 660 | error ("Cannot deiconify a dead screen object."); | ||
| 661 | 695 | ||
| 662 | if (XSCREEN (screen)->output_method == output_x_window) | 696 | if (XSCREEN (screen)->output_method == output_x_window) |
| 663 | x_make_screen_visible (XSCREEN (screen)); | 697 | x_make_screen_visible (XSCREEN (screen)); |
| @@ -674,7 +708,7 @@ Return the symbol `icon' if window is visible only as an icon.") | |||
| 674 | (screen) | 708 | (screen) |
| 675 | Lisp_Object screen; | 709 | Lisp_Object screen; |
| 676 | { | 710 | { |
| 677 | CHECK_SCREEN (screen, 0); | 711 | CHECK_LIVE_SCREEN (screen, 0); |
| 678 | 712 | ||
| 679 | if (XSCREEN (screen)->visible) | 713 | if (XSCREEN (screen)->visible) |
| 680 | return Qt; | 714 | return Qt; |
| @@ -724,11 +758,12 @@ window when a screen doesn't have its own minibuffer.") | |||
| 724 | (screen, focus_screen) | 758 | (screen, focus_screen) |
| 725 | Lisp_Object screen, focus_screen; | 759 | Lisp_Object screen, focus_screen; |
| 726 | { | 760 | { |
| 727 | CHECK_SCREEN (screen, 0); | 761 | CHECK_LIVE_SCREEN (screen, 0); |
| 762 | |||
| 728 | if (NULL (focus_screen)) | 763 | if (NULL (focus_screen)) |
| 729 | focus_screen = screen; | 764 | focus_screen = screen; |
| 730 | else | 765 | else |
| 731 | CHECK_SCREEN (focus_screen, 1); | 766 | CHECK_LIVE_SCREEN (focus_screen, 1); |
| 732 | 767 | ||
| 733 | XSCREEN (screen)->focus_screen = focus_screen; | 768 | XSCREEN (screen)->focus_screen = focus_screen; |
| 734 | 769 | ||
| @@ -745,7 +780,7 @@ See redirect-screen-focus.") | |||
| 745 | (screen) | 780 | (screen) |
| 746 | Lisp_Object screen; | 781 | Lisp_Object screen; |
| 747 | { | 782 | { |
| 748 | CHECK_SCREEN (screen, 0); | 783 | CHECK_LIVE_SCREEN (screen, 0); |
| 749 | return SCREEN_FOCUS_SCREEN (XSCREEN (screen)); | 784 | return SCREEN_FOCUS_SCREEN (XSCREEN (screen)); |
| 750 | } | 785 | } |
| 751 | 786 | ||
| @@ -820,7 +855,10 @@ The meaningful PARMs depend on the kind of screen.") | |||
| 820 | store_in_alist (&alist, "height", make_number (s->height)); | 855 | store_in_alist (&alist, "height", make_number (s->height)); |
| 821 | store_in_alist (&alist, "width", make_number (s->width)); | 856 | store_in_alist (&alist, "width", make_number (s->width)); |
| 822 | store_in_alist (&alist, "modeline", (s->wants_modeline ? Qt : Qnil)); | 857 | store_in_alist (&alist, "modeline", (s->wants_modeline ? Qt : Qnil)); |
| 823 | store_in_alist (&alist, "minibuffer", (s->has_minibuffer ? Qt : Qnil)); | 858 | store_in_alist (&alist, "minibuffer", |
| 859 | (SCREEN_HAS_MINIBUF (s) | ||
| 860 | ? (SCREEN_MINIBUF_ONLY_P (s) ? intern ("only") : Qt) | ||
| 861 | : Qnil)); | ||
| 824 | store_in_alist (&alist, "unsplittable", (s->no_split ? Qt : Qnil)); | 862 | store_in_alist (&alist, "unsplittable", (s->no_split ? Qt : Qnil)); |
| 825 | 863 | ||
| 826 | if (s->output_method == output_x_window) | 864 | if (s->output_method == output_x_window) |
| @@ -844,13 +882,10 @@ The meaningful PARMs depend on the kind of screen; undefined PARMs are ignored." | |||
| 844 | s = selected_screen; | 882 | s = selected_screen; |
| 845 | else | 883 | else |
| 846 | { | 884 | { |
| 847 | CHECK_SCREEN (screen, 0); | 885 | CHECK_LIVE_SCREEN (screen, 0); |
| 848 | s = XSCREEN (screen); | 886 | s = XSCREEN (screen); |
| 849 | } | 887 | } |
| 850 | 888 | ||
| 851 | if (s->display.nothing == 0) | ||
| 852 | error ("Cannot modify parameters of a deleted screen"); | ||
| 853 | |||
| 854 | if (s->output_method == output_x_window) | 889 | if (s->output_method == output_x_window) |
| 855 | for (tail = alist; !EQ (tail, Qnil); tail = Fcdr (tail)) | 890 | for (tail = alist; !EQ (tail, Qnil); tail = Fcdr (tail)) |
| 856 | { | 891 | { |
| @@ -868,14 +903,14 @@ The meaningful PARMs depend on the kind of screen; undefined PARMs are ignored." | |||
| 868 | 903 | ||
| 869 | DEFUN ("screen-pixel-size", Fscreen_pixel_size, | 904 | DEFUN ("screen-pixel-size", Fscreen_pixel_size, |
| 870 | Sscreen_pixel_size, 1, 1, 0, | 905 | Sscreen_pixel_size, 1, 1, 0, |
| 871 | "Return a cons (width . height) of screen SCREEN's dimensions.") | 906 | "Return a cons (width . height) of SCREEN's size in pixels.") |
| 872 | (screen) | 907 | (screen) |
| 873 | Lisp_Object screen; | 908 | Lisp_Object screen; |
| 874 | { | 909 | { |
| 875 | register struct screen *s; | 910 | register struct screen *s; |
| 876 | int width, height; | 911 | int width, height; |
| 877 | 912 | ||
| 878 | CHECK_SCREEN (screen, 0); | 913 | CHECK_LIVE_SCREEN (screen, 0); |
| 879 | s = XSCREEN (screen); | 914 | s = XSCREEN (screen); |
| 880 | 915 | ||
| 881 | return Fcons (make_number (x_pixel_width (s)), | 916 | return Fcons (make_number (x_pixel_width (s)), |
| @@ -910,7 +945,7 @@ but that the idea of the actual height of the screen should not be changed.") | |||
| 910 | s = selected_screen; | 945 | s = selected_screen; |
| 911 | else | 946 | else |
| 912 | { | 947 | { |
| 913 | CHECK_SCREEN (screen, 0); | 948 | CHECK_LIVE_SCREEN (screen, 0); |
| 914 | s = XSCREEN (screen); | 949 | s = XSCREEN (screen); |
| 915 | } | 950 | } |
| 916 | 951 | ||
| @@ -937,7 +972,7 @@ but that the idea of the actual width of the screen should not be changed.") | |||
| 937 | s = selected_screen; | 972 | s = selected_screen; |
| 938 | else | 973 | else |
| 939 | { | 974 | { |
| 940 | CHECK_SCREEN (screen, 0); | 975 | CHECK_LIVE_SCREEN (screen, 0); |
| 941 | s = XSCREEN (screen); | 976 | s = XSCREEN (screen); |
| 942 | } | 977 | } |
| 943 | 978 | ||
| @@ -951,8 +986,7 @@ but that the idea of the actual width of the screen should not be changed.") | |||
| 951 | return Qnil; | 986 | return Qnil; |
| 952 | } | 987 | } |
| 953 | 988 | ||
| 954 | DEFUN ("set-screen-size", Fset_screen_size, | 989 | DEFUN ("set-screen-size", Fset_screen_size, Sset_screen_size, 3, 3, 0, |
| 955 | Sset_screen_size, 3, 3, 0, | ||
| 956 | "Sets size of SCREEN to COLS by ROWS, measured in characters.") | 990 | "Sets size of SCREEN to COLS by ROWS, measured in characters.") |
| 957 | (screen, cols, rows) | 991 | (screen, cols, rows) |
| 958 | Lisp_Object screen, cols, rows; | 992 | Lisp_Object screen, cols, rows; |
| @@ -960,7 +994,7 @@ DEFUN ("set-screen-size", Fset_screen_size, | |||
| 960 | register struct screen *s; | 994 | register struct screen *s; |
| 961 | int mask; | 995 | int mask; |
| 962 | 996 | ||
| 963 | CHECK_SCREEN (screen, 0); | 997 | CHECK_LIVE_SCREEN (screen, 0); |
| 964 | CHECK_NUMBER (cols, 2); | 998 | CHECK_NUMBER (cols, 2); |
| 965 | CHECK_NUMBER (rows, 1); | 999 | CHECK_NUMBER (rows, 1); |
| 966 | s = XSCREEN (screen); | 1000 | s = XSCREEN (screen); |
| @@ -978,14 +1012,17 @@ DEFUN ("set-screen-size", Fset_screen_size, | |||
| 978 | 1012 | ||
| 979 | DEFUN ("set-screen-position", Fset_screen_position, | 1013 | DEFUN ("set-screen-position", Fset_screen_position, |
| 980 | Sset_screen_position, 3, 3, 0, | 1014 | Sset_screen_position, 3, 3, 0, |
| 981 | "Sets size of SCREEN in pixels to XOFFSET by YOFFSET.") | 1015 | "Sets position of SCREEN in pixels to XOFFSET by YOFFSET.\n\ |
| 1016 | If XOFFSET or YOFFSET are negative, they are interpreted relative to\n\ | ||
| 1017 | the leftmost or bottommost position SCREEN could occupy without going\n\ | ||
| 1018 | off the screen.") | ||
| 982 | (screen, xoffset, yoffset) | 1019 | (screen, xoffset, yoffset) |
| 983 | Lisp_Object screen, xoffset, yoffset; | 1020 | Lisp_Object screen, xoffset, yoffset; |
| 984 | { | 1021 | { |
| 985 | register struct screen *s; | 1022 | register struct screen *s; |
| 986 | int mask; | 1023 | int mask; |
| 987 | 1024 | ||
| 988 | CHECK_SCREEN (screen, 0); | 1025 | CHECK_LIVE_SCREEN (screen, 0); |
| 989 | CHECK_NUMBER (xoffset, 1); | 1026 | CHECK_NUMBER (xoffset, 1); |
| 990 | CHECK_NUMBER (yoffset, 2); | 1027 | CHECK_NUMBER (yoffset, 2); |
| 991 | s = XSCREEN (screen); | 1028 | s = XSCREEN (screen); |
| @@ -996,68 +1033,6 @@ DEFUN ("set-screen-position", Fset_screen_position, | |||
| 996 | return Qt; | 1033 | return Qt; |
| 997 | } | 1034 | } |
| 998 | 1035 | ||
| 999 | /* Test if column *x, row *y is within window *w. If they are not, | ||
| 1000 | return 0; if they are on the window's modeline, return -1; if | ||
| 1001 | they are in the window's text area (the only other alternative) | ||
| 1002 | set *x and *y to their locations relative to the upper left | ||
| 1003 | corner of the window, and return 1. */ | ||
| 1004 | int | ||
| 1005 | coordinates_in_window (w, x, y) | ||
| 1006 | register struct window *w; | ||
| 1007 | register int *x, *y; | ||
| 1008 | { | ||
| 1009 | register int left = XINT (w->left); | ||
| 1010 | register int width = XINT (w->width); | ||
| 1011 | register int window_height = XINT (w->height); | ||
| 1012 | register int top = XFASTINT (w->top); | ||
| 1013 | |||
| 1014 | if (*x < left || *x >= left + width | ||
| 1015 | || *y < top || *y > top + window_height - 1) | ||
| 1016 | return 0; | ||
| 1017 | |||
| 1018 | if (*y == top + window_height - 1 | ||
| 1019 | && window_height > 1) /* 1 line => minibuffer */ | ||
| 1020 | /* in modeline */ | ||
| 1021 | return -1; | ||
| 1022 | |||
| 1023 | *x -= left; | ||
| 1024 | *y -= top; | ||
| 1025 | return 1; | ||
| 1026 | } | ||
| 1027 | |||
| 1028 | DEFUN ("coordinates-in-window-p", Fcoordinates_in_window_p, | ||
| 1029 | Scoordinates_in_window_p, 2, 2, 0, | ||
| 1030 | "Return non-nil if COORDINATES are in WINDOW.\n\ | ||
| 1031 | COORDINATES is a cons of the form (X Y), X and Y being screen-relative.\n\ | ||
| 1032 | If COORDINATES are in the text portion of WINDOW, the coordinates relative\n\ | ||
| 1033 | to the window are returned. If they are in the modeline of WINDOW, t is\n\ | ||
| 1034 | returned.") | ||
| 1035 | (coordinates, window) | ||
| 1036 | register Lisp_Object coordinates, window; | ||
| 1037 | { | ||
| 1038 | int x, y; | ||
| 1039 | |||
| 1040 | CHECK_WINDOW (window, 0); | ||
| 1041 | CHECK_CONS (coordinates, 1); | ||
| 1042 | x = XINT (Fcar (coordinates)); | ||
| 1043 | y = XINT (Fcar (Fcdr (coordinates))); | ||
| 1044 | |||
| 1045 | switch (coordinates_in_window (XWINDOW (window), &x, &y)) | ||
| 1046 | { | ||
| 1047 | case -1: /* In modeline of window. */ | ||
| 1048 | return Qt; | ||
| 1049 | |||
| 1050 | case 0: /* NOT in window at all. */ | ||
| 1051 | return Qnil; | ||
| 1052 | |||
| 1053 | case 1: /* In text part of window. */ | ||
| 1054 | return Fcons (x, Fcons (y, Qnil)); | ||
| 1055 | |||
| 1056 | default: | ||
| 1057 | abort (); | ||
| 1058 | } | ||
| 1059 | } | ||
| 1060 | |||
| 1061 | #ifndef HAVE_X11 | 1036 | #ifndef HAVE_X11 |
| 1062 | DEFUN ("rubber-band-rectangle", Frubber_band_rectangle, Srubber_band_rectangle, | 1037 | DEFUN ("rubber-band-rectangle", Frubber_band_rectangle, Srubber_band_rectangle, |
| 1063 | 3, 3, "", | 1038 | 3, 3, "", |
| @@ -1116,6 +1091,10 @@ choose_minibuf_screen () | |||
| 1116 | syms_of_screen () | 1091 | syms_of_screen () |
| 1117 | { | 1092 | { |
| 1118 | Qscreenp = intern ("screenp"); | 1093 | Qscreenp = intern ("screenp"); |
| 1094 | Qlive_screen_p = intern ("live_screen_p"); | ||
| 1095 | |||
| 1096 | staticpro (&Qscreenp); | ||
| 1097 | staticpro (&Qlive_screen_p); | ||
| 1119 | 1098 | ||
| 1120 | staticpro (&Vscreen_list); | 1099 | staticpro (&Vscreen_list); |
| 1121 | 1100 | ||
| @@ -1123,15 +1102,22 @@ syms_of_screen () | |||
| 1123 | "The initial screen-object, which represents Emacs's stdout."); | 1102 | "The initial screen-object, which represents Emacs's stdout."); |
| 1124 | 1103 | ||
| 1125 | DEFVAR_LISP ("emacs-iconified", &Vemacs_iconified, | 1104 | DEFVAR_LISP ("emacs-iconified", &Vemacs_iconified, |
| 1126 | "Non-nil if all of emacs is iconified and not screen updates are needed."); | 1105 | "Non-nil if all of emacs is iconified and screen updates are not needed."); |
| 1127 | Vemacs_iconified = Qnil; | 1106 | Vemacs_iconified = Qnil; |
| 1128 | 1107 | ||
| 1129 | DEFVAR_LISP ("global-minibuffer-screen", &Vglobal_minibuffer_screen, | 1108 | DEFVAR_LISP ("default-minibuffer-screen", &Vdefault_minibuffer_screen, |
| 1130 | "A screen whose minibuffer is used by minibufferless screens.\n\ | 1109 | "Minibufferless screens use this screen's minibuffer.\n\ |
| 1131 | When you create a minibufferless screen, by default it will use the\n\ | 1110 | \n\ |
| 1132 | minibuffer of this screen. It is up to you to create a suitable screen\n\ | 1111 | Emacs cannot create minibufferless screens unless this is set to an\n\ |
| 1133 | and store it in this variable."); | 1112 | appropriate surrogate.\n\ |
| 1134 | Vglobal_minibuffer_screen = Qnil; | 1113 | \n\ |
| 1114 | Emacs consults this variable only when creating minibufferless\n\ | ||
| 1115 | screens; once the screen is created, it sticks with its assigned\n\ | ||
| 1116 | minibuffer, no matter what this variable is set to. This means that\n\ | ||
| 1117 | this variable doesn't necessarily say anything meaningful about the\n\ | ||
| 1118 | current set of screens, or where the minibuffer is currently being\n\ | ||
| 1119 | displayed."); | ||
| 1120 | Vdefault_minibuffer_screen = Qnil; | ||
| 1135 | 1121 | ||
| 1136 | DEFVAR_LISP ("default-screen-alist", &Vdefault_screen_alist, | 1122 | DEFVAR_LISP ("default-screen-alist", &Vdefault_screen_alist, |
| 1137 | "Alist of default values for screen creation.\n\ | 1123 | "Alist of default values for screen creation.\n\ |
| @@ -1145,6 +1131,7 @@ minibuffer-screen-alist."); | |||
| 1145 | Vdefault_screen_alist = Qnil; | 1131 | Vdefault_screen_alist = Qnil; |
| 1146 | 1132 | ||
| 1147 | defsubr (&Sscreenp); | 1133 | defsubr (&Sscreenp); |
| 1134 | defsubr (&Slive_screen_p); | ||
| 1148 | defsubr (&Sselect_screen); | 1135 | defsubr (&Sselect_screen); |
| 1149 | defsubr (&Sselected_screen); | 1136 | defsubr (&Sselected_screen); |
| 1150 | defsubr (&Swindow_screen); | 1137 | defsubr (&Swindow_screen); |
| @@ -1153,7 +1140,7 @@ minibuffer-screen-alist."); | |||
| 1153 | defsubr (&Sscreen_list); | 1140 | defsubr (&Sscreen_list); |
| 1154 | defsubr (&Snext_screen); | 1141 | defsubr (&Snext_screen); |
| 1155 | defsubr (&Sdelete_screen); | 1142 | defsubr (&Sdelete_screen); |
| 1156 | defsubr (&Sread_mouse_position); | 1143 | defsubr (&Smouse_position); |
| 1157 | defsubr (&Sset_mouse_position); | 1144 | defsubr (&Sset_mouse_position); |
| 1158 | #if 0 | 1145 | #if 0 |
| 1159 | defsubr (&Sscreen_configuration); | 1146 | defsubr (&Sscreen_configuration); |
| @@ -1176,7 +1163,6 @@ minibuffer-screen-alist."); | |||
| 1176 | defsubr (&Sset_screen_width); | 1163 | defsubr (&Sset_screen_width); |
| 1177 | defsubr (&Sset_screen_size); | 1164 | defsubr (&Sset_screen_size); |
| 1178 | defsubr (&Sset_screen_position); | 1165 | defsubr (&Sset_screen_position); |
| 1179 | defsubr (&Scoordinates_in_window_p); | ||
| 1180 | #ifndef HAVE_X11 | 1166 | #ifndef HAVE_X11 |
| 1181 | defsubr (&Srubber_band_rectangle); | 1167 | defsubr (&Srubber_band_rectangle); |
| 1182 | #endif /* HAVE_X11 */ | 1168 | #endif /* HAVE_X11 */ |