『epojava』その他
現状見つかっている不具合について
インデント(字下げ)問題(共通)
emacs19以前では public/protected/private
が付いたメソッドをうまくインデントしてくれません
(仕様がemacs20以降とで変わっており、対処困難なため未サポートです)。
また、 emacs20以降では標準で java2 の新機能、
public AAA = new ActionListener() {};
には
対応しておらず、epojava 独自のインデントスタイル設定を行っています
(cc-mode の c-vesion 5.25 及び 5.27 で動作確認)。
これに対する影響等御座いましたら
連絡等くださいますようよろしくお願いします。
epo のランチャ起動の件(Meadow + bash)
epjava は ant を起動する場合、
Windows 版では
ANT_HOME
に設定された、
D:\Java\Ant\jakarta-ant-1.4.1
というフォルダ名+
\bin\ant.bat
を起動するよう設定してあるのですが、そうすると
bash の場合
\
マークが消されてしまい、
D:JavaAntjakarta-ant-1.4.1ant.bat
を起動しようとしエラーとなる模様です。
epojava ではこの件を対処するため、
Windows 系の場合は epo のランチャ起動時にのみ
cmodproxy
を起動するように強制変更するようにしました。
その設定がどうしても嫌な場合は、
epocclib-explicit-shell-file-name
、
epocclib-shell-file-name
、
epocclib-shell-command-switch
が強制設定変更時の対象変数となっていますので、
~/.emacs
へ好みの設定を追加してください。
また、shell の設定がそもそもされていない方は、
以下を
~/.emacs
へ追加すると、
うまく起動するようになるかもしれません
(この設定は Meadow の場合のみです)。
(require 'mw32script)
(mw32script-init)
拡張子問題(Windows 系全部)
windows系のmule/XEmacs/Meadowで、
hogehoge.h
から
[prefix] g
で
hogehoge.C
(Cは大文字)を開こうとすると、
hogehoge.c
(cは小文字)ファイルを開こうとしてしまいます。
これはemacs-lispの標準関数
file-exists-p
がwindows系機種の場合どちらに対しても
t
を返すことに起因する問題で、
現在、積極的な対処法は判明しておりません。
一応消極的な手段として、サーチパスから .c を削除し、
(setq eponcc-src-extension '(".C" ".cc" ".ic" ".cpp" ".cxx" ".c++"))
とすることで、
hogeohge.C
(Cは大文字)
というファイルを開くことはできます(その場合、
hogehoge.c
(cは小文字)
というファイルがあると問題がでてきます)。
尚、この種の問題は unix では発生いたしません。
[prefix] C-r を利用したファイル間ジャンプ(Windows 系全部)
Windows には標準で
fgrep -l
がないため、Meadow 等で EPO をデフォルトのまま起動すると
EPO の基本機能、関連ジャンプ(
[prefix] C-r
)
が効かないという現象が発生しています。
これを回避するには、
下記のような手法のいづれかを取ります。
どれを用いても問題ないです。
- vector 等から grep.exe をダウンロードする。
http://www.vector.co.jp/soft/dos/util/se008484.html?l
- cygwinをインストールし grep を使えるようにする。
- Virtually Unix (UNIX エミュレータ)を利用する。
http://virtunix.itribe.net/
また、上記のどの手段を用いても
.emacs
に以下のような設定が必要です。
(setq epo:fgrep-l "起動するgrepのexe名絶対指定 -l")
具体例
(setq epo:fgrep-l "c:\\bin\\fgrep.exe -l")
ソースコード美文化
醜いソースコード、
見るに耐えない汚いソースコードを受け取ったことはないですか?
epojava では、
それら汚れたソースコードをある程度レベルまで美文化することもできます
(まぁ世界には手の施しようがないほど醜悪なものも中には存在しますが……)。
以下、epojava でソースコードをK&Rスタイルを用いて
美文化する場合の変更規則を掲載します。
尚、この機能はepojava 画面上で
M-Q
を押したときに実行されます。
- 規則:行先頭から最初にスペース以外の文字
が現れるまでに存在する tab 文字を全てスペースに変換します。
これは、ソースコードを印刷する場合に
極めて有効な機能です。
- 規則:ソースコード中に存在する tab 文字を
すべてスペースに変換します。
これは、vi で作成されたソースコードを
叩きなおすのに極めて有効な機能です。
尚、epocclib-delete-alltab
を nil
にすると削除しません。
デフォルトは t
です。
- 規則:#endif/#else の最後に文字列があって、
#ifdef と対応させるのは、ANSI 標準でないので、削除する。
また、#endif/#else の後ろにドキュメントで
#ifdef と対応させるのは、同じく ANSI の意思に反するので削除する。
尚、epocclib-erase-illegal-document
を nil
にすると削除しません。
デフォルトは t
です。
from
#ifdef _HOGE_H_
....
#endif _HOGE_H_ // file hoge.h is end
to
#ifdef _HOGE_H_
....
#endif
- 規則:while 等の後にある閉じ括弧に
/* while */ とか書いた分かりきったドキュメントが書かれている
コードは、同じく ANSI の意義を踏みにじっているので削除する。
尚、epocclib-erase-illegal-document
を nil
にすると削除しません。
デフォルトは t
です。
from
while(...) {
....
} /* while */
to
while() {
}
私的には、関数前のドキュメントに、
自分のクラス/関数名を書くとか、
ソースの先頭にファイル名や含まれるクラス/関数名を書くとかするのは
保守の点からいって非常によろしくないと思ってます。
ソフトウェアは更新/保守されるものです。
そのドキュメントを更新し忘れればいとも簡単に
「とても信用できないドキュメント(&ソースコード)」
ができあがります。
そして動作に関係ないドキュメント部の更新は人間工学的に忘れがちです。
もしそれをどうしてもやる必要がある
(カスタマが設定したソースコード製造基準で決められている/等)ならば、
計算機が関数名を張りつけるべきで、
手作業で行うことはやらない方が良いかと思います。
- 規則:
下記のようなソースを更正する。
尚、epocclib-erase-illegal-document
を nil
にすると削除しません。
デフォルトは t
です。
from
}
else /* ここはelse */
}
to
} else {
- 規則:
予約語(if等)で括弧がすぐ横にこないと
検索等で非常に面倒になることがあるので
(ドキュメント生成のためリバースエンジニアリングをかけようとしたとき等)
予約語後のスペースを殺す。
尚、epocclib-keyword-to-space
を t
にすると逆に1スペース入れます。
デフォルトは nil
です。
from
if (...
to
if(...
- 規則:
else if 形式で else のすぐ横に if がないようなソースを修正する。
from
else
if(...
to
else if(...
- 規則:
else が入り括弧の横にないようなソースは正す。
from
}
else
to
} else
- 規則:
K&Rスタイルに基づき入り括弧を
if / else / finaly / try の横に置く。
from
if(...)
{
to
if(...) {
from
else
{
to
else {
- 規則:
ただしそれがクラスまたは関数の場合(Java の場合にはクラスのみ)には、
真下に置き直す。
尚、epocclib-function-check
を nil
にするとこの処理は行いません。
デフォルトは t
です。
from
void foo(...) {
to
void foo(...)
{
- 先頭から最後までインデントを調整する。
補足:その他の設定
epojava を使用したところ、
色が付かなくなったなどの症状がでた場合は、
次を調べてください。
色付け
色付けの設定です。まだ色付けができていない、
というかたは ~/.emacs
に以下をつけてみてください。
下記の色付け設定はちょっとの改造で、
perl や emacs-lisp、info などにも付けられます。
詳しくは emacs の入門書を参考にしてくださいませ。
;;; font 設定
(if (not window-system)
nil
(set-cursor-color "black")
(set-mouse-color "black")
(set-background-color "white")
(load-library "font-lock")
(copy-face 'default 'function-name-face)
(set-face-foreground 'function-name-face "blue")
(setq font-lock-function-name-face 'function-name-face)
(copy-face 'default 'keyword-face)
(set-face-foreground 'keyword-face "magenta")
(setq font-lock-keyword-face 'keyword-face)
(copy-face 'default 'string-face)
(set-face-foreground 'string-face "maroon")
(setq font-lock-string-face 'string-face)
(copy-face 'default 'comment-face)
(set-face-foreground 'comment-face "blueviolet")
(setq font-lock-comment-face 'comment-face)
(copy-face 'default 'type-face)
(set-face-foreground 'type-face "firebrick")
(setq font-lock-type-face 'type-face)
(if (>= (string-to-int emacs-version) 20)
(progn
(setq c-font-lock-keywords c-font-lock-keywords-3)
(setq c++-font-lock-keywords c++-font-lock-keywords-3)
(setq java-font-lock-keywords java-font-lock-keywords-3)
(add-hook 'java-mode-hook '(lambda () (font-lock-mode 1))))
(setq c-font-lock-keywords c-font-lock-keywords-2)
(setq c++-font-lock-keywords c++-font-lock-keywords-2))
(add-hook 'c-mode-hook '(lambda () (font-lock-mode 1)))
(add-hook 'c++-mode-hook '(lambda () (font-lock-mode 1))))
ando@park.ruru.ne.jp