comparison src/buffer.c @ 25181:847441efad8d

(switch_to_buffer_1): New subroutine, taken out from Fswitch_to_buffer. (no_switch_buffer): New function. (Fswitch_to_buffer): Call them. Don't get confused by "same-window" buffers in a dedicated frame.
author Richard M. Stallman <rms@gnu.org>
date Thu, 05 Aug 1999 19:38:34 +0000
parents 7a31786a0335
children 290fceb2b1c0
comparison
equal deleted inserted replaced
25180:1a84afcdb8f9 25181:847441efad8d
1318 call0 (function); 1318 call0 (function);
1319 1319
1320 return unbind_to (count, Qnil); 1320 return unbind_to (count, Qnil);
1321 } 1321 }
1322 1322
1323 /* If switching buffers in WINDOW would be an error, return
1324 a C string saying what the error would be. */
1325
1326 char *
1327 no_switch_window (window)
1328 Lisp_Object window;
1329 {
1330 Lisp_Object tem;
1331 if (EQ (minibuf_window, window))
1332 return "Cannot switch buffers in minibuffer window";
1333 tem = Fwindow_dedicated_p (window);
1334 if (!NILP (tem))
1335 return "Cannot switch buffers in a dedicated window";
1336 return NULL;
1337 }
1338
1339 /* Switch to buffer BUFFER in the selected window.
1340 If NORECORD is non-nil, don't call record_buffer. */
1341
1342 Lisp_Object
1343 switch_to_buffer_1 (buffer, norecord)
1344 Lisp_Object buffer, norecord;
1345 {
1346 register Lisp_Object buf;
1347
1348 if (NILP (buffer))
1349 buf = Fother_buffer (Fcurrent_buffer (), Qnil, Qnil);
1350 else
1351 {
1352 buf = Fget_buffer (buffer);
1353 if (NILP (buf))
1354 {
1355 buf = Fget_buffer_create (buffer);
1356 Fset_buffer_major_mode (buf);
1357 }
1358 }
1359 Fset_buffer (buf);
1360 if (NILP (norecord))
1361 record_buffer (buf);
1362
1363 Fset_window_buffer (EQ (selected_window, minibuf_window)
1364 ? Fnext_window (minibuf_window, Qnil, Qnil)
1365 : selected_window,
1366 buf);
1367
1368 return buf;
1369 }
1370
1323 DEFUN ("switch-to-buffer", Fswitch_to_buffer, Sswitch_to_buffer, 1, 2, "BSwitch to buffer: ", 1371 DEFUN ("switch-to-buffer", Fswitch_to_buffer, Sswitch_to_buffer, 1, 2, "BSwitch to buffer: ",
1324 "Select buffer BUFFER in the current window.\n\ 1372 "Select buffer BUFFER in the current window.\n\
1325 BUFFER may be a buffer or a buffer name.\n\ 1373 BUFFER may be a buffer or a buffer name.\n\
1326 Optional second arg NORECORD non-nil means\n\ 1374 Optional second arg NORECORD non-nil means\n\
1327 do not put this buffer at the front of the list of recently selected ones.\n\ 1375 do not put this buffer at the front of the list of recently selected ones.\n\
1330 within a Lisp program! Use `set-buffer' instead. That avoids messing with\n\ 1378 within a Lisp program! Use `set-buffer' instead. That avoids messing with\n\
1331 the window-buffer correspondences.") 1379 the window-buffer correspondences.")
1332 (buffer, norecord) 1380 (buffer, norecord)
1333 Lisp_Object buffer, norecord; 1381 Lisp_Object buffer, norecord;
1334 { 1382 {
1335 register Lisp_Object buf; 1383 char *err;
1336 Lisp_Object tem; 1384
1337 1385 err = no_switch_window (selected_window);
1338 if (EQ (minibuf_window, selected_window)) 1386 if (err) error (err);
1339 error ("Cannot switch buffers in minibuffer window"); 1387
1340 tem = Fwindow_dedicated_p (selected_window); 1388 return switch_to_buffer_1 (buffer, norecord);
1341 if (!NILP (tem))
1342 error ("Cannot switch buffers in a dedicated window");
1343
1344 if (NILP (buffer))
1345 buf = Fother_buffer (Fcurrent_buffer (), Qnil, Qnil);
1346 else
1347 {
1348 buf = Fget_buffer (buffer);
1349 if (NILP (buf))
1350 {
1351 buf = Fget_buffer_create (buffer);
1352 Fset_buffer_major_mode (buf);
1353 }
1354 }
1355 Fset_buffer (buf);
1356 if (NILP (norecord))
1357 record_buffer (buf);
1358
1359 Fset_window_buffer (EQ (selected_window, minibuf_window)
1360 ? Fnext_window (minibuf_window, Qnil, Qnil)
1361 : selected_window,
1362 buf);
1363
1364 return buf;
1365 } 1389 }
1366 1390
1367 DEFUN ("pop-to-buffer", Fpop_to_buffer, Spop_to_buffer, 1, 3, 0, 1391 DEFUN ("pop-to-buffer", Fpop_to_buffer, Spop_to_buffer, 1, 3, 0,
1368 "Select buffer BUFFER in some window, preferably a different one.\n\ 1392 "Select buffer BUFFER in some window, preferably a different one.\n\
1369 If BUFFER is nil, then some other buffer is chosen.\n\ 1393 If BUFFER is nil, then some other buffer is chosen.\n\