Ruby の関数/変数の解説を info から調べる Emacs Lisp を書いてみました。
ruby-mode で C-h f や C-h d とするだけです。
#このバインドもオブジェクト指向の考えかも。

動作報告をお待ちしています。このプログラムの使用によってみなさんのプロ
グラミング環境がより良くなれば幸いです。

;;; -*- Emacs-Lisp -*-
;;; $Id: ruby-info.el,v 1.1 1999/05/14 04:07:27 u Exp u $

;;; Author: Takashi Nishimoto <g96p0935 / mse.waseda.ac.jp>
;;; Keywords: ruby info


;;; Commentary:

;; Ruby の関数や変数についての解説を表示するコマンドです。
;;
;; describe-function や describe-variable と良く似た動作をします。指定
;; された関数(変数)について Ruby 日本語マニュアル中で解説されている場
;; 合は、説明文字列を表示する代わりに Info の該当部分にジャンプします。
;;
;; 利用及び再配布の際は、GNU 一般公用許諾書の適当なバージョンにしたがっ
;; て下さい。
;;
;; この Emacs Lisp を使うには土屋さんの elisp-info.el も必要となります。
;; elisp-info.el の作者である土屋さんと Ruby の Info の作者である Koji
;; Arai さんにはとても感謝しています。
;;
;; 一次配布元
;;     ftp://ftp.misao.gr.jp/pub/tak/elisp/ruby-info.el
;;     http://www-nagao.kuee.kyoto-u.ac.jp/member/tsuchiya/elisp/elisp-info.el


;;; Install:

;; (1) Ruby 日本語マニュアルを Info で閲覧できるようにして下さい。
;;     Texinfo 形式のファイルは、
;; 
;;         ftp://ftp.netlab.co.jp/pub/lang/ruby/contrib/ruby-texi-1.2.tar.gz
;;
;;     などから入手可能です。すでに Info ファイルも入っています。
;;
;; (2) ruby-info.el と elisp-info.el を適当なディレクトリにコピーして
;;     下さい。
;;
;; (3) ruby-info-index.el を生成するために、M-x ruby-info-make-index 
;;     とするか、次のコマンドを実行して下さい。
;;
;;         mule -batch -l ~/.emacs -l ./ruby-info.el -f ruby-info-make-index
;;
;;     デフォルトでは Ruby 日本語マニュアルを対象として検索します。不
;;     要な Info がある場合や、対象となる Info を追加する場合は、
;;     ruby-info-list を変更して下さい。
;;
;; (4) 次の指定を ~/.emacs に加えて下さい。
;;
;; (autoload 'ruby-info-describe-function "ruby-info" "describe-function for ruby" t nil)
;; (autoload 'ruby-info-describe-variable "ruby-info" "describe-variable for ruby" t nil)
;; (add-hook 'ruby-mode-hook
;;           '(lambda ()
;;              (define-key ruby-mode-map "\C-hf" 'ruby-info-describe-function)
;;              (define-key ruby-mode-map "\C-hd" 'ruby-info-describe-function)
;;              (define-key ruby-mode-map "\C-hD" 'describe-function)
;;              (define-key ruby-mode-map "\C-hv" 'ruby-info-describe-variable)
;;              (define-key ruby-mode-map "\C-hV" 'describe-variable)))
;;
;;
;; Info は表示されるのに、表示される位置が間違っている場合は、関数(変
;; 数)の名前と Node の対応関係を記録している ruby-info-index.el を作
;; り直す必要があるので、M-x ruby-info-make-index を再実行して下さい。


;;; 依存関係の宣言

(provide 'ruby-info)
(require 'elisp-info)

(defvar ruby-info-list '("ruby.info") "*解説を検索する Ruby についての Info のリスト")

(defvar ruby-info-function-alist nil "Info で解説されている Ruby の関数の連想配列")

(defvar ruby-info-function-regexp nil "Info で解説されている Ruby の関数の正規表現")

(defvar ruby-info-variable-alist nil "Info で解説されている Ruby の変数の連想配列")

(defvar ruby-info-variable-regexp nil "Info で解説されている Ruby の変数の正規表現")

(defun ruby-info-read-string (regexp alist)
  "デフォルト値付き completing-read。ruby 専用。"
  (let* (( case-fold-search nil)
         (v (save-excursion
              (and (forward-word 1)
                   (re-search-backward regexp nil t)
                   (match-string 1))))
         (var (completing-read (if v (format "Show info (default %s): " v)
                                 (format "Show info: "))
                               alist nil t)))
    (if (equal var "") v var)))

(defun ruby-info-get-and-goto-node (elm alist)
  "関数名 (変数名) を Info で調べる。
ruby はオブジェクト指向言語のため、関数や変数は多重定義されている可能性がある。
そのときは見たいノードをユーザが選択する。"
  (let (elms node line)
    (catch 'found
      (while alist
        (if (string= elm (car (car alist)))
            (progn
              (while (progn
                       (setq elms (cons (car alist) elms)
                             alist (cdr alist))
                       (string= elm (car (car alist)))))
              (throw 'found elms)))
        (setq alist (cdr alist))))
    (setq elms (mapcar 'cdr elms))
    (if (= (length elms) 1)
        (setq node (car   (car elms))
              line (nth 1 (car elms)))
      (setq node (concat
                  "(ruby.info)"
                  (completing-read "node: "
                                   (mapcar
                                    (lambda (e)
                                      (list (substring (car e) 11)))
                                    elms)
                                   nil t nil nil))
            line (nth 1 (assoc node elms))))
    ;(message "node=%s line=%d" node line)
    (or (elisp-info-goto-node node line)
	(error "Can't find Info node: %s" elm))
    ))
    
(defun ruby-info-describe-function (function)
  "Display the info node of FUNCTION (string)"
  (interactive (list (progn
                       (require 'ruby-info-index)
                       (ruby-info-read-string ruby-info-function-regexp ruby-info-function-alist))))
  (ruby-info-get-and-goto-node function ruby-info-function-alist))

(defun ruby-info-describe-variable (variable)
  "Display the info node of VARIABLE (string)"
  (interactive (list (progn
                       (require 'ruby-info-index)
                     (ruby-info-read-string ruby-info-variable-regexp ruby-info-variable-alist))))
  (ruby-info-get-and-goto-node variable ruby-info-variable-alist))

;; ruby-info-describe-variable hack
(add-hook 'ruby-mode-hook
          (lambda ()
            (modify-syntax-entry ?$ "w" ruby-mode-syntax-table)))


(defun ruby-info-make-index () "\
Command to write list of functions and variables documented in elisp-jp to file.
Ruby Reference Manual で記述されている関数及び変数と Info の node との
対応関係の索引ファイル( ruby-info-index.el )を作るコマンド。

Non-interactive に実行された場合はカレントディレクトリに索引を作る。
Interactive に実行された場合は、ruby-info-index.el または 
elisp-info.el のあるディレクトリに作ろうとするが、ファイルが両方とも見
つからなかった場合はユーザーに入力を求める。
"
  (interactive)
  (let ((elisp-info-entry-regexp "^ +-.+\\(Method\\|Function\\|Variable\\)[^:]*: \\([^ \t\n]+\\)")
        (elisp-info-node-regexp "\^_\nFile: %s, +Node: +\\([^,\n\t]+\\)[,\n\t]")
        )
    (elisp-info-make-index-file "ruby-info" (if noninteractive default-directory) t)))


--
Takashi Nishimoto: g96p0935 / mse.waseda.ac.jp
I love Emacs, zsh, and Linux!!
See ftp://ftp.misao.gr.jp/pub/tak/README
Key fingerprint = EE D7 1D 18 A9 42 C0 8A  63 E7 F2 AC 4D C7 83 6B