xmp で Ruby 1.8 と 1.9 を切り替える

ある食事会で有名な Rubyist に質問された。

xmp を使うときに、Ruby 1.8 と 1.9 を切り替えられないか?

その時は答えられなかったけど、こんな感じでどうだろうか?

  • Ruby 1.8 と 1.9 がインストールされていること。
    • ruby と ruby19
    • 普段使うのは ruby19
  • rcodetools がインストールされていること。
(require 'rcodetools)
(setq xmpfilter-command-name
      "xmpfilter -S ruby19 --dev --detect-rbtest")
(setq rct-complete-command-name
      "rct-complete -S ruby19 --dev --fork --detect-rbtest")

(defun xmp-1-8 ()
  (interactive)
  (let ((xmpfilter-command-name
	 "ruby -rubygems -S xmpfilter --dev --fork --detect-rbtest"))
    (xmp)))

(defun rct-complete-symbol-1-8 ()
  (interactive)
  (let ((rct-complete-command-name
	 "ruby -rubygems -S rct-complete --dev --fork --detect-rbtest"))
    (rct-complete-symbol)))

(add-hook 'ruby-mode-hook
	  (lambda ()
	    (define-key ruby-mode-map "\M-\C-i" 'rct-complete-symbol)
	    (define-key ruby-mode-map "\C-c\C-d" 'xmp)
	    (define-key ruby-mode-map "\M-8\C-i" 'rct-complete-symbol-1-8)
	    (define-key ruby-mode-map "\C-c8\C-d" 'xmp-1-8)))

キーバインドはなんとも頂けないが ...

RUBY_VERSION                    # =>

この状態で C-c C-d すると、

RUBY_VERSION                    # => "1.9.1"

C-c 8 C-d すると、

RUBY_VERSION                    # => "1.8.7"

だめかな?