From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 7D34481792 for ; Thu, 20 Jun 2013 03:10:48 +0200 (CEST) Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of berenger@riken.jp) identity=pra; client-ip=134.160.33.162; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="berenger@riken.jp"; x-sender="berenger@riken.jp"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of berenger@riken.jp designates 134.160.33.162 as permitted sender) identity=mailfrom; client-ip=134.160.33.162; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="berenger@riken.jp"; x-sender="berenger@riken.jp"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of postmaster@postman.riken.jp designates 134.160.33.162 as permitted sender) identity=helo; client-ip=134.160.33.162; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="berenger@riken.jp"; x-sender="postmaster@postman.riken.jp"; x-conformance=sidf_compatible; x-record-type="v=spf1" X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhcBAMZVwlGGoCGinGdsb2JhbABagzoBrT6SIYEWDgEBAQEBBhYJPIIjAQEEATIBBTYKEQsYCQQSDwkDAgECAQ8kEhMGAgEBDgmHYQMJBgyzLQMKiFKMXYJsg2EDiR6MPIFngSmEeIV/iEI X-IPAS-Result: AhcBAMZVwlGGoCGinGdsb2JhbABagzoBrT6SIYEWDgEBAQEBBhYJPIIjAQEEATIBBTYKEQsYCQQSDwkDAgECAQ8kEhMGAgEBDgmHYQMJBgyzLQMKiFKMXYJsg2EDiR6MPIFngSmEeIV/iEI X-IronPort-AV: E=Sophos;i="4.87,901,1363129200"; d="scan'208";a="22566689" Received: from postman2.riken.jp (HELO postman.riken.jp) ([134.160.33.162]) by mail2-smtp-roc.national.inria.fr with ESMTP; 20 Jun 2013 03:10:46 +0200 Received: from postman.riken.jp (postman2.riken.jp [127.0.0.1]) by postman.riken.jp (Postfix) with SMTP id 5D3711260198 for ; Thu, 20 Jun 2013 10:10:43 +0900 (JST) Received: from [172.27.98.103] (rikad98.riken.jp [134.160.214.98]) by postman.riken.jp (Postfix) with ESMTPA id 8959F1270051 for ; Thu, 20 Jun 2013 10:10:42 +0900 (JST) Message-ID: <51C25692.6090709@riken.jp> Date: Thu, 20 Jun 2013 10:10:42 +0900 From: Francois Berenger User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130510 Thunderbird/17.0.6 MIME-Version: 1.0 To: caml-list@inria.fr References: <87li6z8x0m.fsf@ieee.org> <20130528.102112.1182989008075506917.Christophe.Troestler@umons.ac.be> <878v2qj57l.fsf@kingston.cl.cam.ac.uk> <1C112B3B-7E63-4221-9312-96F4400ACCB4@ieee.org> In-Reply-To: <1C112B3B-7E63-4221-9312-96F4400ACCB4@ieee.org> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit X-PMX-Version: 6.0.0.2142326, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2013.6.20.5725 Subject: Re: [Caml-list] Setting up OPAM in emacs On 06/20/2013 01:06 AM, Ivan Gotovchits wrote: > I don't (want to) understand the details of why opam switches don't > work well with Emacs right now, My guess is that it is because OPAM sets up env. variables and emacs keep using the ones it knew once it was launched. > or of any of the proposed solutions. > Is there a solution integrated in OPAM by now? If not, is there a > consensus on what simple users like me should use to solve the > problem? Could you (the thread participants) decide on something, and > send that to the OPAM upstream, so that future versions solve this > issue? > > (The immediate problem I observe is that compile-command does not use > the OCaml versions I would expect it to, in general defaulting to my > system OCaml -- that may depend on the way Emacs is launched. More > sophisticated things such as being able to call "opam switch" from > inside Emacs are probably secondary needs, and I would be fine with a > basic integration not supporting that, and letting people hone their > emacs-lisp skills for that.) > > On Tue, Jun 4, 2013 at 4:55 PM, Leo White wrote: >> My personal solution for Tuareg mode is to put: >> >> ;; Use OPAM's ocaml >> (setq tuareg-interactive-program "opam config exec ocaml") >> >> in my .emacs. >> >> Regards, >> >> Leo >> >> Wojciech Meyer writes: >> >>> Christophe's function hook is probably much better and elegant solution, >>> but this works for me: >>> >>>>> >>> (defun dm-opam-switch-root (ocaml-version opam-root) >>> (interactive "sOCaml version: \nsOPAM root: ") >>> (let* ((path (if (string-match "\\.opam" (car exec-path)) (cdr exec-path) exec-path)) >>> (entry >>> (replace-regexp-in-string >>> "\n" "" >>> (shell-command-to-string >>> (format "opam switch --root %s %s > /dev/null && opam config env | sed -n 's/^PATH=\\([^:]\\+\\):.*$/\\1/p'" opam-root ocaml-version)))) >>> (env-path (replace-regexp-in-string "\n" "" (shell-command-to-string (format "opam config env --root %s | sed -n 's/^PATH=\\(.*\\)/\\1/p'" opam-root))))) >>> (setq exec-path (cons entry path)) >>> (setenv "PATH" env-path))) >>> >>> (defun dm-opam-switch (ocaml-version) >>> (interactive "sOCaml version: ") >>> (dm-opam-switch-root ocaml-version "~/.opam")) >>> << >>> >>> I wouldn't say myself it's a perfect script, but it works. Note that I >>> use a lot of shell trickery instead of Emacs buffers, which is probably >>> not a good idea. >>> >>> You just say M-x dm-opam-switch, and indicate which version you would >>> like. >>> >>> Best, >>> Wojciech >>> >>> Christophe TROESTLER writes: >>> >>>> On Tue, 28 May 2013 09:59:53 +0400, Ivan Gotovchits wrote: >>>>> >>>>> 2. Use «eval `opam env config`» in the begining of a compile-command. >>>>> This works fine when you switch compiler, but other commands, such as >>>>> «C-c C-s» doesn't use new environment. >>>> >>>> I use this for the compilation: >>>> >>>> ;; OPAM compilation — one must update to the current compiler >>>> ;; before launching the compilation. >>>> (defadvice compile (before compile-opam activate) >>>> "Run opam to update environment variables" >>>> (set (make-local-variable 'compilation-environment) >>>> (with-temp-buffer >>>> (ignore-errors (call-process "opam" nil t nil "config" "-env")) >>>> (goto-char (point-min)) >>>> (while (re-search-forward "; *export.*$" nil t) >>>> (replace-match "" nil nil)) >>>> (split-string (buffer-substring 1 (point-max))) >>>> ))) >>>> >>>> For the toplevel, I am afraid one needs to restart it. I guess a >>>> similar trick is possible to automatically select the right one. >>>> >>>> Hope it helps, >>>> C. >> >> -- >> Caml-list mailing list. Subscription management and archives: >> https://sympa.inria.fr/sympa/arc/caml-list >> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners >> Bug reports: http://caml.inria.fr/bin/caml-bugs >