Skip to content

Latest commit

 

History

History
executable file
·
61 lines (46 loc) · 2.54 KB

ClojureSourceCodeReading.rst

File metadata and controls

executable file
·
61 lines (46 loc) · 2.54 KB

gtagsでClojureのコードのタグ付け

Clojureで実装されたプロダクトは、 ClojureだけではなくJavaのコードとセットになっていることが多いので、 両方同時に見れるよう、gtagsを使うのがよさそう。

まず、Exuberant Ctagsをインストールする。:

$ tar zxf ctags-5.8.tar.gz 
$ cd ctags-5.8
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

GNU GLOBAL をインストールする。:

$ curl -l -o global-6.2.4.tar.gz http://tamacom.com/global/global-6.2.4.tar.gz 
$ tar zxf global-6.2.4.tar.gz 
$ cd global-6.2.4
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

ホームディレクトリに.globalrcを作成し、.cljを処理対象にするように修正する。:

$ cp /usr/local/share/gtags/gtags.conf ~/.globalrc
$ vim ~/.globalrc 
$ diff /usr/local/share/gtags/gtags.conf ~/.globalrc
77c77
<     :langmap=Lisp\:.cl.clisp.el.l.lisp.lsp:\
---
>     :langmap=Lisp\:.cl.clisp.el.l.lisp.lsp.clj:\

.emacsに、gtags-mode用の設定を追加する。:

(setq exec-path (cons "/usr/local/bin" exec-path))
(setq load-path (cons "/usr/local/share/gtags" load-path))
(setq gtags-suggested-key-mapping t)
(when (locate-library "gtags") (require 'gtags))
(add-hook 'c-mode-hook '(lambda () (gtags-mode 1)))
(add-hook 'java-mode-hook '(lambda () (gtags-mode 1)))
(add-hook 'clojure-mode-hook '(lambda () (gtags-mode 1)))

タグテーブル作成は、ソースツリーの最上位に移動して、以下の要領で実行。:

$ cd hoge/src
$ gtags --gtagslabel=exuberant-ctags

これでgtags-modeのいつもの要領で、.cljと.javaの両方に対して操作ができるようになった。:

TOPOLOGY         1396 jvm/backtype/storm/generated/Nimbus.java TOPOLOGY((short)4, "topology");
topology          171 clj/backtype/storm/clojure.clj (defalias topology thrift/mk-topology)
topology          531 jvm/backtype/storm/generated/Nimbus.java private StormTopology topology;
topology         1389 jvm/backtype/storm/generated/Nimbus.java private StormTopology topology; // required
topology           14 jvm/backtype/storm/scheduler/TopologyDetails.java StormTopology topology;

あと、現状の設定だと、gtags-modeでタグを探すときにカーソルを関数の上もっていっても、 Lisp系ではよくみられるらしいハイフンが入ったシンボル名を関数名と見なしてくれないのを直したいところ。