emacsでtuareg-modeを使用するときにannotファイルへのパスを指定する方法はありますか?関数のタイプを調べようとしていますが、モードで「注釈ファイルではありません」というメッセージが表示されます。
私のビルド構造は次のとおりです。
lib
obj
*.o
*.cmi
*.cmx
*.annot
src
*.ml
*.mli
emacsでtuareg-modeを使用するときにannotファイルへのパスを指定する方法はありますか?関数のタイプを調べようとしていますが、モードで「注釈ファイルではありません」というメッセージが表示されます。
私のビルド構造は次のとおりです。
lib
obj
*.o
*.cmi
*.cmx
*.annot
src
*.ml
*.mli
これを簡単に設定できるとは思いません。ocamlインストールcaml-types-locate-type-fileのファイルにある関数を見てください。caml-types.el
.annotファイルを検索する機能です。おそらくそれを編集して(生成されたファイルを置く"_build"場所です)をそれで置き換えて実行することができます。ocamlbuildobj
はるかに優れたオプションは、で変数を定義し、それをファイル.emacs.elで使用することです。caml-types.elこのようにして、ocamlの人々にパッチを提案することもできます。
次のコードで十分です。新しいカスタマイズ変数を作成し(カスタマイズグループにはバインドしていませんが、必要に応じてバインドできます)、その変数を検索するディレクトリのリストとして使用します。
(defcustom caml-types-annot-directories-search
'("_build" "obj" "../obj")
"List of directories to search for .annot files"
:type '(repeat string)
)
(defun or-list (f lst)
(if (null lst) nil
(if (apply f (car lst) nil)
(car lst)
(or-list f (cdr lst)))))
(add-hook 'tuareg-mode-hook
(lambda ()
(defun caml-types-locate-type-file (target-path)
(let ((sibling (concat (file-name-sans-extension target-path) ".annot")))
(if (file-exists-p sibling)
sibling
(let ((project-dir (file-name-directory sibling))
(test-dir (lambda (prefix)
(message "Prefix is %s" prefix)
(setq type-path
(expand-file-name
(file-relative-name sibling project-dir)
(expand-file-name prefix project-dir)))
(message "Testing %s" type-path)
(file-exists-p type-path)))
type-path)
(while (not (or-list test-dir caml-types-annot-directories-search))
(if (equal project-dir (caml-types-parent-dir project-dir))
(error (concat "No annotation file. "
"You should compile with option \"-annot\".")))
(setq project-dir (caml-types-parent-dir project-dir)))
type-path))))))
#ソフトリンク.annotファイルを使用して、Emacsのtuareg-modeがそれらを見つけられるようにします mkdir -p _build `find lib / obj -name*.annot`のfの場合; do ln -s ../$f _build /; 終わり