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月版