Previous: Excursions, Up: Positions   [Contents][Index]


29.4 ¥Ê¥í¥¤¥ó¥°

¥Ê¥í¥¤¥ó¥°¡Ênarrowing¡Ë¤È¤Ï¡¢ Emacs¤ÎÊÔ½¸¥³¥Þ¥ó¥É¤¬»²¾È¤Ç¤­¤ë¥Æ¥­¥¹¥È¤ò ¥Ð¥Ã¥Õ¥¡¤ÎÀ©¸Â¤µ¤ì¤¿Ê¸»ú¤ÎÈϰϤ˸ÂÄꤹ¤ë¤³¤È¤Ç¤¹¡£ »²¾È¤Ç¤­¤ë¥Æ¥­¥¹¥È¤Î¤³¤È¤ò¥Ð¥Ã¥Õ¥¡¤Î »²¾È²ÄǽÉôʬ¡Êaccessible portion¡Ë¤È¸Æ¤Ó¤Þ¤¹¡£

¥Ê¥í¥¤¥ó¥°¤Ï¡¢»²¾È²ÄǽÉôʬ¤ÎÀèÆ¬¤ÈËöÈø¤Ë¤Ê¤ë2¤Ä¤Î¥Ð¥Ã¥Õ¥¡Æâ°ÌÃ֤ǻØÄꤷ¤Þ¤¹¡£ ¤Û¤È¤ó¤É¤ÎÊÔ½¸¥³¥Þ¥ó¥É¤ä¤Û¤È¤ó¤É¤ÎEmacs´ðËÜ´Ø¿ô¤Ë¤È¤Ã¤Æ¤Ï¡¢ ¤³¤ì¤é¤Î°ÌÃ֤ϥХåե¡¤ÎÀèÆ¬¤äËöÈø¤ÎÃͤòÃÖ¤­´¹¤¨¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£ ¥Ê¥í¥¤¥ó¥°¤·¤Æ¤¤¤ë¤È¡¢»²¾È²ÄǽÉôʬ¤Î³°Â¦¤Î¥Æ¥­¥¹¥È¤Ïɽ¼¨¤µ¤ì¤Þ¤»¤ó¤·¡¢ ¥Ý¥¤¥ó¥È¤Ï»²¾È²ÄǽÉôʬ¤Î³°Â¦¤Ø¤Ï°Üư¤Ç¤­¤Þ¤»¤ó¡£

Ä̾ï¤Ï¥Ð¥Ã¥Õ¥¡¤ÎÀèÆ¬¤«¤é¿ô¤¨¤ë°ÌÃÖ¤ä¹ÔÈÖ¹æ¤Ê¤É¤ÎÃÍ¤Ï ¥Ê¥í¥¤¥ó¥°¤·¤Æ¤¤¤Æ¤âƱÍͤ˿ô¤¨¤Þ¤¹¤¬¡¢ ¤½¤ì¤é¤ò»È¤¦´Ø¿ô¤Ï»²¾È¤Ç¤­¤Ê¤¤¥Æ¥­¥¹¥È¤òÁàºî¤¹¤ë¤³¤È¤òµñÈݤ·¤Þ¤¹¡£

¥Ð¥Ã¥Õ¥¡¤òÊݸ¤¹¤ë¥³¥Þ¥ó¥É¤Ï¥Ê¥í¥¤¥ó¥°¤Î±Æ¶Á¤ò¼õ¤±¤Þ¤»¤ó¡£ ¤Ä¤Þ¤ê¡¢¥Ê¥í¥¤¥ó¥°¤Ë´Ø·¸¤Ê¤¯¥Ð¥Ã¥Õ¥¡Á´ÂΤòÊݸ¤·¤Þ¤¹¡£

¥³¥Þ¥ó¥É: narrow-to-region start end

¤³¤Î´Ø¿ô¤Ï¡¢¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Îstart¤Ç»Ï¤Þ¤êend¤Ç½ª¤ëÉôʬ¤ò »²¾È²ÄǽÉôʬ¤Ë¤¹¤ë¡£ ¤É¤Á¤é¤Î°ú¿ô¤âʸ»ú¤Î°ÌÃ֤Ǥ¢¤ë¤³¤È¡£

ÂÐÏÃŪ¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¤È¡¢start¤Èend¤Ï ¸½ºß¤Î¥ê¡¼¥¸¥ç¥ó¤Î¶­³¦¡Ê¥Ý¥¤¥ó¥È¤È¥Þ¡¼¥¯¤Î¾®¤µ¤¤¤Û¤¦¤¬¤µ¤­¤Ë¤¯¤ë¡Ë¤Ç¤¢¤ë¡£

¥³¥Þ¥ó¥É: narrow-to-page move-count

¤³¤Î¥³¥Þ¥ó¥É¤Ï¡¢¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Î»²¾È²ÄǽÉôʬ¤ò ¸½ºß¤Î¥Ú¡¼¥¸¤Î¤ß¤ò´Þ¤à¤è¤¦¤Ë¤¹¤ë¡£ ¾Êά²Äǽ¤ÊÂè1°ú¿ômove-count¤¬nil°Ê³°¤Ç¤¢¤ë¤È¡¢ move-count¥Ú¡¼¥¸¤À¤±Á°Êý¤«¸åÊý¤Ø°Üư¤·¤Æ¤«¤é 1¥Ú¡¼¥¸Ê¬¤Ë¥Ê¥í¥¤¥ó¥°¤¹¤ë¡£ ÊÑ¿ôpage-delimiter¤¬¥Ú¡¼¥¸¤Î³«»Ï²Õ½ê¤È½ªÎ»²Õ½ê¤ò»ØÄꤹ¤ë ¡Êsee Standard Regexps¡Ë¡£

ÂÐÏÃŪ¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¤È¡¢move-count¤Ï¿ôÃÍÁ°ÃÖ°ú¿ô¤Ç¤¢¤ë¡£

¥³¥Þ¥ó¥É: widen

¤³¤Î´Ø¿ô¤Ï¡¢¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Î¥Ê¥í¥¤¥ó¥°¤ò²ò½ü¤·¡¢ Á´ÂΤò»²¾È¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¡£ ¤³¤ì¤ò¥ï¥¤¥É¥Ë¥ó¥°¡Êwidening¡Ë¤È¸Æ¤Ö¡£ ¤³¤ì¤Ï¤Ä¤®¤Î¼°¤ÈÅù²Á¤Ç¤¢¤ë¡£

(narrow-to-region 1 (1+ (buffer-size)))
Special Form: save-restriction body…

¤³¤Î¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤Ï¡¢¸½ºß¤Î»²¾È²ÄǽÉôʬ¤Î¶­³¦¤òÊݸ¤·¡¢ ¥Õ¥©¡¼¥àbody¤òɾ²Á¤·¡¢ºÇ¸å¤Ë¡¢Êݸ¤·¤¿¶­³¦¤òÉü¸µ¤·¤Æ ¤Þ¤¨¤ÈƱ¤¸¥Ê¥í¥¤¥ó¥°¾õÂ֡ʤ¢¤ë¤¤¤Ï¥Ê¥í¥¤¥ó¥°¤Ê¤·¡Ë¤ËÉü¸µ¤¹¤ë¡£ throw¤ä¥¨¥é¡¼¤Ë¤è¤ë°Û¾ïæ½Ð¡Êsee Nonlocal Exits¡Ë¤Ç¤¢¤Ã¤Æ¤â¡¢ ¥Ê¥í¥¤¥ó¥°¾õÂÖ¤òÉü¸µ¤¹¤ë¡£

save-restriction¤ÎÌá¤êÃͤϡ¢body¤ÎºÇ¸å¤Î·ë²Ì¤Ç¤¢¤ë¤«¡¢ body¤òÍ¿¤¨¤Ê¤±¤ì¤Ðnil¤Ç¤¢¤ë¡£

Ãí°Õ¡§ ¹½Ê¸save-restriction¤ò»È¤¦¤È¤­¤Ë¤Ï ¤Þ¤Á¤¬¤¤¤ä¤¹¤¤¡£ »È¤¦¤Þ¤¨¤Ë¤³¤ÎÀâÌÀÁ´ÂΤòÆÉ¤à¤³¤È¡£

body¤Ç¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤òÀÚ¤êÂØ¤¨¤Æ¤â save-restriction¤Ï¤â¤È¤Î¥Ð¥Ã¥Õ¥¡¡Ê¥Ð¥Ã¥Õ¥¡¤ÎÀ©¸Â¤òÊݸ¤·¤¿¥Ð¥Ã¥Õ¥¡¡Ë¤Ë À©¸Â¤òÉü¸µ¤¹¤ë¤¬¡¢¤â¤È¤Î¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ë¤ÏÌᤵ¤Ê¤¤¡£

save-restriction¤Ï¥Ý¥¤¥ó¥È¤ä¥Þ¡¼¥¯¤ÏÉü¸µ¤·¤Ê¤¤¡£ ¤½¤ì¤Ë¤Ïsave-excursion¤ò»È¤¦¡£ save-restriction¤Èsave-excursion¤Îξ¼Ô¤ò °ì½ï¤Ë»È¤¦¤È¤­¤Ë¤Ï¡¢save-excursion¤¬Àè¤Ë¡Ê³°Â¦¤Ë¡Ë¤¯¤ë¤³¤È¡£ ¤µ¤â¤Ê¤¤¤È¡¢¸Å¤¤¥Ý¥¤¥ó¥ÈÃͤϰì»þŪ¤Ê¥Ê¥í¥¤¥ó¥°¤¬Í­¸ú¤Ê¾õÂÖ¤ÇÉü¸µ¤µ¤ì¤ë¡£ ¸Å¤¤¥Ý¥¤¥ó¥ÈÃͤ¬°ì»þŪ¤Ê¥Ê¥í¥¤¥ó¥°¤ÎÈϰϳ°¤Ë¤¢¤ë¤ÈÀµ¤·¤¯Éü¸µ¤Ç¤­¤Ê¤¤¡£

¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥àsave-restriction¤Ï¡¢ »²¾È²ÄǽÉôʬ¤ÎÀèÆ¬¤ÈËöÈø¤ò¥Ð¥Ã¥Õ¥¡¤ÎÀèÆ¬¤ÈËöÈø¤«¤é¤Îµ÷Î¥¤È¤·¤Æµ­Ï¿¤¹¤ë¡£ ¤¤¤¤¤«¤¨¤ì¤Ð¡¢»²¾È²ÄǽÉôʬ¤ÎÁ°¸å¤Î»²¾È¤Ç¤­¤Ê¤¤¥Æ¥­¥¹¥È¤ÎÎ̤òµ­Ï¿¤¹¤ë¡£

¤³¤ÎÊýË¡¤Ï¡¢body¤Ç¤µ¤é¤Ë¥Ê¥í¥¤¥ó¥°¤·¤Æ¤âÀµ¤·¤¤·ë²Ì¤òÀ¸¤¸¤ë¡£ ¤·¤«¤·¡¢body¤Ç¥ï¥¤¥É¥Ë¥ó¥°¤·¤ÆÊݸ¤µ¤ì¤Æ¤¤¤ë¥Ê¥í¥¤¥ó¥°¤ÎÈϰϳ°¤ò Êѹ¹¤¹¤ë¤Èsave-restriction¤¬º®Í𤹤롣 ¤³¤Î¤è¤¦¤Ë¤·¤¿¤¤¤È¤­¤Ë¤Ï¡¢ save-restriction¤ÏÀµ¤·¤¤²òË¡¤Ç¤Ï¤Ê¤¤¡£ ¤Ä¤®¤Î¤è¤¦¤Ë¤¹¤ëɬÍפ¬¤¢¤ë¡£

(let ((beg (point-min-marker))
      (end (point-max-marker)))
  (unwind-protect
      (progn body)
    (save-excursion
      (set-buffer (marker-buffer beg))
      (narrow-to-region beg end))))

save-restriction¤ÎÀµ¤·¤¤»È¤¤Êý¤Î´Êñ¤ÊÎã¤ò¼¨¤¹¡£

---------- Buffer: foo ----------
This is the contents of foo
This is the contents of foo
This is the contents of foo∗
---------- Buffer: foo ----------
(save-excursion
  (save-restriction
    (goto-char 1)
    (forward-line 2)
    (narrow-to-region 1 (point))
    (goto-char (point-min))
    (replace-string "foo" "bar")))

---------- Buffer: foo ----------
This is the contents of bar
This is the contents of bar
This is the contents of foo∗
---------- Buffer: foo ----------