diff options
| author | Stefan Monnier | 2011-03-21 12:42:16 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2011-03-21 12:42:16 -0400 |
| commit | cafdcef32d55cbb44389d7e322e7f973cbb72dfd (patch) | |
| tree | 7ee0c41ea8a589650ce6f4311fb10e61a63807b9 /src/buffer.c | |
| parent | a08a25d7aaf251aa18f2ef747be53734bc55cae9 (diff) | |
| parent | 4e05e67e4cd0bc1b0a4ef3176a4d0d91c6b3738e (diff) | |
| download | emacs-cafdcef32d55cbb44389d7e322e7f973cbb72dfd.tar.gz emacs-cafdcef32d55cbb44389d7e322e7f973cbb72dfd.zip | |
Merge from trunk
Diffstat (limited to 'src/buffer.c')
| -rw-r--r-- | src/buffer.c | 283 |
1 files changed, 129 insertions, 154 deletions
diff --git a/src/buffer.c b/src/buffer.c index 1b413ccb8b0..d301e7f14f9 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -330,15 +330,17 @@ even if it is dead. The return value is never nil. */) | |||
| 330 | if (! BUF_BEG_ADDR (b)) | 330 | if (! BUF_BEG_ADDR (b)) |
| 331 | buffer_memory_full (); | 331 | buffer_memory_full (); |
| 332 | 332 | ||
| 333 | BUF_PT (b) = BEG; | 333 | b->pt = BEG; |
| 334 | b->begv = BEG; | ||
| 335 | b->zv = BEG; | ||
| 336 | b->pt_byte = BEG_BYTE; | ||
| 337 | b->begv_byte = BEG_BYTE; | ||
| 338 | b->zv_byte = BEG_BYTE; | ||
| 339 | |||
| 334 | BUF_GPT (b) = BEG; | 340 | BUF_GPT (b) = BEG; |
| 335 | BUF_BEGV (b) = BEG; | ||
| 336 | BUF_ZV (b) = BEG; | ||
| 337 | BUF_Z (b) = BEG; | ||
| 338 | BUF_PT_BYTE (b) = BEG_BYTE; | ||
| 339 | BUF_GPT_BYTE (b) = BEG_BYTE; | 341 | BUF_GPT_BYTE (b) = BEG_BYTE; |
| 340 | BUF_BEGV_BYTE (b) = BEG_BYTE; | 342 | |
| 341 | BUF_ZV_BYTE (b) = BEG_BYTE; | 343 | BUF_Z (b) = BEG; |
| 342 | BUF_Z_BYTE (b) = BEG_BYTE; | 344 | BUF_Z_BYTE (b) = BEG_BYTE; |
| 343 | BUF_MODIFF (b) = 1; | 345 | BUF_MODIFF (b) = 1; |
| 344 | BUF_CHARS_MODIFF (b) = 1; | 346 | BUF_CHARS_MODIFF (b) = 1; |
| @@ -489,6 +491,53 @@ clone_per_buffer_values (struct buffer *from, struct buffer *to) | |||
| 489 | BVAR (to, local_var_alist) = buffer_lisp_local_variables (from); | 491 | BVAR (to, local_var_alist) = buffer_lisp_local_variables (from); |
| 490 | } | 492 | } |
| 491 | 493 | ||
| 494 | |||
| 495 | /* If buffer B has markers to record PT, BEGV and ZV when it is not | ||
| 496 | current, update these markers. */ | ||
| 497 | |||
| 498 | static void | ||
| 499 | record_buffer_markers (struct buffer *b) | ||
| 500 | { | ||
| 501 | if (! NILP (BVAR (b, pt_marker))) | ||
| 502 | { | ||
| 503 | Lisp_Object buffer; | ||
| 504 | |||
| 505 | eassert (!NILP (BVAR (b, begv_marker))); | ||
| 506 | eassert (!NILP (BVAR (b, zv_marker))); | ||
| 507 | |||
| 508 | XSETBUFFER (buffer, b); | ||
| 509 | set_marker_both (BVAR (b, pt_marker), buffer, b->pt, b->pt_byte); | ||
| 510 | set_marker_both (BVAR (b, begv_marker), buffer, b->begv, b->begv_byte); | ||
| 511 | set_marker_both (BVAR (b, zv_marker), buffer, b->zv, b->zv_byte); | ||
| 512 | } | ||
| 513 | } | ||
| 514 | |||
| 515 | |||
| 516 | /* If buffer B has markers to record PT, BEGV and ZV when it is not | ||
| 517 | current, fetch these values into B->begv etc. */ | ||
| 518 | |||
| 519 | static void | ||
| 520 | fetch_buffer_markers (struct buffer *b) | ||
| 521 | { | ||
| 522 | if (! NILP (BVAR (b, pt_marker))) | ||
| 523 | { | ||
| 524 | Lisp_Object m; | ||
| 525 | |||
| 526 | eassert (!NILP (BVAR (b, begv_marker))); | ||
| 527 | eassert (!NILP (BVAR (b, zv_marker))); | ||
| 528 | |||
| 529 | m = BVAR (b, pt_marker); | ||
| 530 | SET_BUF_PT_BOTH (b, marker_position (m), marker_byte_position (m)); | ||
| 531 | |||
| 532 | m = BVAR (b, begv_marker); | ||
| 533 | SET_BUF_BEGV_BOTH (b, marker_position (m), marker_byte_position (m)); | ||
| 534 | |||
| 535 | m = BVAR (b, zv_marker); | ||
| 536 | SET_BUF_ZV_BOTH (b, marker_position (m), marker_byte_position (m)); | ||
| 537 | } | ||
| 538 | } | ||
| 539 | |||
| 540 | |||
| 492 | DEFUN ("make-indirect-buffer", Fmake_indirect_buffer, Smake_indirect_buffer, | 541 | DEFUN ("make-indirect-buffer", Fmake_indirect_buffer, Smake_indirect_buffer, |
| 493 | 2, 3, | 542 | 2, 3, |
| 494 | "bMake indirect buffer (to buffer): \nBName of indirect buffer: ", | 543 | "bMake indirect buffer (to buffer): \nBName of indirect buffer: ", |
| @@ -527,12 +576,12 @@ CLONE nil means the indirect buffer's state is reset to default values. */) | |||
| 527 | /* Use the base buffer's text object. */ | 576 | /* Use the base buffer's text object. */ |
| 528 | b->text = b->base_buffer->text; | 577 | b->text = b->base_buffer->text; |
| 529 | 578 | ||
| 530 | BUF_BEGV (b) = BUF_BEGV (b->base_buffer); | 579 | b->pt = b->base_buffer->pt; |
| 531 | BUF_ZV (b) = BUF_ZV (b->base_buffer); | 580 | b->begv = b->base_buffer->begv; |
| 532 | BUF_PT (b) = BUF_PT (b->base_buffer); | 581 | b->zv = b->base_buffer->zv; |
| 533 | BUF_BEGV_BYTE (b) = BUF_BEGV_BYTE (b->base_buffer); | 582 | b->pt_byte = b->base_buffer->pt_byte; |
| 534 | BUF_ZV_BYTE (b) = BUF_ZV_BYTE (b->base_buffer); | 583 | b->begv_byte = b->base_buffer->begv_byte; |
| 535 | BUF_PT_BYTE (b) = BUF_PT_BYTE (b->base_buffer); | 584 | b->zv_byte = b->base_buffer->zv_byte; |
| 536 | 585 | ||
| 537 | b->newline_cache = 0; | 586 | b->newline_cache = 0; |
| 538 | b->width_run_cache = 0; | 587 | b->width_run_cache = 0; |
| @@ -562,24 +611,23 @@ CLONE nil means the indirect buffer's state is reset to default values. */) | |||
| 562 | /* Make sure the base buffer has markers for its narrowing. */ | 611 | /* Make sure the base buffer has markers for its narrowing. */ |
| 563 | if (NILP (BVAR (b->base_buffer, pt_marker))) | 612 | if (NILP (BVAR (b->base_buffer, pt_marker))) |
| 564 | { | 613 | { |
| 614 | eassert (NILP (BVAR (b->base_buffer, begv_marker))); | ||
| 615 | eassert (NILP (BVAR (b->base_buffer, zv_marker))); | ||
| 616 | |||
| 565 | BVAR (b->base_buffer, pt_marker) = Fmake_marker (); | 617 | BVAR (b->base_buffer, pt_marker) = Fmake_marker (); |
| 566 | set_marker_both (BVAR (b->base_buffer, pt_marker), base_buffer, | 618 | set_marker_both (BVAR (b->base_buffer, pt_marker), base_buffer, |
| 567 | BUF_PT (b->base_buffer), | 619 | b->base_buffer->pt, |
| 568 | BUF_PT_BYTE (b->base_buffer)); | 620 | b->base_buffer->pt_byte); |
| 569 | } | 621 | |
| 570 | if (NILP (BVAR (b->base_buffer, begv_marker))) | ||
| 571 | { | ||
| 572 | BVAR (b->base_buffer, begv_marker) = Fmake_marker (); | 622 | BVAR (b->base_buffer, begv_marker) = Fmake_marker (); |
| 573 | set_marker_both (BVAR (b->base_buffer, begv_marker), base_buffer, | 623 | set_marker_both (BVAR (b->base_buffer, begv_marker), base_buffer, |
| 574 | BUF_BEGV (b->base_buffer), | 624 | b->base_buffer->begv, |
| 575 | BUF_BEGV_BYTE (b->base_buffer)); | 625 | b->base_buffer->begv_byte); |
| 576 | } | 626 | |
| 577 | if (NILP (BVAR (b->base_buffer, zv_marker))) | ||
| 578 | { | ||
| 579 | BVAR (b->base_buffer, zv_marker) = Fmake_marker (); | 627 | BVAR (b->base_buffer, zv_marker) = Fmake_marker (); |
| 580 | set_marker_both (BVAR (b->base_buffer, zv_marker), base_buffer, | 628 | set_marker_both (BVAR (b->base_buffer, zv_marker), base_buffer, |
| 581 | BUF_ZV (b->base_buffer), | 629 | b->base_buffer->zv, |
| 582 | BUF_ZV_BYTE (b->base_buffer)); | 630 | b->base_buffer->zv_byte); |
| 583 | XMARKER (BVAR (b->base_buffer, zv_marker))->insertion_type = 1; | 631 | XMARKER (BVAR (b->base_buffer, zv_marker))->insertion_type = 1; |
| 584 | } | 632 | } |
| 585 | 633 | ||
| @@ -587,11 +635,11 @@ CLONE nil means the indirect buffer's state is reset to default values. */) | |||
| 587 | { | 635 | { |
| 588 | /* Give the indirect buffer markers for its narrowing. */ | 636 | /* Give the indirect buffer markers for its narrowing. */ |
| 589 | BVAR (b, pt_marker) = Fmake_marker (); | 637 | BVAR (b, pt_marker) = Fmake_marker (); |
| 590 | set_marker_both (BVAR (b, pt_marker), buf, BUF_PT (b), BUF_PT_BYTE (b)); | 638 | set_marker_both (BVAR (b, pt_marker), buf, b->pt, b->pt_byte); |
| 591 | BVAR (b, begv_marker) = Fmake_marker (); | 639 | BVAR (b, begv_marker) = Fmake_marker (); |
| 592 | set_marker_both (BVAR (b, begv_marker), buf, BUF_BEGV (b), BUF_BEGV_BYTE (b)); | 640 | set_marker_both (BVAR (b, begv_marker), buf, b->begv, b->begv_byte); |
| 593 | BVAR (b, zv_marker) = Fmake_marker (); | 641 | BVAR (b, zv_marker) = Fmake_marker (); |
| 594 | set_marker_both (BVAR (b, zv_marker), buf, BUF_ZV (b), BUF_ZV_BYTE (b)); | 642 | set_marker_both (BVAR (b, zv_marker), buf, b->zv, b->zv_byte); |
| 595 | XMARKER (BVAR (b, zv_marker))->insertion_type = 1; | 643 | XMARKER (BVAR (b, zv_marker))->insertion_type = 1; |
| 596 | } | 644 | } |
| 597 | else | 645 | else |
| @@ -1416,9 +1464,9 @@ with SIGHUP. */) | |||
| 1416 | don't re-kill them. */ | 1464 | don't re-kill them. */ |
| 1417 | if (other->base_buffer == b && !NILP (BVAR (other, name))) | 1465 | if (other->base_buffer == b && !NILP (BVAR (other, name))) |
| 1418 | { | 1466 | { |
| 1419 | Lisp_Object buffer; | 1467 | Lisp_Object buf; |
| 1420 | XSETBUFFER (buffer, other); | 1468 | XSETBUFFER (buf, other); |
| 1421 | Fkill_buffer (buffer); | 1469 | Fkill_buffer (buf); |
| 1422 | } | 1470 | } |
| 1423 | 1471 | ||
| 1424 | UNGCPRO; | 1472 | UNGCPRO; |
| @@ -1479,9 +1527,9 @@ with SIGHUP. */) | |||
| 1479 | && BUF_SAVE_MODIFF (b) < BUF_MODIFF (b) | 1527 | && BUF_SAVE_MODIFF (b) < BUF_MODIFF (b) |
| 1480 | && NILP (Fsymbol_value (intern ("auto-save-visited-file-name")))) | 1528 | && NILP (Fsymbol_value (intern ("auto-save-visited-file-name")))) |
| 1481 | { | 1529 | { |
| 1482 | Lisp_Object tem; | 1530 | Lisp_Object delete; |
| 1483 | tem = Fsymbol_value (intern ("delete-auto-save-files")); | 1531 | delete = Fsymbol_value (intern ("delete-auto-save-files")); |
| 1484 | if (! NILP (tem)) | 1532 | if (! NILP (delete)) |
| 1485 | internal_delete_file (BVAR (b, auto_save_file_name)); | 1533 | internal_delete_file (BVAR (b, auto_save_file_name)); |
| 1486 | } | 1534 | } |
| 1487 | 1535 | ||
| @@ -1553,19 +1601,19 @@ with SIGHUP. */) | |||
| 1553 | void | 1601 | void |
| 1554 | record_buffer (Lisp_Object buf) | 1602 | record_buffer (Lisp_Object buf) |
| 1555 | { | 1603 | { |
| 1556 | register Lisp_Object link, prev; | 1604 | register Lisp_Object list, prev; |
| 1557 | Lisp_Object frame; | 1605 | Lisp_Object frame; |
| 1558 | frame = selected_frame; | 1606 | frame = selected_frame; |
| 1559 | 1607 | ||
| 1560 | prev = Qnil; | 1608 | prev = Qnil; |
| 1561 | for (link = Vbuffer_alist; CONSP (link); link = XCDR (link)) | 1609 | for (list = Vbuffer_alist; CONSP (list); list = XCDR (list)) |
| 1562 | { | 1610 | { |
| 1563 | if (EQ (XCDR (XCAR (link)), buf)) | 1611 | if (EQ (XCDR (XCAR (list)), buf)) |
| 1564 | break; | 1612 | break; |
| 1565 | prev = link; | 1613 | prev = list; |
| 1566 | } | 1614 | } |
| 1567 | 1615 | ||
| 1568 | /* Effectively do Vbuffer_alist = Fdelq (link, Vbuffer_alist); | 1616 | /* Effectively do Vbuffer_alist = Fdelq (list, Vbuffer_alist); |
| 1569 | we cannot use Fdelq itself here because it allows quitting. */ | 1617 | we cannot use Fdelq itself here because it allows quitting. */ |
| 1570 | 1618 | ||
| 1571 | if (NILP (prev)) | 1619 | if (NILP (prev)) |
| @@ -1573,40 +1621,40 @@ record_buffer (Lisp_Object buf) | |||
| 1573 | else | 1621 | else |
| 1574 | XSETCDR (prev, XCDR (XCDR (prev))); | 1622 | XSETCDR (prev, XCDR (XCDR (prev))); |
| 1575 | 1623 | ||
| 1576 | XSETCDR (link, Vbuffer_alist); | 1624 | XSETCDR (list, Vbuffer_alist); |
| 1577 | Vbuffer_alist = link; | 1625 | Vbuffer_alist = list; |
| 1578 | 1626 | ||
| 1579 | /* Effectively do a delq on buried_buffer_list. */ | 1627 | /* Effectively do a delq on buried_buffer_list. */ |
| 1580 | 1628 | ||
| 1581 | prev = Qnil; | 1629 | prev = Qnil; |
| 1582 | for (link = XFRAME (frame)->buried_buffer_list; CONSP (link); | 1630 | for (list = XFRAME (frame)->buried_buffer_list; CONSP (list); |
| 1583 | link = XCDR (link)) | 1631 | list = XCDR (list)) |
| 1584 | { | 1632 | { |
| 1585 | if (EQ (XCAR (link), buf)) | 1633 | if (EQ (XCAR (list), buf)) |
| 1586 | { | 1634 | { |
| 1587 | if (NILP (prev)) | 1635 | if (NILP (prev)) |
| 1588 | XFRAME (frame)->buried_buffer_list = XCDR (link); | 1636 | XFRAME (frame)->buried_buffer_list = XCDR (list); |
| 1589 | else | 1637 | else |
| 1590 | XSETCDR (prev, XCDR (XCDR (prev))); | 1638 | XSETCDR (prev, XCDR (XCDR (prev))); |
| 1591 | break; | 1639 | break; |
| 1592 | } | 1640 | } |
| 1593 | prev = link; | 1641 | prev = list; |
| 1594 | } | 1642 | } |
| 1595 | 1643 | ||
| 1596 | /* Now move this buffer to the front of frame_buffer_list also. */ | 1644 | /* Now move this buffer to the front of frame_buffer_list also. */ |
| 1597 | 1645 | ||
| 1598 | prev = Qnil; | 1646 | prev = Qnil; |
| 1599 | for (link = frame_buffer_list (frame); CONSP (link); | 1647 | for (list = frame_buffer_list (frame); CONSP (list); |
| 1600 | link = XCDR (link)) | 1648 | list = XCDR (list)) |
| 1601 | { | 1649 | { |
| 1602 | if (EQ (XCAR (link), buf)) | 1650 | if (EQ (XCAR (list), buf)) |
| 1603 | break; | 1651 | break; |
| 1604 | prev = link; | 1652 | prev = list; |
| 1605 | } | 1653 | } |
| 1606 | 1654 | ||
| 1607 | /* Effectively do delq. */ | 1655 | /* Effectively do delq. */ |
| 1608 | 1656 | ||
| 1609 | if (CONSP (link)) | 1657 | if (CONSP (list)) |
| 1610 | { | 1658 | { |
| 1611 | if (NILP (prev)) | 1659 | if (NILP (prev)) |
| 1612 | set_frame_buffer_list (frame, | 1660 | set_frame_buffer_list (frame, |
| @@ -1614,8 +1662,8 @@ record_buffer (Lisp_Object buf) | |||
| 1614 | else | 1662 | else |
| 1615 | XSETCDR (prev, XCDR (XCDR (prev))); | 1663 | XSETCDR (prev, XCDR (XCDR (prev))); |
| 1616 | 1664 | ||
| 1617 | XSETCDR (link, frame_buffer_list (frame)); | 1665 | XSETCDR (list, frame_buffer_list (frame)); |
| 1618 | set_frame_buffer_list (frame, link); | 1666 | set_frame_buffer_list (frame, list); |
| 1619 | } | 1667 | } |
| 1620 | else | 1668 | else |
| 1621 | set_frame_buffer_list (frame, Fcons (buf, frame_buffer_list (frame))); | 1669 | set_frame_buffer_list (frame, Fcons (buf, frame_buffer_list (frame))); |
| @@ -1664,7 +1712,7 @@ the current buffer's major mode. */) | |||
| 1664 | /* Switch to buffer BUFFER in the selected window. | 1712 | /* Switch to buffer BUFFER in the selected window. |
| 1665 | If NORECORD is non-nil, don't call record_buffer. */ | 1713 | If NORECORD is non-nil, don't call record_buffer. */ |
| 1666 | 1714 | ||
| 1667 | Lisp_Object | 1715 | static Lisp_Object |
| 1668 | switch_to_buffer_1 (Lisp_Object buffer_or_name, Lisp_Object norecord) | 1716 | switch_to_buffer_1 (Lisp_Object buffer_or_name, Lisp_Object norecord) |
| 1669 | { | 1717 | { |
| 1670 | register Lisp_Object buffer; | 1718 | register Lisp_Object buffer; |
| @@ -1796,27 +1844,7 @@ set_buffer_internal_1 (register struct buffer *b) | |||
| 1796 | 1844 | ||
| 1797 | /* If the old current buffer has markers to record PT, BEGV and ZV | 1845 | /* If the old current buffer has markers to record PT, BEGV and ZV |
| 1798 | when it is not current, update them now. */ | 1846 | when it is not current, update them now. */ |
| 1799 | if (! NILP (BVAR (old_buf, pt_marker))) | 1847 | record_buffer_markers (old_buf); |
| 1800 | { | ||
| 1801 | Lisp_Object obuf; | ||
| 1802 | XSETBUFFER (obuf, old_buf); | ||
| 1803 | set_marker_both (BVAR (old_buf, pt_marker), obuf, | ||
| 1804 | BUF_PT (old_buf), BUF_PT_BYTE (old_buf)); | ||
| 1805 | } | ||
| 1806 | if (! NILP (BVAR (old_buf, begv_marker))) | ||
| 1807 | { | ||
| 1808 | Lisp_Object obuf; | ||
| 1809 | XSETBUFFER (obuf, old_buf); | ||
| 1810 | set_marker_both (BVAR (old_buf, begv_marker), obuf, | ||
| 1811 | BUF_BEGV (old_buf), BUF_BEGV_BYTE (old_buf)); | ||
| 1812 | } | ||
| 1813 | if (! NILP (BVAR (old_buf, zv_marker))) | ||
| 1814 | { | ||
| 1815 | Lisp_Object obuf; | ||
| 1816 | XSETBUFFER (obuf, old_buf); | ||
| 1817 | set_marker_both (BVAR (old_buf, zv_marker), obuf, | ||
| 1818 | BUF_ZV (old_buf), BUF_ZV_BYTE (old_buf)); | ||
| 1819 | } | ||
| 1820 | } | 1848 | } |
| 1821 | 1849 | ||
| 1822 | /* Get the undo list from the base buffer, so that it appears | 1850 | /* Get the undo list from the base buffer, so that it appears |
| @@ -1826,21 +1854,7 @@ set_buffer_internal_1 (register struct buffer *b) | |||
| 1826 | 1854 | ||
| 1827 | /* If the new current buffer has markers to record PT, BEGV and ZV | 1855 | /* If the new current buffer has markers to record PT, BEGV and ZV |
| 1828 | when it is not current, fetch them now. */ | 1856 | when it is not current, fetch them now. */ |
| 1829 | if (! NILP (BVAR (b, pt_marker))) | 1857 | fetch_buffer_markers (b); |
| 1830 | { | ||
| 1831 | BUF_PT (b) = marker_position (BVAR (b, pt_marker)); | ||
| 1832 | BUF_PT_BYTE (b) = marker_byte_position (BVAR (b, pt_marker)); | ||
| 1833 | } | ||
| 1834 | if (! NILP (BVAR (b, begv_marker))) | ||
| 1835 | { | ||
| 1836 | BUF_BEGV (b) = marker_position (BVAR (b, begv_marker)); | ||
| 1837 | BUF_BEGV_BYTE (b) = marker_byte_position (BVAR (b, begv_marker)); | ||
| 1838 | } | ||
| 1839 | if (! NILP (BVAR (b, zv_marker))) | ||
| 1840 | { | ||
| 1841 | BUF_ZV (b) = marker_position (BVAR (b, zv_marker)); | ||
| 1842 | BUF_ZV_BYTE (b) = marker_byte_position (BVAR (b, zv_marker)); | ||
| 1843 | } | ||
| 1844 | 1858 | ||
| 1845 | /* Look down buffer's list of local Lisp variables | 1859 | /* Look down buffer's list of local Lisp variables |
| 1846 | to find and update any that forward into C variables. */ | 1860 | to find and update any that forward into C variables. */ |
| @@ -1876,50 +1890,13 @@ set_buffer_temp (struct buffer *b) | |||
| 1876 | old_buf = current_buffer; | 1890 | old_buf = current_buffer; |
| 1877 | current_buffer = b; | 1891 | current_buffer = b; |
| 1878 | 1892 | ||
| 1879 | if (old_buf) | 1893 | /* If the old current buffer has markers to record PT, BEGV and ZV |
| 1880 | { | 1894 | when it is not current, update them now. */ |
| 1881 | /* If the old current buffer has markers to record PT, BEGV and ZV | 1895 | record_buffer_markers (old_buf); |
| 1882 | when it is not current, update them now. */ | ||
| 1883 | if (! NILP (BVAR (old_buf, pt_marker))) | ||
| 1884 | { | ||
| 1885 | Lisp_Object obuf; | ||
| 1886 | XSETBUFFER (obuf, old_buf); | ||
| 1887 | set_marker_both (BVAR (old_buf, pt_marker), obuf, | ||
| 1888 | BUF_PT (old_buf), BUF_PT_BYTE (old_buf)); | ||
| 1889 | } | ||
| 1890 | if (! NILP (BVAR (old_buf, begv_marker))) | ||
| 1891 | { | ||
| 1892 | Lisp_Object obuf; | ||
| 1893 | XSETBUFFER (obuf, old_buf); | ||
| 1894 | set_marker_both (BVAR (old_buf, begv_marker), obuf, | ||
| 1895 | BUF_BEGV (old_buf), BUF_BEGV_BYTE (old_buf)); | ||
| 1896 | } | ||
| 1897 | if (! NILP (BVAR (old_buf, zv_marker))) | ||
| 1898 | { | ||
| 1899 | Lisp_Object obuf; | ||
| 1900 | XSETBUFFER (obuf, old_buf); | ||
| 1901 | set_marker_both (BVAR (old_buf, zv_marker), obuf, | ||
| 1902 | BUF_ZV (old_buf), BUF_ZV_BYTE (old_buf)); | ||
| 1903 | } | ||
| 1904 | } | ||
| 1905 | 1896 | ||
| 1906 | /* If the new current buffer has markers to record PT, BEGV and ZV | 1897 | /* If the new current buffer has markers to record PT, BEGV and ZV |
| 1907 | when it is not current, fetch them now. */ | 1898 | when it is not current, fetch them now. */ |
| 1908 | if (! NILP (BVAR (b, pt_marker))) | 1899 | fetch_buffer_markers (b); |
| 1909 | { | ||
| 1910 | BUF_PT (b) = marker_position (BVAR (b, pt_marker)); | ||
| 1911 | BUF_PT_BYTE (b) = marker_byte_position (BVAR (b, pt_marker)); | ||
| 1912 | } | ||
| 1913 | if (! NILP (BVAR (b, begv_marker))) | ||
| 1914 | { | ||
| 1915 | BUF_BEGV (b) = marker_position (BVAR (b, begv_marker)); | ||
| 1916 | BUF_BEGV_BYTE (b) = marker_byte_position (BVAR (b, begv_marker)); | ||
| 1917 | } | ||
| 1918 | if (! NILP (BVAR (b, zv_marker))) | ||
| 1919 | { | ||
| 1920 | BUF_ZV (b) = marker_position (BVAR (b, zv_marker)); | ||
| 1921 | BUF_ZV_BYTE (b) = marker_byte_position (BVAR (b, zv_marker)); | ||
| 1922 | } | ||
| 1923 | } | 1900 | } |
| 1924 | 1901 | ||
| 1925 | DEFUN ("set-buffer", Fset_buffer, Sset_buffer, 1, 1, 0, | 1902 | DEFUN ("set-buffer", Fset_buffer, Sset_buffer, 1, 1, 0, |
| @@ -2007,13 +1984,13 @@ its frame, iconify that frame. */) | |||
| 2007 | buffer is killed. */ | 1984 | buffer is killed. */ |
| 2008 | if (!NILP (BVAR (XBUFFER (buffer), name))) | 1985 | if (!NILP (BVAR (XBUFFER (buffer), name))) |
| 2009 | { | 1986 | { |
| 2010 | Lisp_Object aelt, link; | 1987 | Lisp_Object aelt, list; |
| 2011 | 1988 | ||
| 2012 | aelt = Frassq (buffer, Vbuffer_alist); | 1989 | aelt = Frassq (buffer, Vbuffer_alist); |
| 2013 | link = Fmemq (aelt, Vbuffer_alist); | 1990 | list = Fmemq (aelt, Vbuffer_alist); |
| 2014 | Vbuffer_alist = Fdelq (aelt, Vbuffer_alist); | 1991 | Vbuffer_alist = Fdelq (aelt, Vbuffer_alist); |
| 2015 | XSETCDR (link, Qnil); | 1992 | XSETCDR (list, Qnil); |
| 2016 | Vbuffer_alist = nconc2 (Vbuffer_alist, link); | 1993 | Vbuffer_alist = nconc2 (Vbuffer_alist, list); |
| 2017 | 1994 | ||
| 2018 | XFRAME (selected_frame)->buffer_list | 1995 | XFRAME (selected_frame)->buffer_list |
| 2019 | = Fdelq (buffer, XFRAME (selected_frame)->buffer_list); | 1996 | = Fdelq (buffer, XFRAME (selected_frame)->buffer_list); |
| @@ -2358,12 +2335,12 @@ current buffer is cleared. */) | |||
| 2358 | && GPT_BYTE > 1 && GPT_BYTE < Z_BYTE | 2335 | && GPT_BYTE > 1 && GPT_BYTE < Z_BYTE |
| 2359 | && ! CHAR_HEAD_P (*(GAP_END_ADDR))) | 2336 | && ! CHAR_HEAD_P (*(GAP_END_ADDR))) |
| 2360 | { | 2337 | { |
| 2361 | unsigned char *p = GPT_ADDR - 1; | 2338 | unsigned char *q = GPT_ADDR - 1; |
| 2362 | 2339 | ||
| 2363 | while (! CHAR_HEAD_P (*p) && p > BEG_ADDR) p--; | 2340 | while (! CHAR_HEAD_P (*q) && q > BEG_ADDR) q--; |
| 2364 | if (LEADING_CODE_P (*p)) | 2341 | if (LEADING_CODE_P (*q)) |
| 2365 | { | 2342 | { |
| 2366 | EMACS_INT new_gpt = GPT_BYTE - (GPT_ADDR - p); | 2343 | EMACS_INT new_gpt = GPT_BYTE - (GPT_ADDR - q); |
| 2367 | 2344 | ||
| 2368 | move_gap_both (new_gpt, new_gpt); | 2345 | move_gap_both (new_gpt, new_gpt); |
| 2369 | } | 2346 | } |
| @@ -2447,14 +2424,14 @@ current buffer is cleared. */) | |||
| 2447 | ZV = chars_in_text (BEG_ADDR, ZV_BYTE - BEG_BYTE) + BEG; | 2424 | ZV = chars_in_text (BEG_ADDR, ZV_BYTE - BEG_BYTE) + BEG; |
| 2448 | 2425 | ||
| 2449 | { | 2426 | { |
| 2450 | EMACS_INT pt_byte = advance_to_char_boundary (PT_BYTE); | 2427 | EMACS_INT byte = advance_to_char_boundary (PT_BYTE); |
| 2451 | EMACS_INT pt; | 2428 | EMACS_INT position; |
| 2452 | 2429 | ||
| 2453 | if (pt_byte > GPT_BYTE) | 2430 | if (byte > GPT_BYTE) |
| 2454 | pt = chars_in_text (GAP_END_ADDR, pt_byte - GPT_BYTE) + GPT; | 2431 | position = chars_in_text (GAP_END_ADDR, byte - GPT_BYTE) + GPT; |
| 2455 | else | 2432 | else |
| 2456 | pt = chars_in_text (BEG_ADDR, pt_byte - BEG_BYTE) + BEG; | 2433 | position = chars_in_text (BEG_ADDR, byte - BEG_BYTE) + BEG; |
| 2457 | TEMP_SET_PT_BOTH (pt, pt_byte); | 2434 | TEMP_SET_PT_BOTH (position, byte); |
| 2458 | } | 2435 | } |
| 2459 | 2436 | ||
| 2460 | tail = markers = BUF_MARKERS (current_buffer); | 2437 | tail = markers = BUF_MARKERS (current_buffer); |
| @@ -3421,7 +3398,8 @@ void | |||
| 3421 | fix_start_end_in_overlays (register EMACS_INT start, register EMACS_INT end) | 3398 | fix_start_end_in_overlays (register EMACS_INT start, register EMACS_INT end) |
| 3422 | { | 3399 | { |
| 3423 | Lisp_Object overlay; | 3400 | Lisp_Object overlay; |
| 3424 | struct Lisp_Overlay *before_list, *after_list; | 3401 | struct Lisp_Overlay *before_list IF_LINT (= NULL); |
| 3402 | struct Lisp_Overlay *after_list IF_LINT (= NULL); | ||
| 3425 | /* These are either nil, indicating that before_list or after_list | 3403 | /* These are either nil, indicating that before_list or after_list |
| 3426 | should be assigned, or the cons cell the cdr of which should be | 3404 | should be assigned, or the cons cell the cdr of which should be |
| 3427 | assigned. */ | 3405 | assigned. */ |
| @@ -3569,7 +3547,7 @@ fix_overlays_before (struct buffer *bp, EMACS_INT prev, EMACS_INT pos) | |||
| 3569 | /* If parent is nil, replace overlays_before; otherwise, parent->next. */ | 3547 | /* If parent is nil, replace overlays_before; otherwise, parent->next. */ |
| 3570 | struct Lisp_Overlay *tail = bp->overlays_before, *parent = NULL, *right_pair; | 3548 | struct Lisp_Overlay *tail = bp->overlays_before, *parent = NULL, *right_pair; |
| 3571 | Lisp_Object tem; | 3549 | Lisp_Object tem; |
| 3572 | EMACS_INT end; | 3550 | EMACS_INT end IF_LINT (= 0); |
| 3573 | 3551 | ||
| 3574 | /* After the insertion, the several overlays may be in incorrect | 3552 | /* After the insertion, the several overlays may be in incorrect |
| 3575 | order. The possibility is that, in the list `overlays_before', | 3553 | order. The possibility is that, in the list `overlays_before', |
| @@ -4345,10 +4323,10 @@ report_overlay_modification (Lisp_Object start, Lisp_Object end, int after, | |||
| 4345 | 4323 | ||
| 4346 | for (i = 0; i < size;) | 4324 | for (i = 0; i < size;) |
| 4347 | { | 4325 | { |
| 4348 | Lisp_Object prop, overlay; | 4326 | Lisp_Object prop_i, overlay_i; |
| 4349 | prop = copy[i++]; | 4327 | prop_i = copy[i++]; |
| 4350 | overlay = copy[i++]; | 4328 | overlay_i = copy[i++]; |
| 4351 | call_overlay_mod_hooks (prop, overlay, after, arg1, arg2, arg3); | 4329 | call_overlay_mod_hooks (prop_i, overlay_i, after, arg1, arg2, arg3); |
| 4352 | } | 4330 | } |
| 4353 | } | 4331 | } |
| 4354 | UNGCPRO; | 4332 | UNGCPRO; |
| @@ -5333,9 +5311,6 @@ syms_of_buffer (void) | |||
| 5333 | Fput (Qprotected_field, Qerror_message, | 5311 | Fput (Qprotected_field, Qerror_message, |
| 5334 | make_pure_c_string ("Attempt to modify a protected field")); | 5312 | make_pure_c_string ("Attempt to modify a protected field")); |
| 5335 | 5313 | ||
| 5336 | /* All these use DEFVAR_LISP_NOPRO because the slots in | ||
| 5337 | buffer_defaults will all be marked via Vbuffer_defaults. */ | ||
| 5338 | |||
| 5339 | DEFVAR_BUFFER_DEFAULTS ("default-mode-line-format", | 5314 | DEFVAR_BUFFER_DEFAULTS ("default-mode-line-format", |
| 5340 | mode_line_format, | 5315 | mode_line_format, |
| 5341 | doc: /* Default value of `mode-line-format' for buffers that don't override it. | 5316 | doc: /* Default value of `mode-line-format' for buffers that don't override it. |