Previous: Font Lock Mode, Up: Modes   [Contents][Index]


22.6 ¥Õ¥Ã¥¯

¥Õ¥Ã¥¯¡Êhook¡Ë¤È¤Ï¡¢´û¸¤Î¥×¥í¥°¥é¥à¤«¤éÆÃÄê¤Î¾ìÌÌ¤Ç ¸Æ¤Ó½Ð¤µ¤ì¤ë¡Ê1¤Ä¤«°ìÏ¢¤Î¡Ë´Ø¿ô¤ò¼ý¤á¤¿ÊÑ¿ô¤Ç¤¹¡£ Emacs¤Ï¡¢¥«¥¹¥¿¥Þ¥¤¥º¤Î¤¿¤á¤Ë¥Õ¥Ã¥¯¤òÍѰդ·¤Æ¤¤¤Þ¤¹¡£ ¤Û¤È¤ó¤É¤Î¾ì¹ç¡¢¥Õ¥Ã¥¯¤Ï¥Õ¥¡¥¤¥ë.emacs¤ÇÀßÄꤷ¤Þ¤¹¤¬¡¢ Lisp¥×¥í¥°¥é¥à¤¬¹Ô¤Ã¤Æ¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£ ɸ½à¤Î¥Õ¥Ã¥¯´Ø¿ô°ìÍ÷¤Ë¤Ä¤¤¤Æ¤Ï¡¢See Standard Hooks¡£

Emacs¤Î¿¤¯¤Î¥Õ¥Ã¥¯¤Ï¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¡Ênormal hook¡Ë¤Ç¤¹¡£ ¤³¤ì¤é¤ÎÊÑ¿ô¤Ï¡¢°ú¿ô¤Ê¤·¤Ç¸Æ¤Ó½Ð¤µ¤ì¤ë´Ø¿ô¤Î¥ê¥¹¥È¤òÊÝ»ý¤·¤Æ¤¤¤Þ¤¹¡£ ¥Õ¥Ã¥¯Ì¾¤¬‘-hook’¤Ç½ª¤Ã¤Æ¤¤¤ë¤È¡¢¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤ò°ÕÌ£¤·¤Þ¤¹¡£ ÆÉ¼Ô¤¬¤½¤ì¤é¤òñ°ì¤ÎÊýË¡¤Ç»È¤¨¤ë¤è¤¦¤Ë¡¢ ²Äǽ¤Ê¸Â¤ê¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤Ë¤¹¤ë¤è¤¦¤Ë¿´³Ý¤±¤Æ¤¤¤Þ¤¹¡£

³Æ¥á¥¸¥ã¡¼¥â¡¼¥É´Ø¿ô¤Ï¡¢ ¤½¤Î½é´ü²½¤ÎºÇ½ªÃʳ¬¤Ç¥â¡¼¥É¥Õ¥Ã¥¯¡Êmode hook¡Ë¤È¸Æ¤Ð¤ì¤ë ¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤ò¼Â¹Ô¤¹¤ë¤È´üÂÔ¤µ¤ì¤Þ¤¹¡£ ¤³¤ì¤Ë¤è¤ê¡¢¥â¡¼¥É¤¬¤¹¤Ç¤ËÀßÄꤷ¤¿¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤ÊÊÑ¿ô¤ò¾å½ñ¤­¤¹¤ë¤³¤È¤Ç¡¢ ¥æ¡¼¥¶¡¼¤¬¥â¡¼¥É¤Î¤Õ¤ë¤Þ¤¤¤ò¥«¥¹¥¿¥Þ¥¤¥º¤·¤ä¤¹¤¯¤·¤Æ¤¤¤Þ¤¹¡£ ¤·¤«¤·¡¢¥Õ¥Ã¥¯¤ÏÊ̤ξìÌ̤Ǥâ»È¤ï¤ì¤Æ¤¤¤Þ¤¹¡£ ¤¿¤È¤¨¤Ð¡¢¥Õ¥Ã¥¯suspend-hook¤Ï¡¢ Emacs¤¬¼«¿È¤ò°ì»þµÙ»ß¤¹¤ëľÁ°¤Ë¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ ¡Êsee Suspending Emacs¡Ë¡£

¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤Ë¥Õ¥Ã¥¯´Ø¿ô¤òÄɲ乤ë¿ä¾©ÊýË¡¤Ï¡¢ add-hook¡Ê²¼µ­»²¾È¡Ë¤ò¸Æ¤Ö¤³¤È¤Ç¤¹¡£ ¥Õ¥Ã¥¯´Ø¿ô¤Ï¡¢funcall¡Êsee What Is a Function¡Ë¤¬ ¼õ¤±ÉÕ¤±¤ë¤Ê¤é¤Ð¤É¤ó¤Ê¼ïÎà¤Î´Ø¿ô¤Ç¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£ ¤Û¤È¤ó¤É¤Î¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯ÊÑ¿ô¤ÏºÇ½é¤Ï¶õ¤Ç¤¹¤¬¡¢ add-hook¤Ï¤½¤Î°·¤¤Êý¤òÃΤäƤ¤¤Þ¤¹¡£

¥Õ¥Ã¥¯ÊÑ¿ô¤Î̾Á°¤¬‘-hook’¤Ç½ª¤é¤Ê¤¤¾ì¹ç¡¢ ¤½¤ì¤¬¥¢¥Ö¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¡Êabnormal hook¡Ë¤Ç¤¢¤ë¤³¤È¤òɽ¤·¤Þ¤¹¡£ ÆÉ¼Ô¤Ï¡¢¤½¤Î¤è¤¦¤Ê¥Õ¥Ã¥¯¤ÎÀµ¤·¤¤»È¤¤Êý¤òÀâÌÀ½ñ¤ÇÄ´¤Ù¤ë¤Ù¤­¤Ç¤¹¡£

ÊÑ¿ô̾¤¬‘-functions’¤ä‘-hooks’¤Ç½ª¤Ã¤Æ¤¤¤ë¤È¡¢ ¤½¤ÎÃͤϴؿô¤Î¥ê¥¹¥È¤Ç¤¹¤¬¡¢ ¤½¤ì¤é¤Î´Ø¿ô¤ò°ú¿ô¤¢¤ê¤Ç¸Æ¤Ó½Ð¤·¤¿¤ê¡¢ ´Ø¿ô¤ÎÌá¤êÃͤò¤É¤³¤«¤Ç»È¤¦¤È¤¤¤¦°ÕÌ£¤Ç¥¢¥Ö¥Î¡¼¥Þ¥ë¡Ê°Û¾ï¡Ë¤Ê¤Î¤Ç¤¹¡£ ¥ê¥¹¥È¤Ë´Ø¿ô¤òÄɲ乤ë¤Ë¤Ïadd-hook¤ò»È¤¨¤Þ¤¹¤¬¡¢ ´Ø¿ô¤ò½ñ¤¯¤È¤­¤Ë¤ÏÃí°Õ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¡Ê¤³¤ì¤é¤ÎÊÑ¿ô¤Î¤¦¤Á¡¢¼ÂºÝ¤Ë¤Ï¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤Ç¤¢¤ë¤â¤Î¤â¤¢¤ë¡£ ¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤Ë¤Ï‘-hook’¤ò»È¤¦¤È¤¤¤¦´·½¬¤ò ³ÎΩ¤¹¤ë¤Þ¤¨¤Ë̿̾¤·¤¿¤â¤Î¤Ç¤¢¤ë¡£¡Ë

ÊÑ¿ô̾¤¬‘-function’¤Ç½ª¤Ã¤Æ¤¤¤ë¤È¡¢ ¤½¤ÎÃͤϡ¢´Ø¿ô¤Î¥ê¥¹¥È¤Ç¤Ï¤Ê¤¯¡¢1¤Ä¤Î´Ø¿ô¤Ç¤¹¡£

lispÂÐÏå⡼¥É¤Ç¼«Æ°µÍ¤á¹þ¤ß¡Êauto-fill¡Ë¥â¡¼¥É¤ò¥ª¥ó¤Ë¤¹¤ë¤¿¤á¤Ë ¥â¡¼¥É¥Õ¥Ã¥¯¤ò»È¤Ã¤¿Îã¤ò¼¨¤·¤Þ¤¹¡£

(add-hook 'lisp-interaction-mode-hook 'turn-on-auto-fill)

ŬÅö¤Ê»þ´ü¤Ë¡¢Emacs¤Ï´Ø¿ôrun-hooks¤ò»È¤Ã¤Æ ÆÃÄê¤Î¥Õ¥Ã¥¯¤ò¼Â¹Ô¤·¤Þ¤¹¡£ ¤³¤Î´Ø¿ô¤Ï¡¢add-hook¤ÇÄɲ䵤줿¥Õ¥Ã¥¯´Ø¿ô¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£

Function: run-hooks &rest hookvar

¤³¤Î´Ø¿ô¤ÏÊ£¿ô¸Ä¤Î¥Õ¥Ã¥¯ÊÑ¿ô̾¤ò°ú¿ô¤Ë¤È¤ê¡¢³Æ¥Õ¥Ã¥¯¤ò½ç¤Ë¼Â¹Ô¤¹¤ë¡£ ³Æ°ú¿ôhookvar¤Ï¡¢¥Õ¥Ã¥¯ÊÑ¿ô¤Î¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¤³¤È¡£ ¤³¤ì¤é¤Î°ú¿ô¤Ï¡¢»ØÄꤵ¤ì¤¿½ç¤Ë½èÍý¤µ¤ì¤ë¡£

¥Õ¥Ã¥¯ÊÑ¿ô¤¬nil°Ê³°¤ÎÃͤǤ¢¤ë¤È¡¢ ¤½¤ÎÃͤϡ¢´Ø¿ô¤«´Ø¿ô¤Î¥ê¥¹¥È¤Ç¤¢¤ë¡£ Ãͤ¬´Ø¿ô¡Ê¥é¥à¥À¼°¤ä´Ø¿ôÄêµÁ¤ò»ý¤Ä¥·¥ó¥Ü¥ë¡Ë¤Ç¤¢¤ë¤È¡¢¤½¤ì¤ò¸Æ¤Ó½Ð¤¹¡£ Ãͤ¬¥ê¥¹¥È¤Ç¤¢¤ë¤È¡¢½çÈ֤ˤ½¤ÎÍ×ÁǤò¸Æ¤Ó½Ð¤¹¡£ ¥Õ¥Ã¥¯´Ø¿ô¤Ï¡¢°ú¿ô¤Ê¤·¤Ç¸Æ¤Ó½Ð¤µ¤ì¤ë¡£ ¸½ºß¡¢¥Õ¥Ã¥¯ÊÑ¿ô¤Ë1¤Ä¤Î´Ø¿ô¤òÆþ¤ì¤ë¤³¤È¤ÏÇѤ줫¤±¤Æ¤¤¤ë¡£ ¤Ä¤Í¤Ë´Ø¿ô¤Î¥ê¥¹¥È¤ò»È¤¦¤Ù¤­¤Ç¤¢¤ë¡£

Îã¤È¤·¤Æ¡¢emacs-lisp-mode¤¬¤½¤Î¥â¡¼¥É¥Õ¥Ã¥¯¤ò¤É¤Î¤è¤¦¤Ë ¼Â¹Ô¤¹¤ë¤«¤ò¼¨¤¹¡£

(run-hooks 'emacs-lisp-mode-hook)
Function: run-hook-with-args hook &rest args

¤³¤Î´Ø¿ô¤Ï¡¢¥Õ¥Ã¥¯´Ø¿ô¤Ë°ú¿ô¤òÅϤ¹¥¢¥Ö¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤ò¼Â¹Ô¤¹¤ëÊýË¡¤Ç¤¢¤ë¡£ ³Æ¥Õ¥Ã¥¯´Ø¿ô¤Ë°ú¿ôargs¤òÅϤ·¤Æ¸Æ¤Ó½Ð¤¹¡£

Function: run-hook-with-args-until-failure hook &rest args

¤³¤Î´Ø¿ô¤Ï¡¢¥Õ¥Ã¥¯´Ø¿ô¤Ë°ú¿ô¤òÅϤ¹¥¢¥Ö¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤ò¼Â¹Ô¤¹¤ë¤¬¡¢ ¥Õ¥Ã¥¯´Ø¿ô¤¬¼ºÇÔ¤¹¤ë¤È¤¿¤À¤Á¤Ë»ß¤á¤ëÊýË¡¤Ç¤¢¤ë¡£ ¥Õ¥Ã¥¯´Ø¿ô¤¬nil¤òÊÖ¤¹¤Þ¤Ç¡¢ ³Æ¥Õ¥Ã¥¯´Ø¿ô¤Ë°ú¿ôargs¤òÅϤ·¤Æ¸Æ¤Ó½Ð¤¹¡£ nil¤¬Ê֤äƤ¯¤ë¤Ènil¤ÇÌá¤ë¡£ ¤µ¤â¤Ê¤±¤ì¤Ð¡¢nil°Ê³°¤ÎÃͤòÊÖ¤¹¡£

Function: run-hook-with-args-until-success hook &rest args

¤³¤Î´Ø¿ô¤Ï¡¢¥Õ¥Ã¥¯´Ø¿ô¤Ë°ú¿ô¤òÅϤ¹¥¢¥Ö¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤ò¼Â¹Ô¤¹¤ë¤¬¡¢ ¥Õ¥Ã¥¯´Ø¿ô¤¬À®¸ù¤¹¤ë¤È¤¿¤À¤Á¤Ë»ß¤á¤ëÊýË¡¤Ç¤¢¤ë¡£ ¥Õ¥Ã¥¯´Ø¿ô¤¬nil°Ê³°¤òÊÖ¤¹¤Þ¤Ç¡¢ ³Æ¥Õ¥Ã¥¯´Ø¿ô¤Ë°ú¿ôargs¤òÅϤ·¤Æ¸Æ¤Ó½Ð¤¹¡£ nil°Ê³°¤¬Ê֤äƤ¯¤ë¤È ºÇ¸å¤Ë¸Æ¤Ó½Ð¤·¤¿¥Õ¥Ã¥¯´Ø¿ô¤ÎÌá¤êÃͤòÊÖ¤¹¡£

Function: add-hook hook function &optional append local

¤³¤Î´Ø¿ô¤Ï¥Õ¥Ã¥¯ÊÑ¿ôhook¤Ë´Ø¿ôfunction¤òÄɲä¹¤ë ¼ê·Ú¤ÊÊýË¡¤Ç¤¢¤ë¡£ °ú¿ôfunction¤Ï¡¢Àµ¤·¤¤¸Ä¿ô¤Î°ú¿ô¤ò¤È¤ëǤ°Õ¤ÎÀµ¤·¤¤Lisp´Ø¿ô¤Ç¤¢¤ë¤³¤È¡£ ¤¿¤È¤¨¤Ð¡¢

(add-hook 'text-mode-hook 'my-text-hook-function)

¤Ï¡¢text-mode-hook¤È¤¤¤¦¥Õ¥Ã¥¯¤Ë my-text-hook-function¤òÄɲ乤롣

add-hook¤Ï¡¢¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤Ë²Ã¤¨¤Æ¥¢¥Ö¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤Ë¤â»È¤¨¤ë¡£

¥Õ¥Ã¥¯´Ø¿ô¤Ï¼Â¹Ô½ç½ø¤Ë°Í¸¤·¤Ê¤¤¤è¤¦¤ËÀ߷פ¹¤ë¤Î¤¬ºÇÎɤǤ¢¤ë¡£ ¼Â¹Ô½ç½ø¤Ë°Í¸¤¹¤ë¤È¡Ø¥È¥é¥Ö¥ë¤ò¸Æ¤Ó¹þ¤à¡Ù¤è¤¦¤Ê¤â¤Î¤Ç¤¢¤ë¡£ ¤·¤«¤·¡¢½ç½ø¤Ïͽ¬¤Ç¤­¤ë¡£ Ä̾function¤Ï¥Õ¥Ã¥¯¥ê¥¹¥È¤ÎÀèÆ¬¤ËÃÖ¤«¤ì¤ë¤Î¤Ç¡¢ ¡Ê¤Û¤«¤Ëadd-hook¤Î¸Æ¤Ó½Ð¤·¤¬¤Ê¤±¤ì¤Ð¡ËºÇ½é¤Ë¼Â¹Ô¤µ¤ì¤ë¡£ ¾Êά²Äǽ¤Ê°ú¿ôappend¤¬nil°Ê³°¤Ç¤¢¤ë¤È¡¢ ¿·¤¿¤Ê¥Õ¥Ã¥¯´Ø¿ô¤Ï¥Õ¥Ã¥¯¥ê¥¹¥È¤ÎËöÈø¤ËÃÖ¤«¤ì¡¢ ºÇ¸å¤Ë¼Â¹Ô¤µ¤ì¤ë¡£

local¤¬nil°Ê³°¤Ç¤¢¤ë¤È¡¢ ¿·¤¿¤Ê¥Õ¥Ã¥¯´Ø¿ô¤ò¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ë¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤Ë¤¹¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£ ¤³¤ì¤ò¹Ô¤¦¤Þ¤¨¤Ë¡¢¡Êmake-local-variable¤Ç¤Ï¤Ê¤¯¡Ë make-local-hook¤ò¸Æ¤ó¤Ç ¥Õ¥Ã¥¯¼«¿È¤ò¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤Ë¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ë¡£ ¥Õ¥Ã¥¯¼«¿È¤¬¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤Ç¤Ê¤¤¤È¡¢local¤ÎÃͤϰÕÌ£¤ò»ý¤¿¤Ê¤¤¡£ ¥Õ¥Ã¥¯´Ø¿ô¤Ï¤Ä¤Í¤Ë¥°¥í¡¼¥Ð¥ë¤Ç¤¢¤ë¡£

Function: remove-hook hook function &optional local

¤³¤Î´Ø¿ô¤Ï¡¢¥Õ¥Ã¥¯ÊÑ¿ôhook¤«¤éfunction¤ò¼è¤ê½ü¤¯¡£

local¤¬nil°Ê³°¤Ç¤¢¤ë¤È¡¢ ¥°¥í¡¼¥Ð¥ë¤Ê¥Õ¥Ã¥¯¥ê¥¹¥È¤Ç¤Ï¤Ê¤¯¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤Ê¥Õ¥Ã¥¯¥ê¥¹¥È¤«¤é function¤òºï½ü¤¹¤ë¤³¤È¤ò»ØÄꤹ¤ë¡£ ¥Õ¥Ã¥¯ÊÑ¿ô¼«¿È¤¬¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤Ç¤Ê¤¤¤È¡¢local¤ÎÃͤϰÕÌ£¤ò»ý¤¿¤Ê¤¤¡£

Function: make-local-hook hook

¤³¤Î´Ø¿ô¤Ï¡¢¥Õ¥Ã¥¯ÊÑ¿ôhook¤ò¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ë¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤Ë¤¹¤ë¡£ ¥Õ¥Ã¥¯ÊÑ¿ô¤¬¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤Ç¤¢¤ë¤È¡¢ ¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤Ê¥Õ¥Ã¥¯´Ø¿ô¤È¥°¥í¡¼¥Ð¥ë¤Ê¥Õ¥Ã¥¯´Ø¿ô¤ò»ý¤Ä¤³¤È¤¬¤Ç¤­¡¢ run-hooks¤Ï¤½¤ì¤é¤¹¤Ù¤Æ¤ò¼Â¹Ô¤¹¤ë¡£

¤³¤Î´Ø¿ô¤Ï¡¢¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤ÊÃͤÎÍ×ÁǤòt¤Ë¤¹¤ë¤³¤È¤Çưºî¤¹¤ë¡£ ¤³¤ì¤Ï¡¢¥Ð¥Ã¥Õ¥¡¥í¡¼¥«¥ë¤ÊÃͤ˲䨤ƥեå¯ÊÑ¿ô¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤˤ¢¤ë ¥Õ¥Ã¥¯´Ø¿ô¤ò»È¤¦¤³¤È¤òɽ¤¹¥Õ¥é¥°¤Ç¤¢¤ë¡£ run-hooks¤Ï¤³¤Î¥Õ¥é¥°¤òÍý²ò¤·¡¢ make-local-hook¤Ï¤¹¤Ù¤Æ¤Î¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤ò½èÍý¤Ç¤­¤ë¡£ ¥¢¥Ö¥Î¡¼¥Þ¥ë¥Õ¥Ã¥¯¤Ë´Ø¤·¤Æ¤Ï¡¢ t¤Î°ÕÌ£¤òÍý²ò¤¹¤ë¤è¤¦¤Ë¹¹¿·¤·¤¿¤â¤Î¤À¤±¤¬½èÍý¤Ç¤­¤ë¡£

¥Õ¥Ã¥¯ÊÑ¿ô¤ËÂФ·¤Æmake-local-variable¤òľÀܻȤï¤Ê¤¤¤³¤È¡£ ¤½¤ì¤À¤±¤Ç¤ÏÉÔ½½Ê¬¤Ç¤¢¤ë¡£