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