Mercurial > emacs
comparison src/buffer.c @ 20538:b964f3facafa
(Fmake_indirect_buffer): Use set_marker_both.
(set_buffer_internal_1): Likewise.
(set_buffer_temp): Likewise.
(set_buffer_temp): Update BUF_PT_BYTE, BUF_BEGV_BYTE and BUF_ZV_BYTE.
(Fmake_indirect_buffer, set_buffer_internal_1):
Set up the pt, begv and zv markers with both kinds of position.
Set BUF_PT_BYTE, BUF_BEGV_BYTE, BUF_ZV_BYTE.
(Fget_buffer_create): Set BUF_..._BYTE.
| author | Richard M. Stallman <rms@gnu.org> |
|---|---|
| date | Thu, 01 Jan 1998 02:37:16 +0000 |
| parents | 9f5fab56f4b3 |
| children | 90d6a75210d6 |
comparison
equal
deleted
inserted
replaced
| 20537:cc87b03bad13 | 20538:b964f3facafa |
|---|---|
| 341 BUF_PT (b) = 1; | 341 BUF_PT (b) = 1; |
| 342 BUF_GPT (b) = 1; | 342 BUF_GPT (b) = 1; |
| 343 BUF_BEGV (b) = 1; | 343 BUF_BEGV (b) = 1; |
| 344 BUF_ZV (b) = 1; | 344 BUF_ZV (b) = 1; |
| 345 BUF_Z (b) = 1; | 345 BUF_Z (b) = 1; |
| 346 BUF_PT_BYTE (b) = 1; | |
| 347 BUF_GPT_BYTE (b) = 1; | |
| 348 BUF_BEGV_BYTE (b) = 1; | |
| 349 BUF_ZV_BYTE (b) = 1; | |
| 350 BUF_Z_BYTE (b) = 1; | |
| 346 BUF_MODIFF (b) = 1; | 351 BUF_MODIFF (b) = 1; |
| 347 BUF_OVERLAY_MODIFF (b) = 1; | 352 BUF_OVERLAY_MODIFF (b) = 1; |
| 348 BUF_SAVE_MODIFF (b) = 1; | 353 BUF_SAVE_MODIFF (b) = 1; |
| 349 BUF_INTERVALS (b) = 0; | 354 BUF_INTERVALS (b) = 0; |
| 350 *(BUF_GPT_ADDR (b)) = *(BUF_Z_ADDR (b)) = 0; /* Put an anchor '\0'. */ | 355 *(BUF_GPT_ADDR (b)) = *(BUF_Z_ADDR (b)) = 0; /* Put an anchor '\0'. */ |
| 421 b->text = b->base_buffer->text; | 426 b->text = b->base_buffer->text; |
| 422 | 427 |
| 423 BUF_BEGV (b) = BUF_BEGV (b->base_buffer); | 428 BUF_BEGV (b) = BUF_BEGV (b->base_buffer); |
| 424 BUF_ZV (b) = BUF_ZV (b->base_buffer); | 429 BUF_ZV (b) = BUF_ZV (b->base_buffer); |
| 425 BUF_PT (b) = BUF_PT (b->base_buffer); | 430 BUF_PT (b) = BUF_PT (b->base_buffer); |
| 431 BUF_BEGV_BYTE (b) = BUF_BEGV_BYTE (b->base_buffer); | |
| 432 BUF_ZV_BYTE (b) = BUF_ZV_BYTE (b->base_buffer); | |
| 433 BUF_PT_BYTE (b) = BUF_PT_BYTE (b->base_buffer); | |
| 426 | 434 |
| 427 b->newline_cache = 0; | 435 b->newline_cache = 0; |
| 428 b->width_run_cache = 0; | 436 b->width_run_cache = 0; |
| 429 b->width_table = Qnil; | 437 b->width_table = Qnil; |
| 430 | 438 |
| 448 | 456 |
| 449 /* Make sure the base buffer has markers for its narrowing. */ | 457 /* Make sure the base buffer has markers for its narrowing. */ |
| 450 if (NILP (b->base_buffer->pt_marker)) | 458 if (NILP (b->base_buffer->pt_marker)) |
| 451 { | 459 { |
| 452 b->base_buffer->pt_marker = Fmake_marker (); | 460 b->base_buffer->pt_marker = Fmake_marker (); |
| 453 Fset_marker (b->base_buffer->pt_marker, | 461 set_marker_both (b->base_buffer->pt_marker, base_buffer, |
| 454 make_number (BUF_PT (b->base_buffer)), base_buffer); | 462 BUF_PT (b->base_buffer), |
| 463 BUF_PT_BYTE (b->base_buffer)); | |
| 455 } | 464 } |
| 456 if (NILP (b->base_buffer->begv_marker)) | 465 if (NILP (b->base_buffer->begv_marker)) |
| 457 { | 466 { |
| 458 b->base_buffer->begv_marker = Fmake_marker (); | 467 b->base_buffer->begv_marker = Fmake_marker (); |
| 459 Fset_marker (b->base_buffer->begv_marker, | 468 set_marker_both (b->base_buffer->begv_marker, base_buffer, |
| 460 make_number (BUF_BEGV (b->base_buffer)), base_buffer); | 469 BUF_BEGV (b->base_buffer), |
| 470 BUF_BEGV_BYTE (b->base_buffer)); | |
| 461 } | 471 } |
| 462 if (NILP (b->base_buffer->zv_marker)) | 472 if (NILP (b->base_buffer->zv_marker)) |
| 463 { | 473 { |
| 464 b->base_buffer->zv_marker = Fmake_marker (); | 474 b->base_buffer->zv_marker = Fmake_marker (); |
| 465 Fset_marker (b->base_buffer->zv_marker, | 475 set_marker_both (b->base_buffer->zv_marker, base_buffer, |
| 466 make_number (BUF_ZV (b->base_buffer)), base_buffer); | 476 BUF_ZV (b->base_buffer), |
| 477 BUF_ZV_BYTE (b->base_buffer)); | |
| 467 XMARKER (b->base_buffer->zv_marker)->insertion_type = 1; | 478 XMARKER (b->base_buffer->zv_marker)->insertion_type = 1; |
| 468 } | 479 } |
| 469 | 480 |
| 470 /* Give the indirect buffer markers for its narrowing. */ | 481 /* Give the indirect buffer markers for its narrowing. */ |
| 471 b->pt_marker = Fmake_marker (); | 482 b->pt_marker = Fmake_marker (); |
| 472 Fset_marker (b->pt_marker, make_number (BUF_PT (b)), buf); | 483 set_marker_both (b->pt_marker, buf, BUF_PT (b), BUF_PT_BYTE (b)); |
| 473 b->begv_marker = Fmake_marker (); | 484 b->begv_marker = Fmake_marker (); |
| 474 Fset_marker (b->begv_marker, make_number (BUF_BEGV (b)), buf); | 485 set_marker_both (b->begv_marker, buf, BUF_BEGV (b), BUF_BEGV_BYTE (b)); |
| 475 b->zv_marker = Fmake_marker (); | 486 b->zv_marker = Fmake_marker (); |
| 476 Fset_marker (b->zv_marker, make_number (BUF_ZV (b)), buf); | 487 set_marker_both (b->zv_marker, buf, BUF_ZV (b), BUF_ZV_BYTE (b)); |
| 477 | |
| 478 XMARKER (b->zv_marker)->insertion_type = 1; | 488 XMARKER (b->zv_marker)->insertion_type = 1; |
| 479 | 489 |
| 480 return buf; | 490 return buf; |
| 481 } | 491 } |
| 482 | 492 |
| 1406 when it is not current, update them now. */ | 1416 when it is not current, update them now. */ |
| 1407 if (! NILP (old_buf->pt_marker)) | 1417 if (! NILP (old_buf->pt_marker)) |
| 1408 { | 1418 { |
| 1409 Lisp_Object obuf; | 1419 Lisp_Object obuf; |
| 1410 XSETBUFFER (obuf, old_buf); | 1420 XSETBUFFER (obuf, old_buf); |
| 1411 Fset_marker (old_buf->pt_marker, make_number (BUF_PT (old_buf)), | 1421 set_marker_both (old_buf->pt_marker, obuf, |
| 1412 obuf); | 1422 BUF_PT (old_buf), BUF_PT_BYTE (old_buf)); |
| 1413 } | 1423 } |
| 1414 if (! NILP (old_buf->begv_marker)) | 1424 if (! NILP (old_buf->begv_marker)) |
| 1415 { | 1425 { |
| 1416 Lisp_Object obuf; | 1426 Lisp_Object obuf; |
| 1417 XSETBUFFER (obuf, old_buf); | 1427 XSETBUFFER (obuf, old_buf); |
| 1418 Fset_marker (old_buf->begv_marker, make_number (BUF_BEGV (old_buf)), | 1428 set_marker_both (old_buf->begv_marker, obuf, |
| 1419 obuf); | 1429 BUF_BEGV (old_buf), BUF_BEGV_BYTE (old_buf)); |
| 1420 } | 1430 } |
| 1421 if (! NILP (old_buf->zv_marker)) | 1431 if (! NILP (old_buf->zv_marker)) |
| 1422 { | 1432 { |
| 1423 Lisp_Object obuf; | 1433 Lisp_Object obuf; |
| 1424 XSETBUFFER (obuf, old_buf); | 1434 XSETBUFFER (obuf, old_buf); |
| 1425 Fset_marker (old_buf->zv_marker, make_number (BUF_ZV (old_buf)), | 1435 set_marker_both (old_buf->zv_marker, obuf, |
| 1426 obuf); | 1436 BUF_ZV (old_buf), BUF_ZV_BYTE (old_buf)); |
| 1427 } | 1437 } |
| 1428 } | 1438 } |
| 1429 | 1439 |
| 1430 /* Get the undo list from the base buffer, so that it appears | 1440 /* Get the undo list from the base buffer, so that it appears |
| 1431 that an indirect buffer shares the undo list of its base. */ | 1441 that an indirect buffer shares the undo list of its base. */ |
| 1433 b->undo_list = b->base_buffer->undo_list; | 1443 b->undo_list = b->base_buffer->undo_list; |
| 1434 | 1444 |
| 1435 /* If the new current buffer has markers to record PT, BEGV and ZV | 1445 /* If the new current buffer has markers to record PT, BEGV and ZV |
| 1436 when it is not current, fetch them now. */ | 1446 when it is not current, fetch them now. */ |
| 1437 if (! NILP (b->pt_marker)) | 1447 if (! NILP (b->pt_marker)) |
| 1438 BUF_PT (b) = marker_position (b->pt_marker); | 1448 { |
| 1449 BUF_PT (b) = marker_position (b->pt_marker); | |
| 1450 BUF_PT_BYTE (b) = marker_byte_position (b->pt_marker); | |
| 1451 } | |
| 1439 if (! NILP (b->begv_marker)) | 1452 if (! NILP (b->begv_marker)) |
| 1440 BUF_BEGV (b) = marker_position (b->begv_marker); | 1453 { |
| 1454 BUF_BEGV (b) = marker_position (b->begv_marker); | |
| 1455 BUF_BEGV_BYTE (b) = marker_byte_position (b->begv_marker); | |
| 1456 } | |
| 1441 if (! NILP (b->zv_marker)) | 1457 if (! NILP (b->zv_marker)) |
| 1442 BUF_ZV (b) = marker_position (b->zv_marker); | 1458 { |
| 1459 BUF_ZV (b) = marker_position (b->zv_marker); | |
| 1460 BUF_ZV_BYTE (b) = marker_byte_position (b->zv_marker); | |
| 1461 } | |
| 1443 | 1462 |
| 1444 /* Look down buffer's list of local Lisp variables | 1463 /* Look down buffer's list of local Lisp variables |
| 1445 to find and update any that forward into C variables. */ | 1464 to find and update any that forward into C variables. */ |
| 1446 | 1465 |
| 1447 for (tail = b->local_var_alist; !NILP (tail); tail = XCONS (tail)->cdr) | 1466 for (tail = b->local_var_alist; !NILP (tail); tail = XCONS (tail)->cdr) |
| 1493 when it is not current, update them now. */ | 1512 when it is not current, update them now. */ |
| 1494 if (! NILP (old_buf->pt_marker)) | 1513 if (! NILP (old_buf->pt_marker)) |
| 1495 { | 1514 { |
| 1496 Lisp_Object obuf; | 1515 Lisp_Object obuf; |
| 1497 XSETBUFFER (obuf, old_buf); | 1516 XSETBUFFER (obuf, old_buf); |
| 1498 Fset_marker (old_buf->pt_marker, make_number (BUF_PT (old_buf)), | 1517 set_marker_both (old_buf->pt_marker, obuf, |
| 1499 obuf); | 1518 BUF_PT (old_buf), BUF_PT_BYTE (old_buf)); |
| 1500 } | 1519 } |
| 1501 if (! NILP (old_buf->begv_marker)) | 1520 if (! NILP (old_buf->begv_marker)) |
| 1502 { | 1521 { |
| 1503 Lisp_Object obuf; | 1522 Lisp_Object obuf; |
| 1504 XSETBUFFER (obuf, old_buf); | 1523 XSETBUFFER (obuf, old_buf); |
| 1505 Fset_marker (old_buf->begv_marker, make_number (BUF_BEGV (old_buf)), | 1524 set_marker_both (old_buf->begv_marker, obuf, |
| 1506 obuf); | 1525 BUF_BEGV (old_buf), BUF_BEGV_BYTE (old_buf)); |
| 1507 } | 1526 } |
| 1508 if (! NILP (old_buf->zv_marker)) | 1527 if (! NILP (old_buf->zv_marker)) |
| 1509 { | 1528 { |
| 1510 Lisp_Object obuf; | 1529 Lisp_Object obuf; |
| 1511 XSETBUFFER (obuf, old_buf); | 1530 XSETBUFFER (obuf, old_buf); |
| 1512 Fset_marker (old_buf->zv_marker, make_number (BUF_ZV (old_buf)), | 1531 set_marker_both (old_buf->zv_marker, obuf, |
| 1513 obuf); | 1532 BUF_ZV (old_buf), BUF_ZV_BYTE (old_buf)); |
| 1514 } | 1533 } |
| 1515 } | 1534 } |
| 1516 | 1535 |
| 1517 /* If the new current buffer has markers to record PT, BEGV and ZV | 1536 /* If the new current buffer has markers to record PT, BEGV and ZV |
| 1518 when it is not current, fetch them now. */ | 1537 when it is not current, fetch them now. */ |
| 1519 if (! NILP (b->pt_marker)) | 1538 if (! NILP (b->pt_marker)) |
| 1520 BUF_PT (b) = marker_position (b->pt_marker); | 1539 { |
| 1540 BUF_PT (b) = marker_position (b->pt_marker); | |
| 1541 BUF_PT_BYTE (b) = marker_byte_position (b->pt_marker); | |
| 1542 } | |
| 1521 if (! NILP (b->begv_marker)) | 1543 if (! NILP (b->begv_marker)) |
| 1522 BUF_BEGV (b) = marker_position (b->begv_marker); | 1544 { |
| 1545 BUF_BEGV (b) = marker_position (b->begv_marker); | |
| 1546 BUF_BEGV_BYTE (b) = marker_byte_position (b->begv_marker); | |
| 1547 } | |
| 1523 if (! NILP (b->zv_marker)) | 1548 if (! NILP (b->zv_marker)) |
| 1524 BUF_ZV (b) = marker_position (b->zv_marker); | 1549 { |
| 1550 BUF_ZV (b) = marker_position (b->zv_marker); | |
| 1551 BUF_ZV_BYTE (b) = marker_byte_position (b->zv_marker); | |
| 1552 } | |
| 1525 } | 1553 } |
| 1526 | 1554 |
| 1527 DEFUN ("set-buffer", Fset_buffer, Sset_buffer, 1, 1, 0, | 1555 DEFUN ("set-buffer", Fset_buffer, Sset_buffer, 1, 1, 0, |
| 1528 "Make the buffer BUFFER current for editing operations.\n\ | 1556 "Make the buffer BUFFER current for editing operations.\n\ |
| 1529 BUFFER may be a buffer or the name of an existing buffer.\n\ | 1557 BUFFER may be a buffer or the name of an existing buffer.\n\ |
