Created
October 25, 2023 07:39
-
-
Save dov/006bd26ca44ccea03920cfdc2c13d2a8 to your computer and use it in GitHub Desktop.
Evaluate the current file in local or remote shell
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(if (string-match "x86_64-w64-mingw32" system-configuration) | |
(setq temp-dir "C:/Temp") | |
(setq temp-dir "/tmp")) | |
(defun shell-command-on-buffer (command extension) | |
"Send the current buffer to a shell command" | |
(interactive) | |
(let* ((remote-maybe (file-remote-p default-directory)) | |
(tramp-prefix (if remote-maybe remote-maybe "")) | |
(cmd-buffer-name (concat "*" (capitalize command) " Output*")) | |
(cmd-filename | |
(if (buffer-modified-p) | |
(concat tramp-prefix temp-dir "/buffer." extension) | |
(buffer-file-name)))) | |
(if (buffer-modified-p) | |
(write-region (point-min) (point-max) cmd-filename)) | |
(if remote-maybe | |
;; If remote, we have to get rid of the tramp prefix | |
(let* ((remote-prefix-len (length remote-maybe)) | |
(fn (substring cmd-filename remote-prefix-len))) | |
(shell-command (concat command " \"" fn "\"") cmd-buffer-name)) | |
(shell-command (concat command " \"" cmd-filename "\"") cmd-buffer-name)) | |
;; The following makes it easy to go to the resulting output buffer | |
(setq my-buffer (current-buffer)) | |
(switch-to-buffer cmd-buffer-name) | |
(switch-to-buffer my-buffer))) | |
(defun shell-python-on-buffer () | |
"Send the current (python) buffer to be evaluated by the python shell" | |
(interactive) | |
(shell-command-on-buffer "python" "py")) | |
(defun shell-perl-on-buffer () | |
"Send the current (python) buffer to be evaluated by the perl shell" | |
(interactive) | |
(shell-command-on-buffer "perl" "pl")) | |
(defun shell-lua-on-buffer () | |
"Send the current (lua) buffer to be evaluated by the lua shell" | |
(interactive) | |
(shell-command-on-buffer "lua" "lua")) | |
(defun my-lua-mode-hook () | |
(interactive) | |
(define-key lua-mode-map [(control c) (control c)] 'shell-lua-on-buffer)) | |
(add-hook 'lua-mode-hook 'my-lua-mode-hook) | |
(defun my-python-mode-hook () | |
(interactive) | |
(define-key python-mode-map [(control c) (control c)] 'shell-python-on-buffer)) | |
(add-hook 'python-mode-hook 'my-python-mode-hook) | |
(defun my-perl-mode-hook () | |
(interactive) | |
(define-key perl-mode-map [(control c) (control c)] 'shell-perl-on-buffer)) | |
(add-hook 'perl-mode-hook 'my-perl-mode-hook) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment