10sr 7 лет назад
Родитель
Сommit
9d774fa960
Подписано: 10sr Идентификатор GPG ключа: 7BEC428194130EB2
1 измененных файлов: 35 добавлений и 10 удалений
  1. +35
    -10
      emacs.el

+ 35
- 10
emacs.el Просмотреть файл

@@ -2020,7 +2020,11 @@ initializing."
"Execute BODY with venv enabled. "Execute BODY with venv enabled.


This function tries to find suitable venv dir, or raise error when none found." This function tries to find suitable venv dir, or raise error when none found."
`(with-venv-dir ,(with-venv-find-venv-dir) ,@body))
`(with-venv-dir
;; If set explicitly use it
,(or with-venv-venv-dir
with-venv-find-venv-dir)
,@body))


(defvar-local with-venv-venv-dir (defvar-local with-venv-venv-dir
nil nil
@@ -2032,17 +2036,38 @@ This function tries to find suitable venv dir, or raise error when none found."
(when dir (when dir
(cd dir)) (cd dir))
(or (or
;; If set explicitly use it
with-venv-venv-dir
;; Check pipenv ;; Check pipenv
(let ((status (call-process "pipenv" nil t nil "--venv")))
(goto-char (point-min))
(and (eq status 0)
(buffer-substring-no-properties (point-at-bol)
(point-at-eol))))
(with-venv--find-venv-dir-pipenv)
;; Check poetry
(with-venv--find-venv-dir-poetry)
;; Search for .venv dir ;; Search for .venv dir
(locate-dominating-file default-directory
".venv"))))
(with-venv--find-venv-dir-by-name))))

(defun with-venv--find-venv-dir-pipenv ()
"Try to find venv dir via pipenv."
(with-temp-buffer
(let ((status (call-process "pipenv" nil t nil "--venv")))
(when (eq status 0)
(goto-char (point-min))
(buffer-substring-no-properties (point-at-bol)
(point-at-eol))))))

(defun with-venv--find-venv-dir-poetry ()
"Try to find venv dir via poetry."
(with-temp-buffer
;; TODO: Use poetry env info --path
(let ((status (call-process "poetry" nil t nil "debug:info")))
(when (eq status 0)
(goto-char (point-min))
(save-match-data
(when (re-search-forward "^ \\* Path: *\\(.*\\)$")
(match-string 1)))))))

(defun with-venv--find-venv-dir-by-name ()
"Try to find venv dir by its name."
(expand-file-name ".venv"
(locate-dominating-file default-directory
".venv")))




;; (with-venv (:dir default-directory) (message "a")) ;; (with-venv (:dir default-directory) (message "a"))


Загрузка…
Отмена
Сохранить