diff --git a/settings.org b/settings.org index 61d8637..fbf8704 100644 --- a/settings.org +++ b/settings.org @@ -326,29 +326,37 @@ This handy function is a customized ripoff of custom-save-all (setq venv-name "emacs-default-venv"))) (rlbr/setup-python-venv-dirlocals library-root venv-name) venv-name)) - + (require 'dash) (defun rlbr/init-venv () (when (eq major-mode 'python-mode) - (unless (apply - 'string-prefix-p - (mapcar - 'file-truename - (list - (pyvenv-workon-home) - buffer-file-name))) - (if (and pyvenv-workon (not (member pyvenv-workon (pyvenv-virtualenv-list)))) - (if (y-or-n-p - (format "Venv '%s' is specified but does not exist. Create it?" pyvenv-workon)) + (unless + (let ((buffer-file-name (file-truename buffer-file-name))) + (-any (lambda (file-prefix) (string-prefix-p file-prefix buffer-file-name)) + (mapcar 'file-truename + (list + (elpy-rpc-get-or-create-virtualenv) + (pyvenv-workon-home))))) + (cond + ((and pyvenv-workon (not (member pyvenv-workon (pyvenv-virtualenv-list)))) + (if (y-or-n-p + (format "Venv '%s' is specified but does not exist. Create it?" pyvenv-workon)) + (progn (pyvenv-create pyvenv-workon (rlbr/get-python-executable)) - ((rlbr/save-buffer-func-to-file - (let ((default-directory (elpy-library-root))) - (expand-file-name - ".dir-locals.el")) - 'delete-dir-local-variable - '(python pyvenv-workon)))) + (pyvenv-workon pyvenv-workon)) + (rlbr/save-buffer-func-to-file + (let ((default-directory (elpy-library-root))) + (expand-file-name + ".dir-locals.el")) + 'add-dir-local-variable + '(python-mode pyvenv-workon "emacs-default-venv")) + (setq-local + pyvenv-workon + "emacs-default-venv"))) + ((not pyvenv-workon) (setq-local pyvenv-workon - (rlbr/init-python-venv-in-library-root))))))) + (rlbr/init-python-venv-in-library-root)))) + (pyvenv-workon pyvenv-workon)))) #+END_SRC *** bindings/settings #+BEGIN_SRC emacs-lisp