doomemacs/init/my-coderunner.el
2014-11-29 20:21:03 -05:00

66 lines
2.6 KiB
EmacsLisp

(provide 'my-coderunner)
;; Variables
(defvar my-run-code-interpreter nil)
(defvar my-run-code-func 'my/run-code-shell)
(defvar my-run-code-region-func 'my/run-code-region-shell)
(defvar my-switch-to-repl-func nil)
(defvar my-send-region-to-repl-func nil)
(defvar my-build-func nil)
(make-variable-buffer-local 'my-run-code-interpreter)
(make-variable-buffer-local 'my-run-code-func)
(make-variable-buffer-local 'my-run-code-region-func)
(make-variable-buffer-local 'my-switch-to-repl-func)
(make-variable-buffer-local 'my-send-region-to-repl-func)
(make-variable-buffer-local 'my-build-func)
(add-hook! 'emacs-lisp-mode-hook
(setq my-run-code-func 'eval-buffer
my-run-code-region-func 'eval-region))
(defun my/run-code-shell (file-path)
(if (stringp my-run-code-interpreter)
(shell-command (concat my-run-code-interpreter " " file-path))
(message "No interpreter set for %s. See `my-run-code-interpreter'" (symbol-name major-mode))))
(defun my/run-code-region-shell (beg end)
(if (stringp my-run-code-interpreter)
(shell-command-on-region beg end my-run-code-interpreter)
(message "No interpreter set for %s. See `my-run-code-interpreter'" (symbol-name major-mode))))
;;
(defun my:switch-to-repl ()
(interactive)
(if (functionp my-switch-to-repl-func)
(funcall my-switch-to-repl-func)
(message "No REPL was set for %s. See `my-switch-to-repl-func'" (symbol-name major-mode))))
(defun my:send-region-to-repl (beg end)
(interactive "r")
(if (functionp my-send-region-to-repl-func)
(funcall my-send-region-to-repl-func beg end)
(message "No region runner set for %s. See `my-send-region-to-repl-func'" (symbol-name major-mode))))
(defun my:run-code-buffer ()
(interactive)
(let ((file-name (buffer-file-name))
(mode-name (symbol-name major-mode)))
(if (and (not (buffer-modified-p))
(file-exists-p file-name))
(if (functionp my-run-code-func)
(funcall my-run-code-func file-name)
(message "No runner set for %s. See `my-run-code-func'" mode-name))
(my:run-code-region (point-min) (point-max)))))
(defun my:run-code-region (beg end)
(interactive "r")
(if (functionp my-run-code-region-func)
(funcall my-run-code-region-func beg end)
(message "No region runner set for %s. See `my-run-code-region-func'" (symbol-name major-mode))))
(defun my:build (&optional arguments)
(interactive)
(if (functionp my-build-func)
(funcall my-build-func arguments)
(message "No build function set for %s. See `my-build-func'" (symbol-name major-mode))))