Mercurial > emacs
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\ |