2013年2月25日月曜日

gentooで emacs + cscope を使ってタグジャンプでコードを飛びまくる

やっぱりエディタで気になるのがタグジャンプですよね、これが無いとちょっとソースコードがディレクトリまみれになった途端、どうにも立ち回りができなくなって不自由を強いられます。 で、gentooもEclipseとかGUIなエディタもあるのですが、やっぱりemacsが好きということで...それでやってみる まず、cscopeをいれる、USEフラグを設定してemacsのxcscope.elも一緒に入るようにする

USEフラグを設定

karky7 ~ # flaggie dev-util/cscope +emacs

cscopeをemergeする

karky7 ~ # emerge -pv dev-util/cscope
These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R    ] dev-util/cscope-15.8a  USE="emacs" 588 kB

karky7 ~ # emerge dev-util/cscope

cscopeコマンドでタグを作成する


例えばZendFrameworkのソースコードを閲覧するためにcscopeタグを作成する、面倒くさいのでインストール済みのコードを拝借しちゃう
cuomo@karky7 ~ $ cd workspace/
cuomo@karky7 ~/workspace $ cp -rf /usr/share/php/Zend ~/workspace/Zend
この辺は、適当にもってきて配置してください

タグファイルを配置するディレクトリを作成


cscopeが吐くタグを保存するディレクトリを作成しそこへ、タグファイルを作成する。 タグを作成する、スクリプトは適当に作成してそれを実行する
cuomo@karky7 ~/workspace $ mkdir -p ~/workspace/db/Zend

スクリプトの実行


簡単なシェルスクリプトのなので、適当に作成してchmod 0755 辺りに設定してください
cuomo@karky7 ~/workspace $ mkdir -p ~/workspace/db/Zend
cuomo@karky7 ~/workspace $ ./zend_cscope_tag_create.sh
Find ...
Change dir ... [ /home/cuomo/workspace/db/Zend ]
Create cscope index ... run [ /usr/bin/cscope -bqk ]
cuomo@karky7 ~/workspace $
これで、~/workspace/db/Zend/に4つのファイルができているはず
実行スクリプトはこちら、とりあえずphpとphtmlに絞ってある
ZEND_SRC_PATH=~/workspace/Zend
CSCOPE_DB=~/workspace/db/Zend

find -L ${ZEND_SRC_PATH} -name "*.php" -print > ${CSCOPE_DB}/cscope.files
find -L ${ZEND_SRC_PATH} -name "*.phtml" -print >> ${CSCOPE_DB}/cscope.files
echo "Find ..."
echo "Change dir ... [ ${CSCOPE_DB} ]"
cd  ${CSCOPE_DB}
echo "Create cscope index ... run [ /usr/bin/cscope -bqk ]"
/usr/bin/cscope -bqk

.emacsに追加する


init.elでも.emacsでもいいので、タグのファイルを読み込むように設定しておく(自分はload-fileで読み込ませていますが)
(require 'xcscope)
(setq cscope-do-not-update-database t)
(setq cscope-database-regexps
   '(
      ("^/home/cuomo/workspace/"
      ("/home/cuomo/workspace/db/Zend" ("-q"))
    )
))
(set-face-foreground 'cscope-file-face "MediumSeaGreen")
(set-face-foreground 'cscope-function-face "yellow")
(set-face-foreground 'cscope-line-number-face "red")
(set-face-foreground 'cscope-line-face "yellow")
(set-face-foreground 'cscope-mouse-face "blue")
これで、設定は完了、emacsを起動して.emacsを読み込ませる(M-x load-file)



例えば「Zend_Config_Ini」を探してみる、Zend_Config_iniへカーソルをのせ、emacsで以下のコマンド 「C-c s d」とやると...


検索結果が右のペインへ表示される


そして検索結果に、カーソルを合わせて「スペース」キーを押すとそのファイルに飛んでいける、複数ある場合もそれだけでいける、これだけでも結構使える

 他には、「C-c s c」で、カーソルに合わせた関数をコールしている箇所を全部拾ってくる、もちろん「スペースキー」で飛んでいける






これは便利でしょう、もう止められません。

cscopeその他のコマンド


まだたくさんのキーバインドがあるのですがこれだけとりあえず覚えてしまえば結構っていうかほぼ問題ない
  • C-c s s ・・・ (カーソルが置かれた)シンボルを検索
  • C-c s d ・・・ (カーソルが置かれた)シンボルの定義を検索
  • C-c s c ・・・  (カーソルが置かれた)関数を呼んでいる関数群を検索
  • C-c s C ・・・ (カーソルが置かれた)関数から呼び出している関数群を検索
  • C-c s t ・・・ テキスト文字列を検索
  • C-c s e ・・・ egrepパターンで検索
  • C-c s f ・・・ ファイル検索
  • C-c s i ・・・ #include してるファイルを検索
  • C-c s u ・・・ マークをポップ(スペースキーを押した履歴を遡って戻ってくれる)
と言うわけで、これで、Eclipseいらずですね、笑...まして、会社の開発用のPCは...この辺で止めておきましょう

0 件のコメント:

コメントを投稿