| @@ -2018,7 +2018,9 @@ initializing." | |||
| "Venv directory path. | |||
| This variable is intended to be explicitly set by user. | |||
| When nil, `with-venv' tries to find suitable venv dir.") | |||
| When nil, `with-venv' tries to find suitable venv dir. | |||
| When this variable is set , use this value without checking if it is a valid | |||
| python environment.") | |||
| (defmacro with-venv-dir (dir &rest body) | |||
| "Set python environment to DIR and execute BODY. | |||
| @@ -2029,7 +2031,7 @@ If dir is nil, execute BODY as usual." | |||
| (--with-venv-exec-path-orig (cl-copy-list exec-path))) | |||
| (unwind-protect | |||
| (progn | |||
| (when dir | |||
| (when ,dir | |||
| ;; Do the same thing that bin/activate does | |||
| (setq exec-path | |||
| (cons (concat ,dir "/bin") | |||
| @@ -2043,6 +2045,9 @@ If dir is nil, execute BODY as usual." | |||
| (setq exec-path | |||
| --with-venv-exec-path-orig)))) | |||
| (defvar-local with-venv-previously-used nil | |||
| "Previously used venv dir path.") | |||
| (defmacro with-venv (&rest body) | |||
| "Execute BODY with venv enabled. | |||
| @@ -2051,32 +2056,29 @@ suitable environment was found." | |||
| `(with-venv-dir | |||
| ;; If set explicitly use it | |||
| ,(or with-venv-venv-dir | |||
| (with-venv-find-venv-dir)) | |||
| (with-venv-check-exists with-venv-previously-used) | |||
| (setq with-venv-previously-used (with-venv-find-venv-dir))) | |||
| ,@body)) | |||
| (defvar-local with-venv-previously-used nil | |||
| "Previously used venv dir path.") | |||
| (defun with-venv-find-venv-dir (&optional dir) | |||
| "Try to find venv dir for DIR. | |||
| If none found return nil." | |||
| (with-temp-buffer | |||
| (when dir | |||
| (cd dir)) | |||
| (let ((result (or | |||
| ;; Check used previously | |||
| (with-venv-check-exists | |||
| with-venv-previously-used) | |||
| ;; Check pipenv | |||
| (with-venv-check-exists | |||
| (with-venv--find-venv-dir-pipenv)) | |||
| ;; Check poetry | |||
| (with-venv-check-exists | |||
| (with-venv--find-venv-dir-poetry)) | |||
| ;; Search for .venv dir | |||
| (with-venv-check-exists | |||
| (with-venv--find-venv-dir-by-name))))) | |||
| (setq with-venv-previously-used | |||
| result)))) | |||
| (or | |||
| ;; Check used previously | |||
| (with-venv-check-exists | |||
| with-venv-previously-used) | |||
| ;; Check pipenv | |||
| (with-venv-check-exists | |||
| (with-venv--find-venv-dir-pipenv)) | |||
| ;; Check poetry | |||
| (with-venv-check-exists | |||
| (with-venv--find-venv-dir-poetry)) | |||
| ;; Search for .venv dir | |||
| (with-venv-check-exists | |||
| (with-venv--find-venv-dir-by-name))))) | |||
| (defun with-venv--find-venv-dir-pipenv () | |||
| "Try to find venv dir via pipenv." | |||