diff --git a/modules/lang/python/autoload/pyenv.el b/modules/lang/python/autoload/pyenv.el new file mode 100644 index 000000000..0bc5b33cc --- /dev/null +++ b/modules/lang/python/autoload/pyenv.el @@ -0,0 +1,30 @@ +;;; lang/python/autoload/pyenv.el -*- lexical-binding: t; -*- +;;;###if (featurep! +pyenv) + +;;;###autoload +(defvar +pyenv--version nil) + +;;;###autoload +(defun +python-pyenv-mode-set-auto-h () + "Set pyenv-mode version from buffer-local variable." + (when (eq major-mode 'python-mode) + (when (not (local-variable-p '+pyenv--version)) + (make-local-variable '+pyenv--version) + (setq +pyenv--version (+python-pyenv-read-version-from-file))) + (if +pyenv--version + (pyenv-mode-set +pyenv--version) + (pyenv-mode-unset)))) + +;;;###autoload +(defun +python-pyenv-read-version-from-file () + "Read pyenv version from .python-version file." + (when-let (root-path (projectile-locate-dominating-file default-directory ".python-version")) + (let* ((file-path (expand-file-name ".python-version" root-path)) + (version + (with-temp-buffer + (insert-file-contents-literally file-path) + (string-trim (buffer-string))))) + (if (member version (pyenv-mode-versions)) + version ;; return. + (message "pyenv: version `%s' is not installed (set by `%s')." + version file-path))))) diff --git a/modules/lang/python/config.el b/modules/lang/python/config.el index 4310e6401..43a8fc29e 100644 --- a/modules/lang/python/config.el +++ b/modules/lang/python/config.el @@ -223,7 +223,9 @@ called.") :config (pyenv-mode +1) (when (executable-find "pyenv") - (add-to-list 'exec-path (expand-file-name "shims" (or (getenv "PYENV_ROOT") "~/.pyenv"))))) + (add-to-list 'exec-path (expand-file-name "shims" (or (getenv "PYENV_ROOT") "~/.pyenv")))) + (add-hook 'python-mode-hook #'+python-pyenv-mode-set-auto-h) + (add-hook 'doom-switch-buffer-hook #'+python-pyenv-mode-set-auto-h)) (use-package! conda