コードを書くときに2つのファイルを使うと良いような気がした。

昨日の続きです
関数の実行結果を調べたい時に、移動しなければいけないのが面倒くさい。
shellの環境に関数の情報が入っているのだから、別なファイルに実行用のコードを書いても良いような気がする。
そんなわけで以下の2つのファイルを同時に使って作業すると便利そうだと思った。

  • 関数などの定義を書くファイル(.js)
  • 関数の実行結果などを調べるファイル(.tmp.js)

この2つのファイルを簡単に行き来きできれば作業効率が上がる気がする。

コード

(昨日はC-c C-cにしていたjs-output/commentはC-c C-iに変更した)

(defvar tmp-real-file-list nil)
(defvar tmp-file-modifier ".tmp")

(defun toggle-tmp-or-real-file () (interactive)
  (let ((fpath (buffer-file-name)))
    (ignore-errors ;;*scratch*などのファイルを作らないbufferでerrorが出るのがウザいので
      (unless (member fpath tmp-real-file-list)
	(set-tmp-real-file-list fpath))
      (if (equal (car tmp-real-file-list) fpath)
	  (find-file (cadr tmp-real-file-list))
	(find-file (car tmp-real-file-list))))))

(defun set-tmp-real-file-list (fpath)
  (let* ((ext  (file-name-extension fpath))
	 (lst (split-string fpath (concat "\\." ext) t)))
    (setq tmp-real-file-list
     (list fpath (concat (car lst) tmp-file-modifier "." ext)))))

(global-set-key  "\C-c\C-c" 'toggle-tmp-or-real-file)

昨日の作ったものと組み合わせた使い方

関数定義を行うファイルを作る(example.js)

function add(x,y){
  return x + y;
}

function mul(x,y){
  return x * y;
}

function f(x,y,z){
  return add(mul(x,y),z);
}

書き終わったら、C-c Sでshellを立ち上げる(まだ立ち上がってなかったら)
その後に、C-c C-lでファイルの内容をshellに読み込ませる。
C-c C-c で実行したいコードを書くファイル(example.tmp.js)に移動する。
その中に例えば、以下のようなコードをかく。

f(3,4,5) 

ここで,C-c C-i*1を入力すると

f(3,4,5)// =>  17

というように結果がコメントされる。
実行結果が気にくわない時には、C-c C-cですぐに定義元に戻れるので便利。*2

*1:昨日の設定だとC-c C-cだったけど変更した

*2:一つのファイルだと,ファイルの下部とか上部にC-nとかC-pで移動する必要がある。面倒くさい