diff --git a/emacs/.config/doom/+django-tests.el b/emacs/.config/doom/+django-tests.el index 7de8cff..f21af86 100644 --- a/emacs/.config/doom/+django-tests.el +++ b/emacs/.config/doom/+django-tests.el @@ -43,14 +43,46 @@ (cls cls) (t nil)))) +(defun django--ensure-env (root) + (let ((default-directory root)) + (when (fboundp 'envrc-reload) + (envrc-reload)))) + +(defface django-test-command-face + '((t :weight bold :foreground "orange" :height 1.15)) + "Face used for Django test commands.") + +(defun django--insert-command-header (buf root command) + "Insert a loud command header at the top of BUF." + (with-current-buffer (get-buffer-create buf) + (let ((inhibit-read-only t)) + (save-excursion + (goto-char (point-min)) + (insert (propertize (make-string 72 ?═) 'face 'shadow) "\n") + (insert (propertize + (format "$ (cd %s && %s)\n" root command) + 'face 'django-test-command-face)) + (insert (propertize (make-string 72 ?═) 'face 'shadow) "\n\n"))))) + (defun django-run-tests (&optional module selector) (interactive) - (let* ((module-part (or module "")) + (let* ((root (django--project-root)) + (module-part (or module "")) (selector-part (if selector (concat "." selector) "")) (param (string-trim (concat module-part selector-part))) - (command (format "python manage.py test --keepdb %s" param))) - (message "Running command: %s" command) - (projectile-run-async-shell-command-in-root command "*Django tests*"))) + (command (format "python manage.py test --keepdb %s" param)) + (buf "*Django tests*")) + ;; Ensure envrc/direnv is current + (let ((default-directory root)) + (when (fboundp 'envrc-reload) (envrc-reload))) + + ;; Start the process (this may clear/initialize the buffer) + (projectile-run-async-shell-command-in-root command buf) + + ;; Now insert header at top (won't get wiped) + (django--insert-command-header buf root command) + + (pop-to-buffer buf))) (defun django-run-test-at-point () (interactive)