Set python version from .python-version file

This allow Doom Emacs to behave like shims, and respect Pyenv version
chosen by .python-version file.

Stolen from b252d252b0/layers/+lang/python/funcs.el (198).
This commit is contained in:
Étienne BERSAC 2019-09-23 10:14:19 +02:00
parent f03eb67314
commit 16ea03df4d
No known key found for this signature in database
GPG key ID: 932A5BA4CFF8792B
2 changed files with 33 additions and 1 deletions

View file

@ -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)))))

View file

@ -211,7 +211,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