Next: , Previous: Waiting, Up: Command Loop   [Contents][Index]


20.9 ̾̂

Lisp´Ø¿ô¤¬Æ°ºîÃæ¤ËC-g¤òÂǤĤȡ¢ Emacs¤¬¤Ê¤Ë¤ò¹Ô¤Ã¤Æ¤¤¤Æ¤âÃæÃǤò°ú¤­µ¯¤³¤·¤Þ¤¹¡£ ¤Ä¤Þ¤ê¡¢¤â¤Ã¤È¤âÆâ¦¤Î³èÀ­¤Ê¥³¥Þ¥ó¥É¥ë¡¼¥×¤ËÀ©¸æ¤¬Ìá¤ê¤Þ¤¹¡£

¥³¥Þ¥ó¥É¥ë¡¼¥×¤¬¥­¡¼¥Ü¡¼¥ÉÆþÎϤòÂԤäƤ¤¤ë¤È¤­¤ËC-g¤òÂǤäƤ⡢ ÃæÃǤò°ú¤­µ¯¤³¤µ¤º¤Ë¡¢ÉáÄÌ¤ÎÆþÎÏʸ»ú¤È¤·¤ÆÆ°ºî¤·¤Þ¤¹¡£ ¤â¤Ã¤È¤âñ½ã¤Ê¾ì¹ç¡¢C-g¤Ï¥³¥Þ¥ó¥Ékeyboard-quit¤ò¼Â¹Ô¤·¤Þ¤¹¤¬¡¢ ¤½¤Î¸ú²Ì¤ÏÃæÃǤò°ú¤­µ¯¤³¤¹¤³¤È¤Ç¤¹¤«¤é¡¢ÆÉ¼Ô¤Ë¤Ï¶èÊ̤Ǥ­¤Ê¤¤¤Ï¤º¤Ç¤¹¡£ ¤·¤«¤·¡¢¥×¥ì¥Õ¥£¥Ã¥¯¥¹¥­¡¼¤Ë³¤±¤ÆC-g¤òÂǤĤȡ¢ ¤½¤ì¤é¤ÏÁȤ߹ç¤ï¤µ¤ì¤ÆÌ¤ÄêµÁ¥­¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£ ¤½¤Î¸ú²Ì¤Ï¡¢Á°ÃÖ°ú¿ô¤ò´Þ¤á¤Æ¥×¥ì¥Õ¥£¥Ã¥¯¥¹¥­¡¼¤ò¼è¤ê¾Ã¤·¤Þ¤¹¡£

¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ç¤Ï¡¢C-g¤Ë¤ÏÊ̤ÎÄêµÁ¤¬¤¢¤Ã¤Æ¡¢ ¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤ò¶¯À©½ªÎ»¤µ¤»¤Þ¤¹¡£ ¤Ä¤Þ¤ê¡¢¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤«¤éÈ´¤±½Ð¤ÆÃæÃǤ·¤Þ¤¹¡£ ¡Êñ¤ËÃæÃǤ·¤¿¤Î¤Ç¤Ï¡¢¥ß¥Ë¥Ð¥Ã¥Õ¥¡Æâ¤Ç ¥³¥Þ¥ó¥É¥ë¡¼¥×¤ËÌá¤ë¤À¤±¤Ç¤¢¤ë¡£¡Ë ¥³¥Þ¥ó¥É¥ë¡¼¥×¤ÇÆþÎϤòÆÉ¤ó¤Ç¤¤¤ë¤È¤­¤ËC-g¤ÇľÀÜÃæÃǤ·¤Ê¤¤Íýͳ¤Ï¡¢ ¤³¤Î¤è¤¦¤Ë¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ç¤½¤Î°ÕÌ£¤òºÆÄêµÁ¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ç¤¹¡£ ¥ß¥Ë¥Ð¥Ã¥Õ¥¡¤Ç¤Ï¡¢¥×¥ì¥Õ¥£¥Ã¥¯¥¹¥­¡¼¤Ë³¤¯C-g¤ÏºÆÄêµÁ¤·¤Æ¤Ê¤¯¡¢ ¥×¥ì¥Õ¥£¥Ã¥¯¥¹¥­¡¼¤ÈÁ°ÃÖ°ú¿ô¤ò¼è¤ê¾Ã¤¹¤È¤¤¤¦Ä̾ï¤Î¸ú²Ì¤ò»ý¤Á¤Þ¤¹¡£ C-g¤¬¤Ä¤Í¤ËľÀÜÃæÃǤ¹¤ë¤Î¤Ç¤Ï¡¢¤³¤Î¤è¤¦¤Ë¤¹¤ë¤³¤È¤µ¤¨ÉÔ²Äǽ¤Ç¤¹¡£

C-g¤¬Ä¾ÀܤËÃæÃǤ¹¤ë¤È¤­¤Ë¤Ï¡¢ ÊÑ¿ôquit-flag¤Ët¤òÀßÄꤷ¤Þ¤¹¡£ Emacs¤Ï¤³¤ÎÊÑ¿ô¤òŬÀڤʤȤ­¤Ë¸¡ºº¤·nil¤Ç¤Ê¤¤¤ÈÃæÃǤ·¤Þ¤¹¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢quit-flag¤Ënil°Ê³°¤òÀßÄꤹ¤ë¤È ÃæÃǤò°ú¤­µ¯¤³¤·¤Þ¤¹¡£

C¤Î¥³¡¼¥É¤Î¥ì¥Ù¥ë¤Ç¤Ï¡¢¤É¤³¤Ç¤âÃæÃǤǤ­¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ quit-flag¤ò¸¡ºº¤·¤Æ¤¤¤ëÆÃÊ̤ʲսê¤À¤±¤Ç¤¹¡£ ¤³¤Î¤è¤¦¤Ë¤¹¤ë¤Î¤Ï¡¢¤½¤ì°Ê³°¤Î²Õ½ê¤ÇÃæÃǤ¹¤ë¤È Emacs¤ÎÆâÉô¾õÂÖ¤ËÌ·½â¤ò¤­¤¿¤¹²ÄǽÀ­¤¬¤¢¤ë¤«¤é¤Ç¤¹¡£ ÃæÃǤϰÂÁ´¤Ê¾ì½ê¤Þ¤Ç±ä´ü¤µ¤ì¤ë¤Î¤Ç¡¢ ÃæÃǤˤè¤Ã¤ÆEmcas¤¬¥¯¥é¥Ã¥·¥å¤¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£

read-key-sequence¤äread-quoted-char¤Ê¤É¤Î¤¢¤ë¼ï¤Î´Ø¿ô¤Ï¡¢ ÆþÎϤòÂԤäƤ¤¤ë¾ì¹ç¤Ç¤¢¤Ã¤Æ¤âÃæÃǤò´°Á´¤ËÍÞÀ©¤·¤Þ¤¹¡£ ÃæÃǤ¹¤ë¤«¤ï¤ê¤Ë¡¢C-g¤ÏÆþÎϤȤ·¤ÆÆ¯¤­¤Þ¤¹¡£ read-key-sequence¤Î¾ì¹ç¡¢¥³¥Þ¥ó¥É¥ë¡¼¥×¤Ë¤ª¤¤¤Æ C-g¤ÎÆÃÊ̤ʤդë¤Þ¤¤¤ò¤â¤¿¤é¤·¤Þ¤¹¡£ read-quoted-char¤Î¾ì¹ç¡¢ C-q¤ÇC-g¤ò¥¯¥©¡¼¥È¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

ÊÑ¿ôinhibit-quit¤Ënil°Ê³°¤ÎÃͤò«Çû¤¹¤ë¤³¤È¤Ç Lisp´Ø¿ô¤Î¤¢¤ëÉôʬ¤Ë¤ª¤¤¤ÆÃæÃǤòÍÞÀ©¤Ç¤­¤Þ¤¹¡£ ¤½¤¦¤¹¤ë¤È¡¢C-g¤Ï¤½¤ì¤Ç¤â¤¤¤Ä¤â¤É¤ª¤ê quit-flag¤òt¤Ë¤·¤Þ¤¹¤¬¡¢ ¤½¤ÎÄ̾ï¤Î·ë²Ì¤Ç¤¢¤ëÃæÃǤÏÍÞÀ©¤µ¤ì¤Þ¤¹¡£ ºÇ½ªÅª¤Ë¥Õ¥©¡¼¥àlet¤Î½ª¤ê¤Ç«Çû¤¬²ò½ü¤µ¤ì¤ë¤Ê¤É¤·¤Æ inhibit-quit¤¬ºÆÅÙnil¤Ë¤Ê¤ê¤Þ¤¹¡£ ¤½¤Î»þÅÀ¤Ç¤âquit-flag¤¬nil°Ê³°¤Ç¤¢¤ë¤È Í׵ᤷ¤¿ÃæÃǤ¬¤¿¤À¤Á¤Ëµ¯¤³¤ê¤Þ¤¹¡£ ¤³¤Î¤Õ¤ë¤Þ¤¤¤Ï¡¢¥×¥í¥°¥é¥à¤Î¡ØÎ׳¦Îΰè¡Ù¤Ç¤Ï ÃæÃǤ¬µ¯¤³¤é¤Ê¤¤¤³¤È¤òÊݾڤ¹¤ëÍýÁÛŪ¤Ê¤â¤Î¤Ç¤¹¡£

¡Êread-quoted-char¤Ê¤É¤Î¡Ë¤¢¤ë¼ï¤Î´Ø¿ô¤Ç¤Ï¡¢ C-g¤ÏÆÃÊ̤˽èÍý¤µ¤ìÃæÃǤò°ú¤­µ¯¤³¤·¤Þ¤»¤ó¡£ inhibit-quit¤Ët¤ò«Çû¤·¤ÆÆþÎϤòÆÉ¤ß¼è¤ê¡¢ inhibit-quit¤¬ºÆÅÙnil¤Ë¤Ê¤ë¤Þ¤¨¤Ë quit-flag¤ònil¤Ë¤¹¤ë¤³¤È¤Ç¤½¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£ ¤³¤ì¤òread-quoted-char¤ÎÄêµÁ¤Î°Ê²¼¤ÎÈ´¿è¤Ç¼¨¤·¤Þ¤·¤ç¤¦¡£ ºÇ½é¤ÎÆþÎÏʸ»ú¤Î¤¢¤È¤ÇÄ̾ï¤ÎÃæÃǤòµö¤¹ÊýË¡¤â¼¨¤·¤Æ¤¤¤Þ¤¹¡£

(defun read-quoted-char (&optional prompt)
  "…documentation…"
  (let ((message-log-max nil) done (first t) (code 0) char)
    (while (not done)
      (let ((inhibit-quit first)
            …)
	(and prompt (message "%s-" prompt))
	(setq char (read-event))
	(if inhibit-quit (setq quit-flag nil)))
      …ÊÑ¿ôcode¤ËÀßÄꤹ¤ë…)
    code))
Variable: quit-flag

inhibit-quit¤¬nil¤Ç¤¢¤ì¤Ð¡¢ ¤³¤ÎÊÑ¿ô¤¬nil°Ê³°¤Ç¤¢¤ë¤ÈEmacs¤Ï¤¿¤À¤Á¤ËÃæÃǤ¹¤ë¡£ C-g¤Ï¡¢inhibit-quit¤Ë´Ø¤ï¤é¤º¡¢ Ä̾quit-flag¤Ënil°Ê³°¤òÀßÄꤹ¤ë¡£

Variable: inhibit-quit

¤³¤ÎÊÑ¿ô¤Ï¡¢quit-flag¤¬nil°Ê³°¤ÎÃͤËÀßÄꤵ¤ì¤¿¤È¤­¤Ë Emacs¤¬ÃæÃǤ¹¤Ù¤­¤«¤É¤¦¤«¤ò·èÄꤹ¤ë¡£ inhibit-quit¤¬nil°Ê³°¤Ç¤¢¤ë¤È¡¢ quit-flag¤ËÆÃÊ̤ʰÕÌ£¤Ï¤Ê¤¤¡£

¥³¥Þ¥ó¥É: keyboard-quit

¤³¤Î´Ø¿ô¤Ï(signal 'quit nil)¤Çquit¾ò·ï¤òÄÌÃΤ¹¤ë¡£ ¤³¤ì¤ÏÃæÃÇ¤ÈÆ±¤¸¤³¤È¤ò¹Ô¤¦¡£ ¡ÊErrors¤Îsignal¤ò»²¾È¡£¡Ë

ÃæÃǤȤ·¤Æ»È¤¦C-g°Ê³°¤ÎÆÃ¼ìʸ»ú¤ò»È¤¨¤Þ¤¹¡£ Terminal Input¤Î´Ø¿ôset-input-mode¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£