Next: , Previous: Prefix Command Arguments, Up: Command Loop   [Contents][Index]


20.11 ºÆµ¢ÊÔ½¸

Emacs¤¬Æ°ºî¤ò»Ï¤á¤ë¤È¡¢Emacs¤Î¥³¥Þ¥ó¥É¥ë¡¼¥×¤Ë¼«Æ°Åª¤ËÆþ¤ê¤Þ¤¹¡£ ¤³¤Î¥È¥Ã¥×¥ì¥Ù¥ë¤Î¥³¥Þ¥ó¥É¥ë¡¼¥×¤«¤é¤Ï¤±¤Ã¤·¤ÆÈ´¤±¤ë¤³¤È¤Ï¤Ê¤¯¡¢ Emacs¤¬Æ°¤¤¤Æ¤¤¤ë¸Â¤êưºî¤·Â³¤±¤Þ¤¹¡£ Lisp¥×¥í¥°¥é¥à¤«¤é¥³¥Þ¥ó¥É¥ë¡¼¥×¤òµ¯Æ°¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£ ¤½¤¦¤¹¤ë¤È¡¢³èÀ­¤Ê¥³¥Þ¥ó¥É¥ë¡¼¥×¤¬Ê£¿ôºî¤é¤ì¤ë¤³¤È¤Ë¤Ê¤ë¤Î¤Ç¡¢ ¤½¤ì¤òºÆµ¢ÊÔ½¸¡Êrecursive editing¡Ë¤È¸Æ¤Ó¤Þ¤¹¡£ ºÆµ¢ÊÔ½¸¥ì¥Ù¥ë¤Ë¤Ï¡¢¤½¤ì¤òµ¯Æ°¤·¤¿¥³¥Þ¥ó¥É¤ò°ì»þµÙ»ß¤µ¤»¡¢ Åö³º¥³¥Þ¥ó¥É¤òºÆ³«¤¹¤ë¤Þ¤Ç¥æ¡¼¥¶¡¼¤Ë¤É¤ó¤ÊÊÔ½¸¤Ç¤âµö¤¹¸ú²Ì¤¬¤¢¤ê¤Þ¤¹¡£

ºÆµ¢ÊÔ½¸Ãæ¤ËÍøÍѲÄǽ¤Ê¥³¥Þ¥ó¥É¤Ï¡¢¥È¥Ã¥×¥ì¥Ù¥ë¤Î¥³¥Þ¥ó¥É¥ë¡¼¥×¤È Ʊ¤¸¤â¤Î¤Ç¤¢¤ê¥­¡¼¥Þ¥Ã¥×¤ÇÄêµÁ¤µ¤ì¤Þ¤¹¡£ ºÆµ¢ÊÔ½¸¤òÈ´¤±¤ë¤¿¤á¤Î¿ô¸Ä¤ÎÆÃÊ̤ʥ³¥Þ¥ó¥É¤¬¤¢¤ê¡¢ ´°Î»¤¹¤ë¤ÈºÆµ¢ÊÔ½¸¥ì¥Ù¥ë¤«¤éÈ´¤±¤ëÊ̤Υ³¥Þ¥ó¥É¤â¤¢¤ê¤Þ¤¹¡£ ¡ÊºÆµ¢ÊÔ½¸¤òÈ´¤±¤ë¥³¥Þ¥ó¥É¤Ï¤Ä¤Í¤ËÍøÍѲÄǽ¤Ç¤¢¤ë¤¬¡¢ ºÆµ¢ÊÔ½¸Ãæ¤Ç¤Ê¤¤¤È¤Ê¤Ë¤â¹Ô¤ï¤Ê¤¤¡£¡Ë

ºÆµ¢ÊÔ½¸¤ò´Þ¤à¤¹¤Ù¤Æ¤Î¥³¥Þ¥ó¥É¥ë¡¼¥×¤Ç¤Ï¡¢ ¥³¥Þ¥ó¥É¥ë¡¼¥×¤«¤é¼Â¹Ô¤·¤¿¥³¥Þ¥ó¥É¤Î¥¨¥é¡¼¤Ë¤è¤Ã¤Æ ¥³¥Þ¥ó¥É¥ë¡¼¥×¤«¤éÈ´¤±½Ð¤µ¤Ê¤¤¤è¤¦¤ËÈÆÍÑÌÜŪ¤Î¥¨¥é¡¼¥Ï¥ó¥É¥é¤òÀßÄꤷ¤Þ¤¹¡£

¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ç¤ÎÆþÎϤϡ¢ÆÃÊ̤ʼïÎà¤ÎºÆµ¢ÊÔ½¸¤Ç¤¹¡£ ¤³¤ì¤Ë¤Ï¡¢¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤ä¥ß¥Ë¥Ð¥Ã¥Õ¥¡ÍÑ¥¦¥£¥ó¥É¥¦¤òɽ¼¨¤¹¤ë¤Ê¤É¤ÎÆÃÊÌ¤Ê ½èÍý¤¬¤¢¤ê¤Þ¤¹¤¬¡¢ÆÉ¼Ô¤¬¹Í¤¨¤ë¤è¤ê¤Ï¾¯¤Ê¤¤¤Î¤Ç¤¹¡£ ¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ç¤ÏÆÃÊ̤ʤդë¤Þ¤¤¤ò¤¹¤ë¥­¡¼¤â¤¢¤ê¤Þ¤¹¤¬¡¢ ¤½¤ì¤é¤Ï¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Î¥í¡¼¥«¥ë¥Þ¥Ã¥×¤Ë¤è¤ë¤â¤Î¤Ç¤¹¡£ ¥¦¥£¥ó¥É¥¦¤òÀÚ¤êÂØ¤¨¤ë¤È¡¢Emacs¤ÎÉáÄ̤Υ³¥Þ¥ó¥É¤ò»È¤¨¤Þ¤¹¡£

ºÆµ¢ÊÔ½¸¥ì¥Ù¥ë¤òµ¯Æ°¤¹¤ë¤Ë¤Ï¡¢´Ø¿ôrecursive-edit¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£ ¤³¤Î´Ø¿ô¤Ë¤Ï¥³¥Þ¥ó¥É¥ë¡¼¥×¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¤µ¤é¤Ë¡¢exit¤òȼ¤Ã¤¿catch¤Î¸Æ¤Ó½Ð¤·¤â¤¢¤ê¡¢ ¤³¤ì¤Ë¤è¤ê¡¢exit¤ØÅꤲ¤ë¤³¤È¤Ç ºÆµ¢ÊÔ½¸¥ì¥Ù¥ë¤«¤éÈ´¤±½Ð¤»¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹ ¡Êsee Catch and Throw¡Ë¡£ t°Ê³°¤ÎÃͤòÅꤲ¤ë¤È¡¢recursive-edit¤Ï¡¢ ¸Æ¤Ó½Ð¤·Â¦¤Î´Ø¿ô¤ØÉáÄ̤ËÌá¤ê¤Þ¤¹¡£ ¥³¥Þ¥ó¥ÉC-M-c¡Êexit-recursive-edit¡Ë¤Ï¡¢¤³¤ì¤ò¹Ô¤¤¤Þ¤¹¡£ ÃÍt¤òÅꤲ¤ë¤Èrecursive-edit¤ËÃæÃǤò°ú¤­µ¯¤³¤·¡¢ 1¤Ä¾å¤Î¥ì¥Ù¥ë¤Î¥³¥Þ¥ó¥É¥ë¡¼¥×¤ØÀ©¸æ¤òÌᤷ¤Þ¤¹¡£ ¤³¤ì¤ò¶¯À©½ªÎ»¡Êaborting¡Ë¤È¸Æ¤Ó¡¢ C-]¡Êabort-recursive-edit¡Ë¤Ç¹Ô¤¨¤Þ¤¹¡£

¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤ò»È¤¦¾ì¹ç¤ò½ü¤¤¤Æ¡¢¤Û¤È¤ó¤É¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤Ï ºÆµ¢ÊÔ½¸¤ò»È¤¦¤Ù¤­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ ¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Î¥á¥¸¥ã¡¼¥â¡¼¥É¤ò °ì»þŪ¤ÊÆÃÊ̤ʥ᥸¥ã¡¼¥â¡¼¥É¤ËÊѹ¹¤¹¤ë¤Û¤¦¤¬¡¢ °ìÈ̤ˤϥ桼¥¶¡¼¤Ë¤È¤Ã¤Æ¤è¤êÊØÍø¤Ç¤¹¡£ ¤¿¤À¤·¡¢Åö³º¥á¥¸¥ã¡¼¥â¡¼¥É¤Ë¤Ï¡¢ ¤Þ¤¨¤Î¥â¡¼¥É¤ËÌá¤ë¥³¥Þ¥ó¥É¤òÍѰդ·¤Æ¤ª¤­¤Þ¤¹¡£ ¡Êrmail¤Î¥³¥Þ¥ó¥Ée¤Ï¡¢¤³¤ÎÊý¼°¤ò»È¤Ã¤Æ¤¤¤ë¡£¡Ë ¤¢¤ë¤¤¤Ï¡¢¡ØºÆµ¢Åª¤Ë¡ÙÊÔ½¸¤¹¤ëÊ̤Υƥ­¥¹¥È¤ò¥æ¡¼¥¶¡¼¤ËÍ¿¤¨¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢ ÆÃÊ̤ʥ⡼¥É¤Î¿·¤¿¤Ê¥Ð¥Ã¥Õ¥¡¤òºîÀ®¤·¤Æ¤½¤ì¤òÁªÂò¤·¤Þ¤¹¡£ Åö³º¥â¡¼¥É¤Ë¤Ï¡¢½èÍý¤ò½ª¤¨¤Æ¤Þ¤¨¤Î¥Ð¥Ã¥Õ¥¡¤ËÌá¤ë¥³¥Þ¥ó¥É¤ò ÄêµÁ¤·¤Æ¤ª¤­¤Þ¤¹¡£ ¡Êrmail¤Î¥³¥Þ¥ó¥Ém¤Ï¡¢¤³¤Î¤è¤¦¤Ë¤¹¤ë¡£¡Ë

ºÆµ¢ÊÔ½¸¤Ï¥Ç¥Ð¥Ã¥°¤ËÊØÍø¤Ç¤¹¡£ ¥Ö¥ì¡¼¥¯¥Ý¥¤¥ó¥È¤Î°ì¼ï¤È¤·¤Æ´Ø¿ôÄêµÁ¤Ë debug¤Î¸Æ¤Ó½Ð¤·¤òÁÞÆþ¤·¤Æ¤ª¤¯¤È¡¢ ¤½¤Î²Õ½ê¤Ë㤷¤¿¤È¤­¤Ë¤¤¤í¤¤¤í¤ÈÄ´¤Ù¤é¤ì¤Þ¤¹¡£ debug¤ÏºÆµ¢ÊÔ½¸¤òµ¯Æ°¤·¤Þ¤¹¤¬¡¢¥Ç¥Ð¥Ã¥¬¤È¤·¤Æ¤Îµ¡Ç½¤âÄ󶡤·¤Þ¤¹¡£

query-replace¤ÇC-r¤òÂǤ俤ꡢ C-x q¡Êkbd-macro-query¡Ë¤ò»È¤Ã¤¿¤È¤­¤Ë¤â ºÆµ¢ÊÔ½¸¥ì¥Ù¥ë¤¬»È¤ï¤ì¤Þ¤¹¡£

Function: recursive-edit

¤³¤Î´Ø¿ô¤Ï¥¨¥Ç¥£¥¿¥³¥Þ¥ó¥É¥ë¡¼¥×¤òµ¯Æ°¤¹¤ë¡£ Emacs¤Î½é´ü²½²áÄø¤Ç¼«Æ°Åª¤Ë¸Æ¤Ó½Ð¤µ¤ì¡¢¥æ¡¼¥¶¡¼¤¬ÊÔ½¸¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¡£ Lisp¥×¥í¥°¥é¥à¤«¤é¸Æ¤Ð¤ì¤ë¤È¡¢ºÆµ¢ÊÔ½¸¥ì¥Ù¥ë¤ËÆþ¤ë¡£

°Ê²¼¤ÎÎã¤Ç¤Ï¡¢´Ø¿ôsimple-rec¤Ï¡¢¤Þ¤º1ñ¸ìʬ¥Ý¥¤¥ó¥È¤ò¿Ê¤á¡¢ ¥¨¥³¡¼Îΰè¤Ë¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤ÆºÆµ¢ÊÔ½¸¤ËÆþ¤ë¡£ ¤½¤¦¤¹¤ë¤È¡¢¥æ¡¼¥¶¡¼¤Ï˾¤à¤³¤È¤Ï¤Ê¤ó¤Ç¤â¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¡¢ ¡ÊºÆµ¢ÊÔ½¸¤ò¡ËÈ´¤±¤ë¤¿¤á¤ËC-M-c¤òÂǤĤȡ¢ simple-rec¤Î¼Â¹Ô¤ò·Ñ³¤¹¤ë¡£

(defun simple-rec ()
  (forward-word 1)
  (message "Recursive edit in progress")
  (recursive-edit)
  (forward-word 1))
     ⇒ simple-rec
(simple-rec)
     ⇒ nil
¥³¥Þ¥ó¥É: exit-recursive-edit

¤³¤Î´Ø¿ô¤Ï¡¢¡Ê¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ç¤ÎÆþÎϤò´Þ¤à¡Ë¤â¤Ã¤È¤âÆâ¦¤ÎºÆµ¢ÊÔ½¸¤«¤éÈ´¤±¤ë¡£ ¤½¤Î´Ø¿ôÄêµÁ¤Ï¼Â¼ÁŪ¤Ë¤Ï(throw 'exit nil)¤Ç¤¢¤ë¡£

¥³¥Þ¥ó¥É: abort-recursive-edit

¤³¤Î´Ø¿ô¤Ï¡¢ºÆµ¢ÊÔ½¸¤«¤éÈ´¤±¤¿¤¢¤È¤Çquit¤òÄÌÃΤ¹¤ë¤³¤È¤Ç¡¢ ¡Ê¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ç¤ÎÆþÎϤò´Þ¤à¡Ë¤â¤Ã¤È¤âÆâ¦¤ÎºÆµ¢ÊÔ½¸¤ò Í×ÀÁ¤·¤¿¥³¥Þ¥ó¥É¤ò¶¯À©½ªÎ»¤¹¤ë¡£ ¤½¤Î´Ø¿ôÄêµÁ¤Ï¼Â¼ÁŪ¤Ë¤Ï(throw 'exit t)¤Ç¤¢¤ë¡£ see Quitting¡£

¥³¥Þ¥ó¥É: top-level

¤³¤Î´Ø¿ô¤Ï¡¢¤¹¤Ù¤Æ¤ÎºÆµ¢ÊÔ½¸¤òÈ´¤±¤ë¡£ ¤¹¤Ù¤Æ¤Î·×»»¤òÈ´¤±½Ð¤Æ¥á¥¤¥ó¤Î¥³¥Þ¥ó¥É¥ë¡¼¥×¤ØÄ¾ÀÜÌá¤ë¤¿¤á¡¢ÃͤÏÊÖ¤µ¤Ê¤¤¡£

Function: recursion-depth

¤³¤Î´Ø¿ô¤ÏºÆµ¢ÊÔ½¸¤Î¸½ºß¤Î¿¼¤µ¤òÊÖ¤¹¡£ ³èÀ­¤ÊºÆµ¢ÊÔ½¸¤¬¤Ê¤±¤ì¤Ð0¤òÊÖ¤¹¡£