Next: , Previous: Buffer Basics, Up: Buffers   [Contents][Index]


26.2 ¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡

°ìÈ̤ˡ¢Emacs¥»¥Ã¥·¥ç¥ó¤Ë¤Ï¿¤¯¤Î¥Ð¥Ã¥Õ¥¡¤¬¤¢¤ê¤Þ¤¹¡£ ¤¤¤Ä¤Î»þÅÀ¤Ç¤â¡¢¤½¤ì¤é¤Î1¤Ä¤ò¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡ ¡Êcurrent buffer¡Ë¤È¤·¤Æ¶èÊ̤·¤Þ¤¹¡£ ¥Ð¥Ã¥Õ¥¡Æâ¤Î¥Æ¥­¥¹¥È¤ò¸¡ºº¤·¤¿¤êÊѹ¹¤¹¤ë´ðËÜ´Ø¿ô¤Ï °ÅÌۤΤ¦¤Á¤Ë¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ËºîÍѤ¹¤ë¤¿¤á¡¢ ¤Û¤È¤ó¤É¤ÎÊÔ½¸¤Ï¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ËÂФ·¤Æ¹Ô¤ï¤ì¤Þ¤¹ ¡Êsee Text¡Ë¡£ Ä̾¥¹¥¯¥ê¡¼¥ó¾å¤ÇÁªÂò¤µ¤ì¤¿¥¦¥£¥ó¥É¥¦¤Ëɽ¼¨¤µ¤ì¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡¤¬ ¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ç¤¹¤¬¡¢¤Ä¤Í¤Ë¤½¤¦¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£ Lisp¥×¥í¥°¥é¥à¤Ç¤Ï¡¢¥¹¥¯¥ê¡¼¥ó¾å¤Îɽ¼¨¤ÏÊѤ¨¤º¤Ë¡¢ Ǥ°Õ¤Î¥Ð¥Ã¥Õ¥¡¤ÎÆâÍÆ¤òÁàºî¤¹¤ë¤¿¤á¤Ë °ì»þŪ¤ËÅö³º¥Ð¥Ã¥Õ¥¡¤ò¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ë¤Ç¤­¤Þ¤¹¡£

Lisp¥×¥í¥°¥é¥à¤Ç¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ò»ØÄꤹ¤ë¤Ë¤Ï¡¢ set-buffer¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£ ¿·¤¿¤Ë»ØÄꤷľ¤¹¤Þ¤Ç»ØÄꤷ¤¿¥Ð¥Ã¥Õ¥¡¤¬¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ç¤¢¤ê³¤±¤Þ¤¹¡£

ÊÔ½¸¥³¥Þ¥ó¥É¤¬¥¨¥Ç¥£¥¿¥³¥Þ¥ó¥É¥ë¡¼¥×¤ØÌá¤ë¤È¡¢ ¥³¥Þ¥ó¥É¥ë¡¼¥×¤Ï¡¢º®Íð¤òÈò¤±¤ë¤¿¤á¤Ë¡¢ÁªÂò¤µ¤ì¤Æ¤¤¤ë¥¦¥£¥ó¥É¥¦¤Ë ɽ¼¨¤µ¤ì¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡¤ò¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤È¤·¤Þ¤¹¡£ ¤Ä¤Þ¤ê¡¢Emacs¤¬¥³¥Þ¥ó¥É¤òÆÉ¤à¤È¤­¤Ë¥«¡¼¥½¥ë¤¬¤¢¤ë¥Ð¥Ã¥Õ¥¡¤¬ ¥³¥Þ¥ó¥É¤¬Å¬ÍѤµ¤ì¤ë¥Ð¥Ã¥Õ¥¡¤Ç¤¹¡£ ¡ÊSee Command Loop¡£¡Ë ¤·¤¿¤¬¤Ã¤Æ¡¢set-buffer¤Ï¡¢ ¥æ¡¼¥¶¡¼¤¬ÊÔ½¸¤Ç¤­¤ë¤è¤¦¤ËÊ̤ΥХåե¡¤ØÀÚ¤êÂØ¤¨¤ëÊýË¡¤Ë¤Ï¤Ê¤ê¤Þ¤»¤ó¡£ ¤³¤ì¤Ë¤Ï¡¢Displaying Buffers¤Ç½Ò¤Ù¤Æ¤¤¤ë´Ø¿ô¤ò»È¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£

¤·¤«¤·¡¢Ê̤Υ«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ËÂØ¤¨¤ëLisp´Ø¿ô¤Ç¤Ï¡¢ ¥³¥Þ¥ó¥É¥ë¡¼¥×¤¬¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ò ¤¢¤È¤ÇÌ᤹¤È¤¤¤¦¤³¤È¤Ë°Í¸¤·¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£ Emacs Lisp¤Ç½ñ¤«¤ì¤¿ÊÔ½¸¥³¥Þ¥ó¥É¤Ï¡¢¥³¥Þ¥ó¥É¥ë¡¼¥×¤Ë²Ã¤¨¤Æ ÊÌ¤Î¥×¥í¥°¥é¥à¤«¤é¤â¸Æ¤Ð¤ì¤Þ¤¹¡£ ¥µ¥Ö¥ë¡¼¥Æ¥£¥ó¤¬¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤òÂØ¤¨¤Ê¤¤¤Û¤¦¤¬ ¡Ê¤½¤ì¤¬¥µ¥Ö¥ë¡¼¥Æ¥£¥ó¤ÎÌÜŪ¤Ç¤Ê¤±¤ì¤Ð¡Ë¡¢ ¸Æ¤Ó½Ð¤·Â¦¤Ë¤È¤Ã¤Æ¤ÏÊØÍø¤Ç¤¹¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢´Ø¿ô¤Î¼Â¹Ô¤¬½ª¤ë¤È¤â¤È¤Î¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ËÌ᤹ ¥Õ¥©¡¼¥àsave-current-buffer¤ä save-excursion¡Êsee Excursions¡Ë¤ÎÆâ¦¤Ç¡¢ ÉáÄ̤Ïset-buffer¤ò»È¤¤¤Þ¤¹¡£ Îã¤È¤·¤Æ¡¢¡ÊÀâÌÀʸ»úÎó¤ò´Êά¤Ë¤·¤Æ¡Ë¥³¥Þ¥ó¥Éappend-to-buffer ¤Î¥³¡¼¥É¤ò¼¨¤·¤Þ¤¹¡£

(defun append-to-buffer (buffer start end)
  "Append to specified buffer the text of the region.
…"
  (interactive "BAppend to buffer: \nr")
  (let ((oldbuf (current-buffer)))
    (save-current-buffer
      (set-buffer (get-buffer-create buffer))
      (insert-buffer-substring oldbuf start end))))

¤³¤Î´Ø¿ô¤Ç¤Ï¡¢¥í¡¼¥«¥ëÊÑ¿ô¤ò«Çû¤·¤Æ¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤òµ­Ï¿¤·¡¢ save-current-buffer¤Ç¤½¤ì¤¬¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ËÌá¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£ ¤Ä¤®¤Ë¡¢set-buffer¤Ç»ØÄꤷ¤¿¥Ð¥Ã¥Õ¥¡¤ò¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ë¤·¤Þ¤¹¡£ ºÇ¸å¤Ë¡¢insert-buffer-substring¤Ç¤â¤È¤Î¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤«¤é »ØÄꤵ¤ì¤¿¡Ê¤¤¤Þ¤Ï¥«¥ì¥ó¥È¡Ë¥Ð¥Ã¥Õ¥¡¤Ëʸ»úÎó¤ò¥³¥Ô¡¼¤·¤Þ¤¹¡£

ÆâÍÆ¤òÉղä·¤¿¥Ð¥Ã¥Õ¥¡¤¬¤É¤ì¤«¤Î¥¦¥£¥ó¥É¥¦¤Ëɽ¼¨¤µ¤ì¤Æ¤¤¤ë¤È¡¢ ¤Ä¤®¤Ëɽ¼¨¤ò¹¹¿·¤·¤¿¤È¤­¤ËÊѹ¹¤µ¤ì¤¿¥Æ¥­¥¹¥È¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£ ¤½¤ì°Ê³°¤Ç¤Ï¡¢¥¹¥¯¥ê¡¼¥ó¾å¤Ç¤¿¤À¤Á¤Ë¤ÏÊѹ¹¤ò¸«¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥³¥Þ¥ó¥É¤Î¼Â¹ÔÃæ¤Ë¤Ï¥Ð¥Ã¥Õ¥¡¤¬°ì»þŪ¤Ë¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢ ¤½¤ì¤Ë¤è¤ê¤½¤Î¥Ð¥Ã¥Õ¥¡¤¬É½¼¨¤µ¤ì¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£

¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤Ê«Çû¤ò»ý¤ÄÊÑ¿ô¤ò¡Êlet¤ä´Ø¿ô¤Î°ú¿ô¤Ç¡Ë ¥í¡¼¥«¥ë¤Ë«Çû¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢¥í¡¼¥«¥ë¤Ê«Çû¤ÎÍ­¸úÈϰϤγ«»Ï»þ¤È½ªÎ»»þ¤Ë¤Ï¡¢ Ʊ¤¸¥Ð¥Ã¥Õ¥¡¤¬É¬¤º¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ç¤¢¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£ ¤µ¤â¤Ê¤¤¤È¡¢¤¢¤ë¥Ð¥Ã¥Õ¥¡¤Ç¤ÏÊÑ¿ô¤ò«Çû¤·¡¢ Ê̤ΥХåե¡¤Ç¤Ï¤½¤Î«Çû¤ò²ò½ü¤·¤Æ¤·¤Þ¤¦¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ ¤³¤ì¤Ë¤Ï2¤Ä¤ÎÊýË¡¤¬¤¢¤ê¤Þ¤¹¡£ ñ½ã¤Ê¾ì¹ç¤Ë¤Ï¡¢Â«Çû¤ÎÍ­¸úÈÏ°ÏÆâ¤Ç ¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤¬Âؤï¤é¤Ê¤¤¤ò³Îǧ¤·¤Þ¤¹¡£ ¤µ¤â¤Ê¤±¤ì¤Ð¡¢save-current-buffer¤äsave-excursion¤ò»È¤Ã¤Æ¡¢ »Ï¤á¤Ë¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ç¤¢¤Ã¤¿¥Ð¥Ã¥Õ¥¡¤¬¡¢ ÊÑ¿ô«Çû¤¬²ò½ü¤µ¤ì¤ë¤È¤­¤Ë¤Ï¤Ä¤Í¤Ë¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ç¤¢¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£

set-buffer¤Ç¤â¤È¤Î¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ËÌ᤹¤Î¤Ç¤Ï¿®ÍêÀ­¤¬¤¢¤ê¤Þ¤»¤ó¡£ Àµ¤·¤¯¤Ê¤¤¥Ð¥Ã¥Õ¥¡¤¬¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ç¤¢¤ë¤È¤­¤Ë ÃæÃǤ¬µ¯¤­¤ë¤ÈÌ᤻¤Ê¤¤¤«¤é¤Ç¤¹¡£ ¤·¤Æ¤Ï¤¤¤±¤Ê¤¤¤³¤È¤ò¤Ä¤®¤Ë¼¨¤·¤Þ¤¹¡£

(let (buffer-read-only
      (obuf (current-buffer)))
  (set-buffer …)
  …
  (set-buffer obuf))

¤Ä¤®¤Î¤è¤¦¤Ësave-current-buffer¤ò»È¤¨¤Ð¡¢ Ä̾ï¤Îɾ²Á¤Ë²Ã¤¨¤Æ¡¢ÃæÃÇ¡¢¥¨¥é¡¼¡¢throw¤â°·¤¨¤Þ¤¹¡£

(let (buffer-read-only)
  (save-current-buffer
    (set-buffer …)
    …))
Function: current-buffer

¤³¤Î´Ø¿ô¤Ï¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤òÊÖ¤¹¡£

(current-buffer)
     ⇒ #<buffer buffers.texi>
Function: set-buffer buffer-or-name

¤³¤Î´Ø¿ô¤Ï¡¢buffer-or-name¤ò¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ë¤¹¤ë¡£ ¤³¤Î´Ø¿ô¤Ï¸½ºßÁªÂò¤µ¤ì¤Æ¤¤¤ë¥¦¥£¥ó¥É¥¦¤ä¤½¤Î¾¤Î¥¦¥£¥ó¥É¥¦¤Ë Åö³º¥Ð¥Ã¥Õ¥¡¤òɽ¼¨¤·¤Ê¤¤¤Î¤Ç¡¢¥æ¡¼¥¶¡¼¤¬Åö³º¥Ð¥Ã¥Õ¥¡¤ò¸«¤é¤ì¤ë¤È¤Ï¸Â¤é¤Ê¤¤¡£ ¤·¤«¤·¡¢Lisp¥×¥í¥°¥é¥à¤Ï¤¤¤º¤ì¤Ë¤·¤Æ¤âÅö³º¥Ð¥Ã¥Õ¥¡¤òÁàºî¤Ç¤­¤ë¡£

¤³¤Î´Ø¿ô¤Ïbuffer-or-name¤Ç»ØÄꤵ¤ì¤ë¥Ð¥Ã¥Õ¥¡¤òÊÖ¤¹¡£ buffer-or-name¤¬´û¸¤Î¥Ð¥Ã¥Õ¥¡¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¡¢¥¨¥é¡¼¤òÄÌÃΤ¹¤ë¡£

Special Form: save-current-buffer body...

¥Þ¥¯¥ísave-current-buffer¤Ï¡¢ ¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Î¼±Ê̻ҤòÊݸ¤·¡¢¥Õ¥©¡¼¥àbody¤òɾ²Á¤·¡¢ ºÇ¸å¤Ë¤â¤È¤Î¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ËÌ᤹¡£ Ìá¤êÃͤϡ¢body¤ÎºÇ¸å¤Î¥Õ¥©¡¼¥à¤ÎÃͤǤ¢¤ë¡£ throw¤ä¥¨¥é¡¼¡Êsee Nonlocal Exits¡Ë¤Ë¤è¤ë°Û¾ï½ªÎ»¤Ç¤¢¤Ã¤Æ¤â ¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ÏÌᤵ¤ì¤ë¡£

save-current-buffer¤«¤éÈ´¤±¤ë¤È¤­¤Ë¡¢ ¤â¤È¤Î¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤È¤·¤Æ»È¤ï¤ì¤Æ¤¤¤¿¥Ð¥Ã¥Õ¥¡¤¬ºï½ü¤µ¤ì¤Æ¤¤¤ë¤È¡¢ ¤â¤Á¤í¤ó¡¢¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ë¤Ï¤Ê¤é¤Ê¤¤¡£ ¤½¤Î¤«¤ï¤ê¤Ë¡¢È´¤±¤ë¤Þ¤¨¤Ë¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ç¤¢¤Ã¤¿¥Ð¥Ã¥Õ¥¡¤¬ ¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ç¤¢¤ê³¤±¤ë¡£

Macro: with-current-buffer buffer body...

¥Þ¥¯¥íwith-current-buffer¤Ï¡¢ ¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Î¼±Ê̻ҤòÊݸ¤·¡¢ buffer¤ò¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ë¤·¡¢¥Õ¥©¡¼¥àbody¤òɾ²Á¤·¡¢ ºÇ¸å¤Ë¤â¤È¤Î¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ËÌ᤹¡£ Ìá¤êÃͤϡ¢body¤ÎºÇ¸å¤Î¥Õ¥©¡¼¥à¤ÎÃͤǤ¢¤ë¡£ throw¤ä¥¨¥é¡¼¡Êsee Nonlocal Exits¡Ë¤Ë¤è¤ë°Û¾ï½ªÎ»¤Ç¤¢¤Ã¤Æ¤â ¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ÏÌᤵ¤ì¤ë¡£

Macro: with-temp-buffer body...

¥Þ¥¯¥íwith-temp-buffer¤Ï¡¢ °ì»þŪ¤Ê¥Ð¥Ã¥Õ¥¡¤ò¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤È¤·¤Æ ¥Õ¥©¡¼¥àbody¤òɾ²Á¤¹¤ë¡£ ¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Î¼±Ê̻ҤòÊݸ¤·¡¢ °ì»þŪ¤Ê¥Ð¥Ã¥Õ¥¡¤òºîÀ®¤·¤Æ¤½¤ì¤ò¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ë¤·¡¢ ¥Õ¥©¡¼¥àbody¤òɾ²Á¤·¡¢ ºÇ¸å¤Ë¤â¤È¤Î¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ËÌ᤹¤È¤È¤â¤Ë°ì»þŪ¤Ê¥Ð¥Ã¥Õ¥¡¤òºï½ü¤¹¤ë¡£

Ìá¤êÃͤϡ¢body¤ÎºÇ¸å¤Î¥Õ¥©¡¼¥à¤ÎÃͤǤ¢¤ë¡£ ºÇ¸å¤Î¥Õ¥©¡¼¥à¤È¤·¤Æ(buffer-string)¤ò»È¤¨¤Ð¡¢ °ì»þŪ¤Ê¥Ð¥Ã¥Õ¥¡¤ÎÆâÍÆ¤òÊÖ¤»¤ë¡£

throw¤ä¥¨¥é¡¼¡Êsee Nonlocal Exits¡Ë¤Ë¤è¤ë°Û¾ï½ªÎ»¤Ç¤¢¤Ã¤Æ¤â ¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤ÏÌᤵ¤ì¤ë¡£

Writing to Files¤Îwith-temp-file¤â»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£