読者です 読者をやめる 読者になる 読者になる

scheme-other-window

Lisp 系言語の開発スタイルの特徴はインクリメンタルであるという点につきる。 (SchemeR6RS においてちょっと違う方向性になってるみたいだけど。) 緻密な設計よりも頻繁にテストしながら、あるいは実用しながら完成に近付けていく。
だから、開発者は emacs 上で REPL (対話モード) のバッファを開いておく使い方をよくやる。 Gauche 用だと基本的な設定は以下の URL で紹介されているものが有名だろう。
http://karetta.jp/book-node/gauche-hacks/004682
書籍「プログラミング Gauche」にも同じものが記載されている。
しかし、挙動が気に入らない点がある。 新たにバッファを開くのは良いのだが、開いたバッファがカレントバッファになってしまうのだ。 ほとんどの場合は REPL に直接入力せずに別のバッファから C-x e で評価させるので、バッファを移動されるのは好ましくない。 ポイントが元のままになるように修正してみた。

(defun gauche ()
  (interactive)
  (run-scheme "gosh -i"))

(defun scheme-other-window ()
  "Run scheme on other window"
  (interactive)
  (let ((sw (selected-window)))
    (save-excursion
      (switch-to-buffer-other-window
       (get-buffer-create "*scheme*"))
      (gauche)
      (select-window sw))))

バッファとウィンドウの関連を破壊するような関数 (ここでは switch-to-buffer-other-window) を使うと save-excursion だけでは復元出来ないので selected-window の返却値を保存しておくようにしている。
ちょっとした変更だが、余計な操作がなくなり気分が良い。
Document ID: 1be353a691a75943ddfe0b1335444170