Emacs23.2からJavaScriptのためのメジャーモードとしてjs-modeが組み込まれている*1。auto-mode-alistに("\\.js\\'" . js-mode)が既に登録されているので*2、拡張子が.jsなファイルを開けば自動的にjs-modeとなるはずだ。
このときファイルを実行する方法として2つの選択肢が*3ある。
1つはEmacs上でJavaScriptのインタプリタを走らせる方法で、もう一つはFirefoxに実行させる方法。どちらが必要かは場合によるので*4、両方使えるように設定する。
Ejacs
Ejacsというのは全部Emacs Lispで書かれたとかいうJavaScriptインタプリタ。
Google Code Archive - Long-term storage for Google Code Project Hosting.からzipを落としてきて解凍し、load-pathの通った場所(site-lispとか)に解凍する。
MozRepl and moz.el
MozReplというのはFirefoxにtelnet接続して色々できるようになるアドオンで、moz.elというelispを使うとEmacsからMozReplを介してFirefoxにちょっかい出せるようになる*5。
まず、MozReplをHome · bard/mozrepl Wiki · GitHubからFireFoxへインストールしておく。正常にインストールされるとFireFoxの「ツール」にMozReplというのが追加されて、そこからMozReplを起動できる。起動しておくと外部から接続可能になるので、何かしたかったら起動しておく。
次にmoz.elをmozrepl/moz.el at master · bard/mozrepl · GitHubから落としてきて、これもload-pathの通った場所に置く。
init.el(.emacs)の設定
以下の記述をinit.el(または.emacs)に追加(一部vallog: Ejacs(Ejax)とjs2-modeを連携させるを参考にさせてもらいました。)
;;; ejacs {{{2 ;; C-c C-jでjs-consoleを起動 ;; C-c rで選択範囲を実行 (autoload 'js-console "js-console" nil t) (defun js-console-execute-region (start end) "Execute region" (interactive "r") (let ((buf-name (buffer-name (current-buffer)))) (copy-region-as-kill start end) (switch-to-buffer-other-window "*js*") (js-console-exec-input (car kill-ring)) (switch-to-buffer-other-window buf-name))) (defun run-js-console-and-split-window () "Run js-console and split window horizontally." (interactive) (split-window-horizontally) (js-console) (other-window 1) ) (add-hook 'js-mode-hook (lambda () (moz-minor-mode 1) ;; 要moz.el (local-set-key "\C-c\C-j" 'run-js-console-and-split-window) (local-set-key "\C-cr" 'js-console-execute-region) ))
*1:もともとespresso-modeと呼ばれていたもの(Emacs 23.2 Features (released 2010-05))
*2:*scratch*で(rassoc 'js-mode auto-mode-alist)と記入して行末でC-jすると確認できる。もしこの返り値がnilだったら.emacsに、(add-to-list 'auto-mode-alist '("\\.js\\'" . js-mode) )などと記述しておく。
*3:良く調べてないのでもっとあるかもしれない
*4:偉そうに言ってみたけどサイの絵の付いた本(JavaScript 第5版)を読み始めて2日目なのでよく知りません
*5:というか、js-modeはそもそもmoz.elと一緒に使うことを想定しているみたい