doomemacs/modules/lang/python/autoload/python.el
2019-03-04 20:48:52 -05:00

54 lines
2.2 KiB
EmacsLisp

;;; lang/python/autoload/python.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +python/open-repl ()
"Open the Python REPL."
(interactive)
(unless python-shell-interpreter
(user-error "`python-shell-interpreter' isn't set"))
(pop-to-buffer
(process-buffer
(if-let* ((pipenv (+python-executable-find "pipenv"))
(pipenv-project (pipenv-project-p)))
(let ((default-directory pipenv-project)
(python-shell-interpreter-args
(format "run %s %s"
python-shell-interpreter
python-shell-interpreter-args))
(python-shell-interpreter pipenv))
(run-python nil t t))
(run-python nil t t)))))
;;;###autoload
(defun +python/open-ipython-repl ()
"Open an IPython REPL."
(interactive)
(let ((python-shell-interpreter (or (+python-executable-find "ipython") "ipython"))
(python-shell-interpreter-args (string-join +python-ipython-repl-args " ")))
(+python/open-repl)))
;;;###autoload
(defun +python/open-jupyter-repl ()
"Open a Jupyter console."
(interactive)
(add-to-list 'python-shell-completion-native-disabled-interpreters "jupyter")
(let ((python-shell-interpreter (or (+python-executable-find "jupyter") "jupyter"))
(python-shell-interpreter-args (format "console %s" (string-join +python-jupyter-repl-args " "))))
(+python/open-repl)))
;;;###autoload
(defun +python-executable-find (exe)
"TODO"
(if (file-name-absolute-p exe)
(file-executable-p exe)
(let ((exe-root (format "bin/%s" exe)))
(cond ((when python-shell-virtualenv-root
(let ((bin (expand-file-name exe-root python-shell-virtualenv-root)))
(if (file-exists-p bin) bin))))
((when (bound-and-true-p conda-env-current-name)
(let ((bin (expand-file-name (concat conda-env-current-name "/" exe-root)
(conda-env-location))))
(if (file-executable-p bin) bin))))
((when-let* ((bin (projectile-locate-dominating-file default-directory "bin/python")))
(setq-local doom-modeline-python-executable (expand-file-name "bin/python" bin))))
((executable-find exe))))))