49 lines
1.3 KiB
EmacsLisp
49 lines
1.3 KiB
EmacsLisp
|
|
(defvar opam nil)
|
||
|
|
(defvar git-opam-url)
|
||
|
|
(defvar opam-vars '("lib" "libexec" "bin"
|
||
|
|
"sbin" "toplevel"
|
||
|
|
"share" "share_root"
|
||
|
|
"etc" "doc" "stublibs"))
|
||
|
|
(defvar utop nil
|
||
|
|
"the full path of utop")
|
||
|
|
|
||
|
|
(setf git-opam-url "https://github.com/ocaml/opam.git")
|
||
|
|
|
||
|
|
(defun opam-config-var (var)
|
||
|
|
(let ((command-string (concat "opam config var " var)))
|
||
|
|
(substring (shell-command-to-string command-string)
|
||
|
|
0 -1)))
|
||
|
|
|
||
|
|
(defun opam-config-env ()
|
||
|
|
(dolist (var (car (read-from-string
|
||
|
|
(shell-command-to-string
|
||
|
|
"opam config env --sexp"))))
|
||
|
|
(let ((var-name (car var))
|
||
|
|
(var-val (cadr var)))
|
||
|
|
(setenv var-name
|
||
|
|
(let ((old-v (getenv var-name)))
|
||
|
|
(if old-v
|
||
|
|
(concat old-v ":" var-val)
|
||
|
|
var-val)))))
|
||
|
|
(add-to-list 'load-path
|
||
|
|
(concat (opam-config-var "share")
|
||
|
|
"/emacs/site-lisp/")))
|
||
|
|
|
||
|
|
(defun check-opam ()
|
||
|
|
(if (not (which "opam"))
|
||
|
|
(progn (message "Please install opam")
|
||
|
|
nil)
|
||
|
|
(progn (opam-config-env)
|
||
|
|
(setq utop (which "utop"))
|
||
|
|
(unless utop
|
||
|
|
(message "Please install utop with (opam install utop)"))
|
||
|
|
utop)))
|
||
|
|
|
||
|
|
(register-mypkg
|
||
|
|
(list :name "opam"
|
||
|
|
:enabled (check-opam)
|
||
|
|
:packages nil
|
||
|
|
:init #'(lambda ()
|
||
|
|
(setq utop-command (concat utop " -emacs"))
|
||
|
|
(autoload 'utop "utop" "toplevel of ocaml" t))))
|