66 lines
2.6 KiB
EmacsLisp
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))))
|