From: Yasushi Abe Date: 2000-04-17T10:08:11+09:00 Subject: [ruby-list:21931] ruby-mode --Multipart_Mon_Apr_17_10:08:07_2000-1 Content-Type: text/plain; charset=ISO-2022-JP こんにちわ、阿部です。 最近知ったspeedbarをruby-modeでも使いたかったのと、elispの練習をかねて ちょっといじってみました。 Meadow1.12b1@Win98とMeadow1.13b1@WinNTでしかためしてないのですが、いち おう動いているようです(^^;;; # imenuの使い方も適当にサンプルを読んで作ったので、間違ってるかも CVSの先端のruby-mode.elへのパッチです。 このパッチをあてて、.emacsに (require 'speedbar) (speedbar-add-supported-extension ".rb") を追加すると、speedbarがrubyのソースに使えます。 とりあえずクラスとメソッドを表示します。 ---- yasushi abe --Multipart_Mon_Apr_17_10:08:07_2000-1 Content-Type: text/plain; charset=US-ASCII --- ruby-mode.el.1.12 Mon Apr 17 00:34:48 2000 +++ ruby-mode.el Mon Apr 17 00:36:56 2000 @@ -115,4 +115,29 @@ "*Indentation of ruby statements.") +(eval-when-compile (require 'cl)) +(defun ruby-imenu-create-index () + (let ((index-alist '()) + class-name class-begin method-name method-begin decl) + (goto-char (point-min)) + (while (re-search-forward "^\\s *\\(class\\|def\\)\\s *\\([^(\n ]+\\)" nil t) + (setq decl (buffer-substring (match-beginning 1) (match-end 1))) + (cond + ((string= "class" decl) + (setq class-begin (match-beginning 2)) + (setq class-name (buffer-substring class-begin (match-end 2))) + (push (cons class-name (match-beginning 0)) index-alist) + (ruby-mark-defun) + (save-restriction + (narrow-to-region (region-beginning) (region-end)) + (while (re-search-forward "^\\s *def\\s *\\([^(\n ]+\\)" nil t) + (setq method-begin (match-beginning 1)) + (setq method-name (buffer-substring method-begin (match-end 1))) + (push (cons (concat class-name "#" method-name) (match-beginning 0)) index-alist)))) + ((string= "def" decl) + (setq method-begin (match-beginning 2)) + (setq method-name (buffer-substring method-begin (match-end 2))) + (push (cons method-name (match-beginning 0)) index-alist)))) + index-alist)) + (defun ruby-mode-variables () (set-syntax-table ruby-mode-syntax-table) @@ -153,4 +178,7 @@ (setq major-mode 'ruby-mode) (ruby-mode-variables) + + (make-local-variable 'imenu-create-index-function) + (setq imenu-create-index-function 'ruby-imenu-create-index) (run-hooks 'ruby-mode-hook)) --Multipart_Mon_Apr_17_10:08:07_2000-1--