Next: Format Conversion, Previous: Create/Delete Dirs, Up: Files [Contents][Index]
ÆÃÄê¤Î¥Õ¥¡¥¤¥ë̾¤òÆÃÊ̤˰·¤¦¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ ¤³¤ì¤ò¤½¤ì¤é¤Î̾Á°¤ò¥Þ¥¸¥Ã¥¯¡Ê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¤Ä¤Î¥Õ¥¡¥¤¥ë¤ò°·¤¦Áàºî¤Ë¤ª¤¤¤Æ³Æ¥Õ¥¡¥¤¥ë¤Ë¥Ï¥ó¥É¥é¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢
¤³¤Î¾ÜºÙ¤Ï½ÅÍפǤ¹¡£
¤³¤ÎÊÑ¿ô¤Ï¡¢ÆÃÄêÁàºî¤Ë¤Ä¤¤¤Æ¤Ï ¸½ºßŬÍѤò¶Ø»ß¤µ¤ì¤Æ¤¤¤ë¥Ï¥ó¥É¥é¤Î¥ê¥¹¥È¤òÊÝ»ý¤¹¤ë¡£
ÆÃÄê¤Î¥Ï¥ó¥É¥é¤Ë¤ª¤¤¤Æ¸½ºß¶Ø»ß¤µ¤ì¤Æ¤¤¤ëÁàºî¡£
¤³¤Î´Ø¿ô¤Ï¥Õ¥¡¥¤¥ë̾file¤ËÂФ¹¤ë¥Ï¥ó¥É¥é´Ø¿ô¤òÊÖ¤¹¡£
¥Ï¥ó¥É¥é¤¬¤Ê¤±¤ì¤Ðnil
¤òÊÖ¤¹¡£
°ú¿ôoperation¤Ï¡¢¥Õ¥¡¥¤¥ë¤ËÂФ·¤ÆÅ¬ÍѤ¹¤ëÁàºî¤Ç¤¢¤ë¤³¤È¡£
¤Ä¤Þ¤ê¡¢¥Ï¥ó¥É¥é¤ò¸Æ¤Ó½Ð¤¹¤È¤¤ËÂè1°ú¿ô¤È¤·¤ÆÅϤµ¤ì¤ëÃÍ¡£
Åö³ºÁàºî¤Ïinhibit-file-name-operation
¤ÈÈæ³Ó¤¹¤ëɬÍפ¬¤¢¤ë¡£
¤³¤Î´Ø¿ô¤Ï¡¢¥Õ¥¡¥¤¥ëfilename¤¬¥Þ¥¸¥Ã¥¯¤Ç¤Ê¤¤ÉáÄ̤Υե¡¥¤¥ë¤Ç¤Ê¤±¤ì¤Ð¡¢ filename¤ò¥Þ¥¸¥Ã¥¯¤Ç¤Ê¤¤ÉáÄ̤Υե¡¥¤¥ë¤Ë¥³¥Ô¡¼¤¹¤ë¡£
filename¤¬¡¢ Emacs¤Î³°Â¦¤Î¥×¥í¥°¥é¥à¤«¤é¤ÏľÀܯɤó¤À¤ê½ñ¤±¤Ê¤¤¥Þ¥¸¥Ã¥¯¥Õ¥¡¥¤¥ë̾¤Ç¤¢¤ë¤È¡¢ ¤³¤Î´Ø¿ô¤ÏÉáÄ̤Υե¡¥¤¥ë¤Ë¥³¥Ô¡¼¤·¤Æ¤½¤Î¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÊÖ¤¹¡£
filename¤¬ÉáÄ̤Υե¡¥¤¥ë̾¤Ç¥Þ¥¸¥Ã¥¯¤Ç¤Ê¤±¤ì¤Ð¡¢
¤³¤Î´Ø¿ô¤Ï¤Ê¤Ë¤â¤»¤º¤Ënil
¤òÊÖ¤¹¡£
¤³¤Î´Ø¿ô¤Ï¡¢¥Þ¥¸¥Ã¥¯¤Ç¤Ï¤Ê¤¤¥Ç¥£¥ì¥¯¥È¥ê¤Î̾Á°¤òÊÖ¤¹¡£ filename¤¬¥Þ¥¸¥Ã¥¯¤Ç¤Ê¤±¤ì¤Ð¡¢ filename¤Î¥Ç¥£¥ì¥¯¥È¥êÉôʬ¤ò»È¤¦¡£ ¥Þ¥¸¥Ã¥¯¥Õ¥¡¥¤¥ë̾¤Ç¤¢¤ë¤È¡¢¥Õ¥¡¥¤¥ë̾¥Ï¥ó¥É¥é¤òµ¯Æ°¤·¡¢ Åö³º¥Ï¥ó¥É¥é¤¬¤É¤ó¤ÊÃͤòÊÖ¤¹¤«·èÄꤹ¤ë¡£
¤³¤ì¤Ï¼Â¹ÔÃæ¤Î¥µ¥Ö¥×¥í¥»¥¹¤ËÍÍѤǤ¢¤ë¡£ ³Æ¥µ¥Ö¥×¥í¥»¥¹¤Ë¤Ï¡¢¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤È¤·¤Æ¥Þ¥¸¥Ã¥¯¤Ç¤Ê¤¤¥Ç¥£¥ì¥¯¥È¥ê¤¬ ɬÍפǤ¢¤ê¡¢¤³¤Î´Ø¿ô¤Ï¤½¤ì¤ò°·¤¦¤Î¤Ë¤è¤¤ÊýË¡¤Ç¤¢¤ë¡£