From: Koji Arai Date: 2003-04-08T03:23:40+09:00 Subject: [ruby-list:37528] Re: ReFe 0.7 (Re: ReFe 0.6) 新井です。 In message "[ruby-list:37525] ReFe 0.7 (Re: ReFe 0.6)" on 07 Apr 2003 08:02:48 +0900, Minero Aoki wrote: 何げに refe.el 添付です(本メール末尾)。かなり即興ですのでバ グがあるはずです。使い勝手も追求されてません。(まだあまり使っ てません^^;) refe の以下の動作を想定しています。 * refe "" で、全メソッドのリストが出ることを想定しています。 * 説明文には、"^---" が含まれることを想定しています。 使い方は M-x load-library refe した後、調べたいメソッド名の付近で M-x refe します。入力したメソッド名に対して複数のクラス候補がある場合 はクラス名を聞いて来ます。メソッド名、クラス名の入力には補完 が効きます。 誰かがちゃんとしたのを作ってくれるといいなあ。 -- 新井康司 (Koji Arai) (defvar refe-program-name "refe") (defvar refe-buffer-name "*Refe*") (defvar refe-method-table nil) (defun refe-make-completion-table () (setq refe-method-table (make-vector 547 0)) (with-temp-buffer (call-process refe-program-name nil t nil "") (goto-char (point-min)) (while (looking-at "^[A-Z][A-Za-z_0-9:]*[#.]\\(.*\\)") (intern (match-string 1) refe-method-table) (forward-line))) nil) (refe-make-completion-table) (defun refe-get-word-at-point () (save-excursion (while (looking-at "\\sw\\|\\s_") (forward-char 1)) (if (or (re-search-backward "\\sw\\|\\s_" (save-excursion (beginning-of-line) (point)) t) (re-search-forward "\\(\\sw\\|\\s_\\)+" (save-excursion (end-of-line) (point)) t)) (progn (goto-char (match-end 0)) (buffer-substring (point) (progn (forward-sexp -1) (while (looking-at "\\s'") (forward-char 1)) (point)))) nil))) (defun refe () (interactive) (let* ((default (refe-get-word-at-point)) (word (completing-read (if default (format "Method (default %s): " default) "Method: ") refe-method-table nil nil nil nil default)) (buf (or (get-buffer refe-buffer-name) (generate-new-buffer refe-buffer-name))) (pop-up-windows t) (pop-up-frames nil)) (set-buffer buf) (setq buffer-read-only nil) (erase-buffer) (call-process refe-program-name nil buf nil word) (goto-char (point-min)) (if (re-search-forward "^---" nil t) nil (let ((klass-table (make-vector 17 0)) klass) (goto-char (point-min)) (while (looking-at "^\\([A-Z][A-Za-z_0-9:]*\\)[#.]") (intern (match-string 1) klass-table) (forward-line)) (setq klass (completing-read "Class: " klass-table nil nil nil nil nil)) (erase-buffer) (call-process refe-program-name nil buf nil klass word))) (set-buffer-modified-p nil) (setq buffer-read-only t) (goto-char (point-min)) (display-buffer buf)))