org-modeで文書を書いていてhtmlにexportする際は,C-e h oとするわけだが,段々とこれが面倒になってくることがある.そこで,ネットを探ってみると,やはり,なんでも載ってるredditにhtml exportを自動化する関数の記事があった.
Table of Contents
toggle-org-html-export-on-save
例によって,下記のようにinit.orgに書き込めばよい.
#+begin_src emacs-lisp
(defun toggle-org-html-export-on-save ()
(interactive)
(if (memq 'org-html-export-to-html after-save-hook)
(progn
(remove-hook 'after-save-hook 'org-html-export-to-html t)
(message "Disabled org html export on save for current buffer..."))
(add-hook 'after-save-hook 'org-html-export-to-html nil t)
(message "Enabled org html export on save for current buffer...")))
#+end_src
これで,toggle-org-html-export-on-saveで,htmlを自動で出力するかどうかを切り替え可能となる.しかし,これだけでは,org文書を保存するたびにブラウザーを手動でreloadしないといけなくなり,面倒である.自動でreloadしてくれるコマンドがあれば便利である.探してみると,これもネットに転がっていた.
directoryの内容が変更されると,自動でhtmlを再読込する.
- 情報元:Watch for file changes and refresh your browser automatically
- 上記サイトに有るrubyのスクリプトが使えそうなので,頂いた.
- rubyのインストールについては,以下のようなサイトを参考
- しかし,上記サイトのスクリプトをそのまま使用するとと,reloadの際にページの先頭まで戻ってしまい不便!
- 結局,上記サイトのFirefox用のスクリプトを参考に少し書き換えた下記のSafari用のスクリプトを使用すると,reloadの際に先頭まで戻らないので,こちらを使用することとした.
#!/usr/bin/env ruby
# watch.rb by Brett Terpstra, 2011 <http://brettterpstra.com>
# with credit to Carlo Zottmann <https://github.com/carlo/haml-sass-file-watcher>
trap("SIGINT") { exit }
if ARGV.length < 2
puts "Usage: #{$0} watch_folder keyword"
puts "Example: #{$0} . mywebproject"
exit
end
dev_extension = 'dev'
filetypes = ['css','html','htm','php','rb','erb','less','js']
watch_folder = ARGV[0]
keyword = ARGV[1]
puts "Watching #{watch_folder} and subfolders for changes in project files..."
while true do
files = []
filetypes.each {|type|
files += Dir.glob( File.join( watch_folder, "**", "*.#{type}" ) )
}
new_hash = files.collect {|f| [ f, File.stat(f).mtime.to_i ] }
hash ||= new_hash
diff_hash = new_hash - hash
unless diff_hash.empty?
hash = new_hash
diff_hash.each do |df|
puts "Detected change in #{df[0]}, refreshing"
%x{osascript<<ENDGAME
tell app "Safari" to activate
tell app "System Events"
keystroke "r" using command down
end tell
ENDGAME
}
end
end
sleep 1
end
- このスクリプトにwatch_safari.rbという名前をつけてパスが通っている/usr/local/binに保存し,chomod a+x watch_safari.rbとして実行権限を付けた.
- Usage: /usr/local/bin/watch_safari.rb watch_folder keyword
- パスを通しておけば,watch_safari.rb watch_folder keyword で大丈夫
使用方法
- /Data/Hoge/Fuga/hogefuga.orgを書いているとすると以下のようにそのディレクトリをみはらせておく.
$ cd /Data/Hoge
$ watch_safari.rb Hoge hogefuga.html
- org-modeでhogefuga.orgを書きはじめるときに,M-x toggle-org-html-export-on-save として保存するたびに自動的に新たなhtmlがexportされるようにする.
- 最初だけは,C-e h oでhtmlをexportして,safariでhogefuga.htmlを開いておく.
- 以降は,hogefuga.org文書を保存するたびに,現在見ている場所に戻った状態で最新のhtmlに更新されるようになる.便利である.
以上はOSX上のSafariを使用している場合であるが,他のブラウザーでも少し変更するだけで同じことができるはずである.