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\