emacsで画像の変更をチェックしてリロードする関数を書いた
これで絵を書くコードで遊ぶのが楽になるはず><
(defvar reload-image-target-path "") (defvar reload-image-target-buf "") (defvar reload-image-current-buffer "") (defvar reload-image-wait-time 1) (defvar reload-image-every-where-p nil) (defvar reload-image-timer nil) (defvar reload-image-timer-active-p nil) (defun reload-image-target-update-p () (let* ((l (file-attributes reload-image-target-path)) (last-access (nth 4 l)) (last-modification (nth 5 l))) (time-less-p last-access last-modification))) (defun reload-image () (when (or reload-image-every-where-p (string= (buffer-name) reload-image-current-buffer)) (with-current-buffer (get-buffer reload-image-target-buf) (when (reload-image-target-update-p) (message "reload-image") (revert-buffer t t))))) (defun reload-image-timer (&optional opt) (setq reload-image-timer-active-p (case opt (1 t) (-1 nil) (t (not reload-image-timer-active-p)))) (if reload-image-timer-active-p (setq reload-image-timer (run-with-idle-timer reload-image-wait-time t 'reload-image)) (when reload-image-timer (cancel-timer reload-image-timer))) (message (format "reload-image-timer is %s" (if reload-image-timer-active-p "on" "off")))) (defun reload-image-timer-start (path) (interactive "Ftarget") (if reload-image-timer-active-p (message "another timer is also acitive.") (progn (setq reload-image-target-path path) (setq reload-image-current-buffer (buffer-name)) (find-file-other-frame path) (setq reload-image-target-buf (buffer-name)) (reload-image-timer 1)))) (defun reload-image-timer-stop () (interactive) (reload-image-timer -1)) ;; (reload-image-timer-start "a.png") ;; (reload-image-timer-stop) ;; (benchmark-run (dotimes (i 1000) (reload-image-target-update-p))); =>(0.023139 0 0.0) ;; (benchmark-run (dotimes (i 1000) (string= (buffer-name) reload-image-target))); =>(0.0010249999999999999 0 0.0)