Closed GuyShane closed 4 years ago
Thanks for your contribution submission, Shane. Two thoughts…
I'm not sure what problem this change is intended to solve. Perhaps you can elaborate?
This change breaks functionality upon which my workflow depends. Namely, being able to run deactivate
when the virtual environment in question was activated by something other than manually invoking workon
. For example:
~ ➤ vf tmp -p python3
(tempenv-4d1a11231948) ~ ➤ [… do things in temporary environment… ]
(tempenv-4d1a11231948) ~ ➤ deactivate
fish: Unknown command: deactivate
fish:
deactivate
^
… and then I am sad. 😞
Of course, I could run vf deactivate
instead, but that's extra typing and at this point goes against years of muscle-memory.
Ah okay, sorry about that! I was hoping to more closely replicate the virtualenv behaviour where deactivate is only defined when there is something active. I wrote a similar utility for activating docker machines and it uses a temporary deactivate function too, so I didn't want to have a deactivate function permanently defined. But I don't want to break your workflow! I have this change in my local copy and that's working for me
No worries. I'm not opposed to the proposed functionality itself, provided that it behaves consistently regardless of how the virtual environment was activated. I imagine that would involve changes to the core activate and deactivate functions, as opposed to only changing the compat_aliases
plugin.
Thanks again for your contribution, Shane. I appreciate what you were trying to accomplish in this pull request, so I came up with a solution that should be consistent regardless of how virtual environments are activated.
Thanks to b6dd00f0c1df3df1cb46a173786db1b4d85c4599, the deactivate
alias is only defined when the virtualenv_did_activate
event fires, and the alias is undefined when the virtualenv_did_deactivate
event fires. This feature is included in the just-shipped VirtualFish 2.1 release. ✨
Move definition of the deactivate function inside workon, so it is only defined when using a virtual environment. Then when deactivate is called, it removes itself from the session.