Skip to content

Commit

Permalink
Make auto-workon work with text files containing virtualenv name
Browse files Browse the repository at this point in the history
This way you can keep all your virtualenvs in one place and can reuse
the same virtualenv for multiple projects.

Virtualfish (virtualenvwrapper for fish shell) does this as well,
see: http://virtualfish.readthedocs.io/en/latest/plugins.html#auto-activation-auto-activation
  • Loading branch information
dakra committed Aug 9, 2017
1 parent 5649028 commit bb8cafd
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 9 deletions.
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -324,10 +324,11 @@ instead:
(projectile-find-file)))
```

As long as a virtualenv is found in the `projectile-project-root` and
whose name is in the list `venv-dirlookup-names` it will be
automatically activated. By default, it's value is `'(".venv", "venv")'`,
but you can set if however you like to match your naming conventions:
As long as a virtualenv or a text file with the name of the virtualenv is
found in the `projectile-project-root` and whose name is in the list
`venv-dirlookup-names` it will be automatically activated. By default, it's
value is `'(".venv", "venv")'`, but you can set if however you like to match
your naming conventions:

```lisp
(setq venv-dirlookup-names '(".venv" "pyenv" ".virtual"))
Expand Down
17 changes: 12 additions & 5 deletions virtualenvwrapper.el
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,19 @@ to activate when one of them is found."
"If a venv in the projetile root exists, activates it.
Set your common venvs names in `venv-dirlookup-names'"
(let ((path (--first
(file-exists-p it)
(--map (concat (projectile-project-root) it)
venv-dirlookup-names))))
(file-exists-p it)
(--map (concat (projectile-project-root) it)
venv-dirlookup-names))))
(when path
(setq venv-current-name path) ;; there's really nothing that feels good to do here ;_;
(venv--activate-dir path))))
;; If the PATH is a regular and readable file, read the first
;; string in this file and use it to active the virtualenv.
(if (and path (file-regular-p path) (file-readable-p path))
(with-temp-buffer
(insert-file-contents path)
(venv-workon (car (split-string (buffer-string) "\n" t))))
;; PATH is not a file, assume it's a virtualenv directory and activate it
(setq venv-current-name path) ;; there's really nothing that feels good to do here ;_;
(venv--activate-dir path)))))


;; internal utility functions
Expand Down

0 comments on commit bb8cafd

Please sign in to comment.