Windows環境のEmacsへPygmentsパーサーを導入


はじめに

以前からwindows版EmacsでGNU GLOBALを使用させてもらっていました。
最近、C#の勉強しているので以前から存在だけは知っていたPygmentsパーサーを利用してC#のタグを作成できるように作業をしました。
その中で少しハマったところがあったのでメモを残しておきます。

環境

利用環境は以下です。

環境変数には以下が設定されています。

変数 値(例)
HOME D:\emacs
Path D:\emacs\bin

Pythonの実行環境をインストール

まずは、Pygmentsを動かすためにPythonの実行環境をインストールします。
Windows向けPythonも色々なバージョンがあるのでどれを導入したらいいのか迷いましたが
python.orgの64bitインストーラ版を使用しました。
バージョンは「Python 3.7.4 - July 8, 2019」でした。
(EmacsもGNU GLOBALも32bit版ですが、64bitで動作しました。32bit版でも動作します。途中切り分けで両方試しました…)

注意点は

  • 「Add Python 3.7 to PATH」のチェックを入れる
  • インストール先を「D:\Python\Python37」に変更しました。※必ず変更する必要はなし
  • インストール後にOSを再起動する。

OS再起動後のeshell又はDOSプロンプトで「pip --version」と入力して
バージョンが表示さればPythonのインストールはOKです。

$ pip --version
pip 19.1.1 from d:\python\python37\lib\site-packages\pip (python 3.7)

Pygmentsパーサーをインストール

以下のコマンドを実行してPygmentsパーサーをインストールします。

$ pip install Pygments

インストール後にバージョン情報が表示されればOKです。

$ pygmentize -V
Pygments version 2.4.2, (c) 2006-2019 by Georg Brandl.

exuberant ctags 日本語対応をインストール

Emacsのbinフォルダには、既にctags.exeが存在していましたが
このファイルを利用すると以下のエラーが発生しました。

ctags: unrecognized option '--filter'
    Try 'ctags --help' for a complete list of options.

以下のサイトからexuberant ctags 日本語対応Win32版(バイナリのみ)をダウンロードしてbinフォルダにコピーしました。
http://hp.vector.co.jp/authors/VA025040/ctags/

gtags.confをコピー

GNU GLOBALに付属の「gtags.conf」をコピーします。
環境変数に以下の値を追加します。値は環境に合わせて変更可能です。

変数 値(例)
GTAGSCONF D:\emacs.emacs.d\gtags.conf

追加した値と同じパスにgtags.confをコピーしておきます。

動作確認

この時点で動作すると思っていたのですが、C#のタグを作りたいディレクトリで
「gtags --gtagslabel=pygments」コマンドを入力すると以下のエラーが発生しました。

$ gtags --gtagslabel=pygments
python: can't open file 'd:\emacs\bin\../share/gtags/script/pygments_parser.py': [Errno 2] No such file or directory

pygments_parser.pyをコピー

いきなり身に覚えがないディレクトリが出てきて戸惑いましたが
「pygments_parser.py」はGNU GLOBALに付属していたので指定されたフォルダを作成して、そこにコピー。
今回の場合は「D:\emacs\share\gtags\script\pygments_parser.py」
※このディレクトリは誰が指定しているのは謎のまま…

これでエラーが解消され動くようになりました。

gtags.confを修正

最後に、gtagsコマンドに毎回オプションを付けるが億劫なのでgtags.confを編集
ファイルの頭の方にある以下の記述を

gtags.conf
default:\
    :tc=native:

以下のように書き換え、

gtags.conf
default:\
  :tc=native:tc=pygments:

これで普段はgtags.exeを使用してC#など追加言語はpygmentsを使用する様になります。

終わりに

上記の手順でgtagsコマンドでPygmentsパーサーを使用したタグが出力されるようになりました。
C#の場合、gtags.exeだけでも一部のタグは出力してくれます。
だたし、シンボルとリファレンスが別れていないので微妙に使いづらかったのでこれが解消されてとりあえずは満足。

参考リンク

https://qiita.com/yoshizow/items/9cc0236ac0249e0638ff
http://cha.la.coocan.jp/doc/gnu_global_with_pygments.html