navi.el(関数の一覧表示とジャンプ)

to english


概要

emacsで、関数を一覧表示してジャンプする。
etagを使えば?
と、思うかもしれないが、
etagは、僕がmuleを使い始めた頃はperlに対応していなかったので、
emacs lispで自作した。

対応言語は以下の通り。
(1)C言語 (c-mode c++-mode)
(2)emacs Lisp (emacs-lisp-mode lisp-intraction-mode)
(3)Perl (perl-mode)
(4)ruby

最初の対応言語は3つだったが、改良してくれた方々のパッチを取り入れて、
対応言語と機能を増やしている。



説明

概要

実行すると、下の図に示すように、画面が上下に2分割され、上に関数一覧が出る。
関数一覧ウインドウで Ctl-o を押下すると、下のウインドウの先頭に関数が表示される。
後の使い方はnavi.elの先頭30行を読むこと。




emacsへの組込み方法


パスの通ったディレクトリに、navi.elを置き、ロードする。
例えば /home/suna/lisp ディレクトリに navi.el を置いた場合、
.emacsは以下の様になる。

(setq load-path (append load-path "/home/suna/lisp"))

naviモードを呼出すキーを割り付ける。
推奨は、ファンクションキー11番と、Ctl-x Ctl-l 。
バッファ名を渡すために簡単な関数(call-navi)を記述する。
すると、F11またはCtl-x Ctl-l を実行すると、先にあげた図の様に
画面が上下2分割されて、関数一覧が表示される。

.emacsは以下の様になる。
(global-set-key [f11] 'call-navi)
(global-set-key "\C-x\C-l" 'call-navi)
(defun call-navi ()
(interactive)
(navi (buffer-name))
)

関数一覧ウィンドウのフォーマット

関数一覧ウィンドウは、1行が1つの関数をあらわす。
行は「:」(コロン)で3つのフィールドに区切られる。
フィールド1はモード名
フィールド2はファイル名
フィールド3は関数名
である。

キー操作


標準では、関数一覧ウィンドウでの操作は以下に示すとおりである。

キー操作

機能

Ctr-n

カーソルを1行下げる。

Ctr-o
Enter
Space

関数一覧ウインドウでカーソルがある行の関数を
ソースウィンドウ(下の方のウィンドウ)の先頭に表示する。

Ctr-p

カーソルを1行上げる。

Ctr-x Ctr-s

関数一覧ウィンドウをファイルに保存。
(まだバグバグ)

Ctr-x Ctr-f

関数一覧ウィンドウをファイルから復元。
(まだバグバグ)

d

関数一覧ウィンドウで1行消す。
(操作を変えるかもしれない)

D

関数一覧ウィンドウで、ファイル単位で行を消す。
(操作を変えるかもしれない)

q

関数一覧ウィンドウを消去する。

e

関数一覧ウインドウは開いたまま、
関数一覧ウインドウでカーソルがある行の関数を
ソースウィンドウ(下の方のウィンドウ)の先頭に表示して、
カーソルをソースウィンドウの先頭に移動する。

o

関数一覧ウインドウを閉じて
関数一覧ウインドウでカーソルがある行の関数を
ソースウィンドウ(下の方のウィンドウ)の先頭に表示して、
カーソルをソースウィンドウの先頭に移動する。

k

ソースウィンドウを指定された行数でスクロールアップする。

j

ソースウィンドウを指定された行数でスクロールダウンする。

f

ソースウィンドウを1ページスクロールアップする。

b

ソースウィンドウを1ページスクロールダウンする。

n

関数一覧ウインドウでカーソルを1行下げ、
その関数をソースウィンドウ(下の方のウィンドウ)の先頭に表示する。

p

関数一覧ウインドウでカーソルを1行上げ、
その関数をソースウィンドウ(下の方のウィンドウ)の先頭に表示する。

h

関数一覧ウィンドウを隠す。

2

関数一覧ウィンドウを隠し、画面を2分割する。
上のウィンドウでは、関数一覧ウィンドウのカーソルのあった行の
関数が先頭に表示される。

1

ソースウィンドウを隠し、関数一覧ウィンドウのみ表示する。

^

関数一覧ウィンドウを狭くする。

v

関数一覧ウィンドウを広くする。

s

関数一覧ウィンドウをソートする。

注意事項

モード名を見るので、ソースウィンドウは、
C++,Lisp Interaction,Perlのいずれかのモードに
なっていることが必要。

制限事項

1.モード名

ソースの種類を判断するために、ソースウィンドウのモード名を参照するので、
ソースウィンドウは適切なモードになっている必要がある。


2.関数抽出

関数の抽出は、ソースを正規表現で検索するので、デフォルトの正規表現に
マッチしない書き方をすると、関数として認識されない。
例えば、C言語で関数のはじまりの行に左スペースが存在する場合など。


3.関数への位置づけ

同じ関数を2つ宣言する、あるいは、関数プロトタイプ宣言などで、
関数の位置が区別できない場合、先に出現した行に位置づくことがある。


4.バッファをkillした後の位置づけ

一覧ウィンドウ作成後、ソースウィンドウをkillすると、関数への
位置づけは失敗する。


5.emacsのバージョン

emacs20.4 以外のバージョンでは動作しない場合がある。
(mule2.3(emacs 19.28)では動作している。)

拡張予定


1.バッファをkillした後の位置づけ

バッファを復元して、位置づける。

2.対応モードの拡張

VisualBasic, COBOL, LaTeX へ対応する。

3.履歴ページの作成

当ページの拡張予定。
改良してくれた方と機能の一覧のページを作る。

4.データの持ち方の改良

言語ごとの正規表現検索パターンを連想配列で持つようにする。

5.マウスのサポート

マウスのクリックで機能が実行出来るようにする。



ダウンロード

ファイル

説明

navi.1.43.tar.gz データの持ちかたを連想配列にした。.emacsのサンプル同梱。
navi.1.42.tar.gz Update for C and Objective-C
バージョン1.41(navi.1.41.tar.gz) 2009年1月版
Autoconf,m4に対応した。
バージョン1.39(navi.1.39.tar.gz) 2009年1月版
MacOS X Leopardで動くようにした。
バージョン1.38(navi.1.38.tar.gz) 1999年11月版
ミニバッファが大きくなってしまうバグを発見し、修正した。
バージョン1.35(navi.1.35.tar.gz) 1999年10月版
GPLを明記した。muleでないemacsで動かすために日本語を削除した。
バージョン1.34(navi.1.34.tar.gz) 1999年10月版
怪しげな英語のコメントを入れた。
バージョン1.31(navi.1.31.tar.gz) 1999年9月版
HTMLモード、Textモードで左に空白があると章にジャンプしないバグを修正。ファイルをJISに変更。
バージョン1.28(navi.1.28.tar.gz) 1999年9月版
池田さんのパッチ(rubyの検索パターンの修正)を入れた版。
バージョン1.27(navi.1.27.tar.gz) 1999年9月版
まつむらさんのパッチを入れた版。
(ボールドフォントが赤になってしまうバグ修正。)
バージョン1.26(navi.1.26.tar.gz) 1999年9月版
池田さんのパッチ(ruby対応など)を入れた版。
バージョン1.24(navi.1.24.tar.gz) 1999年9月版
Javaに対応(したつもり)。
バージョン1.23(navi.1.23.tar.gz) 1999年9月版
怪しいけれど、対応するモードにTeX,HTML,Textを追加。
バージョン1.18(navi.1.18.tar.gz) 1999年9月版
ソースウィンドウをkillした後も復元できるように改造。
バージョン1.13(navi.1.13.tar.gz) 1999年9月版
Lisp Interactionの関数一覧表示の不具合を修正。
バージョン1.12(navi.1.12.tar.gz) 1999年9月版
バージョン1.9(navi.1.9.tar.gz) 1999年9月版