Next: , Previous: Create/Delete Dirs, Up: Files   [Contents][Index]


24.11 ¥Õ¥¡¥¤¥ë̾¤ò¡Ø¥Þ¥¸¥Ã¥¯¡Ù¤Ë¤¹¤ë

ÆÃÄê¤Î¥Õ¥¡¥¤¥ë̾¤òÆÃÊ̤˰·¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¤³¤ì¤ò¤½¤ì¤é¤Î̾Á°¤ò¥Þ¥¸¥Ã¥¯¡Êmagic¡Ë¤Ë¤¹¤ë¤È¤¤¤¤¤Þ¤¹¡£ ¤³¤Îµ¡Ç½¤Î¼ç¤ÊÍÑÅӤϥê¥â¡¼¥È¥Õ¥¡¥¤¥ë̾ ¡Êsee ¥ê¥â¡¼¥È¥Õ¥¡¥¤¥ë in GNU Emacs ¥Þ¥Ë¥å¥¢¥ë¡Ë ¤ò¼ÂÁõ¤¹¤ë¤³¤È¤Ç¤¹¡£

¥Þ¥¸¥Ã¥¯¥Õ¥¡¥¤¥ë̾¤Î¼ïÎà¤òÄêµÁ¤¹¤ë¤Ë¤Ï¡¢ ̾Á°¤Î¥¯¥é¥¹¡ÊÀµµ¬É½¸½¤Ë°ìÃפ¹¤ë¤â¤Î¤¹¤Ù¤Æ¡Ë¤òÄêµÁ¤¹¤ëÀµµ¬É½¸½¤È¡¢ ¤½¤ì¤Ë°ìÃפ¹¤ë¥Õ¥¡¥¤¥ë¤ËÂФ¹¤ë Emacs¤Î´ðËÜ¥Õ¥¡¥¤¥ëÁàºî¤ò¼ÂÁõ¤¹¤ë¥Ï¥ó¥É¥é¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

ÊÑ¿ôfile-name-handler-alist¤Ï¡¢ ¥Ï¥ó¥É¥é¤ÈÅö³º¥Ï¥ó¥É¥é¤ÎŬÍѤò·èÄꤹ¤ëÀµµ¬É½¸½¤«¤é¤Ê¤ë¥ê¥¹¥È¤òÊÝ»ý¤·¤Þ¤¹¡£ ³ÆÍ×ÁǤηÁ¤Ï¤Ä¤®¤Î¤È¤ª¤ê¤Ç¤¹¡£

(regexp . handler)

Emacs¤Î¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ëÁàºî´ðËÜ´Ø¿ô¤È¥Õ¥¡¥¤¥ë̾ÊÑ´¹´ðËÜ´Ø¿ô¤Ï¡¢ »ØÄꤵ¤ì¤¿Ì¾Á°¤òfile-name-handler-alist¤ËÂФ·¤Æ¸¡ºº¤·¤Þ¤¹¡£ ¥Õ¥¡¥¤¥ë̾¤¬regexp¤Ë°ìÃפ¹¤ë¤È¡¢ ´ðËÜ´Ø¿ô¤Ïhandler¤ò¸Æ¤Ó½Ð¤·¤ÆÅö³º¥Õ¥¡¥¤¥ë¤ò½èÍý¤·¤Þ¤¹¡£

handler¤ËÍ¿¤¨¤ëºÇ½é¤Î°ú¿ô¤Ï´ðËÜ´Ø¿ô¤Î̾Á°¤Ç¤¹¡£ »Ä¤ê¤Î°ú¿ô¤ÏÅö³ºÁàºî¤ËÅϤµ¤ì¤ë¤Ù¤­°ú¿ô¤Ç¤¹¡£ ¡Ê¤½¤ì¤é¤Î°ú¿ô¤ÎºÇ½é¤Î¤â¤Î¤Ïŵ·¿Åª¤Ë¤Ï¥Õ¥¡¥¤¥ë̾¼«¿È¤Ç¤¢¤ë¡£¡Ë ¤¿¤È¤¨¤Ð¡¢¤Ä¤®¤Î¤è¤¦¤Ë¤·¤¿¾ì¹ç¡¢

(file-exists-p filename)

filename¤Ë¥Ï¥ó¥É¥éhandler¤¬¤¢¤ë¤È¡¢ handler¤Ï¤Ä¤®¤Î¤è¤¦¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£

(funcall handler 'file-exists-p filename)

¤Ä¤®¤Ï¡¢¥Þ¥¸¥Ã¥¯¥Õ¥¡¥¤¥ë̾¤Î¥Ï¥ó¥É¥é¤¬½èÍý¤¹¤Ù¤­Áàºî¤Ç¤¹¡£

insert-file-contents¤ËÂФ¹¤ë¥Ï¥ó¥É¥é¤Ï¡¢ °ú¿ôvisit¤¬nil°Ê³°¤Ç¤¢¤ë¤È¤­¤Ë¤Ï (set-buffer-modified-p nil)¤ò»È¤Ã¤Æ ¥Ð¥Ã¥Õ¥¡¤ÎÊѹ¹¥Õ¥é¥°¤ò¥¯¥ê¥¢¤¹¤ëɬÍפ¬Åµ·¿Åª¤Ë¤Ï¤¢¤ê¤Þ¤¹¡£

¥Ï¥ó¥É¥é´Ø¿ô¤Ï¡¢¾å¤Î¤¹¤Ù¤Æ¤ÎÁàºî¡¢¤Ê¤é¤Ó¤Ë¡¢ ¾­ÍèÄɲ䵤ì¤ë¤â¤Î¤ò°·¤¨¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¤³¤ì¤é¤ÎÁàºî¤¹¤Ù¤Æ¤ò¥Ï¥ó¥É¥é¼«¿È¤Ç¼ÂÁõ¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£ ÆÃÄê¤ÎÁàºî¤Ë¤Ä¤¤¤ÆÆÃÊ̤ʤ³¤È¤ò¹Ô¤¦É¬Íפ¬¤Ê¤±¤ì¤Ð¡¢ ¡ØÄ̾ï¤É¤ª¤ê¤Ë¡ÙÁàºî¤ò½èÍý¤¹¤ë¤¿¤á¤Ë´ðËÜ´Ø¿ô¤òºÆµ¯Æ°¤Ç¤­¤Þ¤¹¡£ ¥Ï¥ó¥É¥é¤¬Ç§¼±¤Ç¤­¤Ê¤¤Áàºî¤Ë¤Ä¤¤¤Æ¤Ï¡¢ ´ðËÜ´Ø¿ô¤òºÆµ¯Æ°¤¹¤ë¤Ù¤­¤Ç¤¹¡£ 1¤Ä¤ÎÊýË¡¤Ï¤Ä¤®¤Î¤È¤ª¤ê¤Ç¤¹¡£

(defun my-file-handler (operation &rest args)
  ;; ¤Þ¤º¡¢ÆÃÊ̤˰·¤¦É¬Íפ¬¤¢¤ëÁàºî¤«¤É¤¦¤«¸¡ºº¤¹¤ë
  (cond ((eq operation 'insert-file-contents) …)
        ((eq operation 'write-region) …)
        …
        ;; ÃΤé¤Ê¤¤Áàºî¤ò°·¤¦
        (t (let ((inhibit-file-name-handlers
                  (cons 'my-file-handler 
                        (and (eq inhibit-file-name-operation operation)
                             inhibit-file-name-handlers)))
                 (inhibit-file-name-operation operation))
             (apply operation args)))))

¥Ï¥ó¥É¥é´Ø¿ô¤Ç¡¢»ØÄꤵ¤ì¤¿Áàºî¤Ë¤Ä¤¤¤Æ¤ÏEmacs¤ÎÄ̾ï¤Î´ðËÜ´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹¤È ·èÄꤷ¤¿¤È¤­¤Ë¤Ï¡¢´ðËÜ´Ø¿ô¤«¤éƱ¤¸¥Ï¥ó¥É¥é¤¬ºÆÅÙ¸Æ¤Ð¤ì¤Æ ̵¸ÂºÆµ¢¤Ë¤Ê¤ë¤³¤È¤òËɤ°É¬Íפ¬¤¢¤ê¤Þ¤¹¡£ ¾å¤ÎÎã¤Ï¡¢ÊÑ¿ôinhibit-file-name-handlers¤È inhibit-file-name-operation¤ò»È¤Ã¤Æ¤³¤ì¤ò¹Ô¤¦ÊýË¡¤ò¼¨¤¹¤â¤Î¤Ç¤¹¡£ ¤½¤ì¤é¤ò¾å¤Ë¼¨¤·¤¿¤È¤ª¤ê¤Ë»È¤¦¤è¤¦¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£ Ê£¿ô¤Î¥Ï¥ó¥É¥é¤¬¤¢¤Ã¤¿¤ê¡¢ 2¤Ä¤Î¥Õ¥¡¥¤¥ë¤ò°·¤¦Áàºî¤Ë¤ª¤¤¤Æ³Æ¥Õ¥¡¥¤¥ë¤Ë¥Ï¥ó¥É¥é¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢ ¤³¤Î¾ÜºÙ¤Ï½ÅÍפǤ¹¡£

Variable: inhibit-file-name-handlers

¤³¤ÎÊÑ¿ô¤Ï¡¢ÆÃÄêÁàºî¤Ë¤Ä¤¤¤Æ¤Ï ¸½ºßŬÍѤò¶Ø»ß¤µ¤ì¤Æ¤¤¤ë¥Ï¥ó¥É¥é¤Î¥ê¥¹¥È¤òÊÝ»ý¤¹¤ë¡£

Variable: inhibit-file-name-operation

ÆÃÄê¤Î¥Ï¥ó¥É¥é¤Ë¤ª¤¤¤Æ¸½ºß¶Ø»ß¤µ¤ì¤Æ¤¤¤ëÁàºî¡£

Function: find-file-name-handler file operation

¤³¤Î´Ø¿ô¤Ï¥Õ¥¡¥¤¥ë̾file¤ËÂФ¹¤ë¥Ï¥ó¥É¥é´Ø¿ô¤òÊÖ¤¹¡£ ¥Ï¥ó¥É¥é¤¬¤Ê¤±¤ì¤Ðnil¤òÊÖ¤¹¡£ °ú¿ôoperation¤Ï¡¢¥Õ¥¡¥¤¥ë¤ËÂФ·¤ÆÅ¬ÍѤ¹¤ëÁàºî¤Ç¤¢¤ë¤³¤È¡£ ¤Ä¤Þ¤ê¡¢¥Ï¥ó¥É¥é¤ò¸Æ¤Ó½Ð¤¹¤È¤­¤ËÂè1°ú¿ô¤È¤·¤ÆÅϤµ¤ì¤ëÃÍ¡£ Åö³ºÁàºî¤Ïinhibit-file-name-operation¤ÈÈæ³Ó¤¹¤ëɬÍפ¬¤¢¤ë¡£

Function: file-local-copy filename

¤³¤Î´Ø¿ô¤Ï¡¢¥Õ¥¡¥¤¥ëfilename¤¬¥Þ¥¸¥Ã¥¯¤Ç¤Ê¤¤ÉáÄ̤Υե¡¥¤¥ë¤Ç¤Ê¤±¤ì¤Ð¡¢ filename¤ò¥Þ¥¸¥Ã¥¯¤Ç¤Ê¤¤ÉáÄ̤Υե¡¥¤¥ë¤Ë¥³¥Ô¡¼¤¹¤ë¡£

filename¤¬¡¢ Emacs¤Î³°Â¦¤Î¥×¥í¥°¥é¥à¤«¤é¤ÏľÀܯɤó¤À¤ê½ñ¤±¤Ê¤¤¥Þ¥¸¥Ã¥¯¥Õ¥¡¥¤¥ë̾¤Ç¤¢¤ë¤È¡¢ ¤³¤Î´Ø¿ô¤ÏÉáÄ̤Υե¡¥¤¥ë¤Ë¥³¥Ô¡¼¤·¤Æ¤½¤Î¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÊÖ¤¹¡£

filename¤¬ÉáÄ̤Υե¡¥¤¥ë̾¤Ç¥Þ¥¸¥Ã¥¯¤Ç¤Ê¤±¤ì¤Ð¡¢ ¤³¤Î´Ø¿ô¤Ï¤Ê¤Ë¤â¤»¤º¤Ënil¤òÊÖ¤¹¡£

Function: unhandled-file-name-directory filename

¤³¤Î´Ø¿ô¤Ï¡¢¥Þ¥¸¥Ã¥¯¤Ç¤Ï¤Ê¤¤¥Ç¥£¥ì¥¯¥È¥ê¤Î̾Á°¤òÊÖ¤¹¡£ filename¤¬¥Þ¥¸¥Ã¥¯¤Ç¤Ê¤±¤ì¤Ð¡¢ filename¤Î¥Ç¥£¥ì¥¯¥È¥êÉôʬ¤ò»È¤¦¡£ ¥Þ¥¸¥Ã¥¯¥Õ¥¡¥¤¥ë̾¤Ç¤¢¤ë¤È¡¢¥Õ¥¡¥¤¥ë̾¥Ï¥ó¥É¥é¤òµ¯Æ°¤·¡¢ Åö³º¥Ï¥ó¥É¥é¤¬¤É¤ó¤ÊÃͤòÊÖ¤¹¤«·èÄꤹ¤ë¡£

¤³¤ì¤Ï¼Â¹ÔÃæ¤Î¥µ¥Ö¥×¥í¥»¥¹¤ËÍ­ÍѤǤ¢¤ë¡£ ³Æ¥µ¥Ö¥×¥í¥»¥¹¤Ë¤Ï¡¢¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤È¤·¤Æ¥Þ¥¸¥Ã¥¯¤Ç¤Ê¤¤¥Ç¥£¥ì¥¯¥È¥ê¤¬ ɬÍפǤ¢¤ê¡¢¤³¤Î´Ø¿ô¤Ï¤½¤ì¤ò°·¤¦¤Î¤Ë¤è¤¤ÊýË¡¤Ç¤¢¤ë¡£