sandbox

Scala, Android, Architecture, Management, Service Design あたりを主戦場としております

ファイル保存後に iPhone Simulator 内の Safari をオートリロードする elisp & Apple Script

iPhone Simualtor でも、ファイル保存後の auto-refresh がしたかったので。

リロードを実行する Apple Script

iPhone Simulator & Mobile Safari が起動している前提で、アクティブなタブをリロードする。

tell application "System Events"
	tell process "iPhone Simulator"
		click button "Reload" of window 1
	end tell
end tell

elisp 上でワンライナーでコーディングしてしまうのでファイル保存は不要

ラッパー関数 & auto-save-hook

Emacs 上で扱う為に、ラッパー関数を定義して、after-save-hook に仕込む。

web-reload-iphonesimulator

上記の Apple Script をワンライナー化して、関数として定義。

(defun web-reload-iphonesimulator ()
   "Reload a page on iPhone Simulator. Run process associated to the *Messages* buffer"
   (interactive)
   (start-process-shell-command
       "iphonesimulator-process"
       "*Messages*"
       "osascript -e 'tell application \"System Events\"' -e 'tell process \"iPhone Simulator\"' -e 'click button \"Reload\" of window 1' -e 'end tell' -e 'end tell'"))
after-save-hook の設定例:

対象のファイルを保存するとすべてのブラウザで更新を走らせるという富豪仕様 ;p

(setq web-enable-autoreload t)
(setq web-autoreload-filetypes '("css" "js" "php" "html" "htm" "tpl" "jade" "haml" "mustache"))
(defun web-autoreload-browsers()
  (interactive)
  (if (and
       (equal web-enable-autoreload t)
       (string-match
        (concat "\\.\\("
                (mapconcat 'identity web-autoreload-filetypes "\\|")
                "\\)$")
        buffer-file-name))
      (web-reload-browsers)))

;; for Firefox
;; required mozrepl
(defun web-reload-firefox ()
  (interactive)
  (moz-send-line "content.location.reload()"))

;; for Chrome
(defun web-reload-chrome ()
   "Reload a page on Chrome. Run process associated to the *Messages* buffer"
   (interactive)
   (start-process-shell-command
       "chrome-process"
       "*Messages*"
       "osascript -e 'tell application \"Google Chrome\" to reload active tab of window 1'"))

;; for iPhone Simulator
(defun web-reload-iphonesimulator ()
   "Reload a page on iPhone Simulator. Run process associated to the *Messages* buffer"
   (interactive)
   (start-process-shell-command
       "iphonesimulator-process"
       "*Messages*"
       "osascript -e 'tell application \"System Events\"' -e 'tell process \"iPhone Simulator\"' -e 'click button \"Reload\" of window 1' -e 'end tell' -e 'end tell'"))

;; Reload all browsers
(defun web-reload-browsers ()
  (interactive)
  (web-reload-iphonesimulator)
  (web-reload-firefox)
  (web-reload-chrome))