From 6bd902f1a3809dd68e408723555acae17dc27c3b Mon Sep 17 00:00:00 2001 From: Alyssa Kwan Date: Sat, 12 Sep 2015 12:37:44 -0700 Subject: [PATCH] :get venv for cur buffer based on venv/*/.project --- pyvenv.el | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/pyvenv.el b/pyvenv.el index 138102f..7c61698 100644 --- a/pyvenv.el +++ b/pyvenv.el @@ -433,6 +433,40 @@ This is the value of $WORKON_HOME or ~/.virtualenvs." (or (getenv "WORKON_HOME") (expand-file-name "~/.virtualenvs"))) +(defun pyvenv-virtualenv-for-directory (directory) + "Return the virtualenv local to the directory." + (setq directory (file-name-as-directory + (expand-file-name directory))) + (let ((directory-name (file-name-nondirectory + (directory-file-name directory))) + (workon-home (file-name-as-directory + (pyvenv-workon-home))) + (virtualenv-list (pyvenv-virtualenv-list t)) + (virtualenv nil) + (result nil)) + (catch 'break + (while (setq virtualenv (car virtualenv-list)) + (let* ((virtualenv-directory (file-name-as-directory + (concat workon-home virtualenv))) + (virtualenv-project-file (concat virtualenv-directory ".project"))) + (if (file-readable-p virtualenv-project-file) + (let ((virtualenv-project-list (mapcar + (lambda (line) + (replace-regexp-in-string + (rx (or (: bos (* (any " \t\n"))) + (: (* (any " \t\n")) eos))) + "" + line)) + (with-temp-buffer + (insert-file-contents virtualenv-project-file) + (split-string (buffer-string) "\n" t))))) + (if (member directory-name virtualenv-project-list) + (throw 'break virtualenv))))) + (setq virtualenv-list (cdr virtualenv-list)))))) + +(defun pyvenv-default-virtualenv () + (pyvenv-virtualenv-for-directory default-directory)) + ;;; Compatibility (when (not (fboundp 'file-name-base))