Rename ssh.el to shell.el

This commit is contained in:
Sameer Rahmani 2023-07-21 18:10:10 +01:00
parent 3d1bcb9d42
commit f688436ece
Signed by: lxsameer
GPG Key ID: B0A4AF28AB9FD90B
3 changed files with 109 additions and 72 deletions

109
core/fg42/shell.el Normal file
View File

@ -0,0 +1,109 @@
;;; FG42 --- The mighty editor for the emacsians -*- lexical-binding: t; -*-
;;
;; Copyright (c) 2010-2023 Sameer Rahmani <lxsameer@gnu.org>
;;
;; Author: Sameer Rahmani <lxsameer@gnu.org>
;; URL: https://devheroes.codes/FG42/FG42
;; Version: 3.0.0
;;
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Commentary:
;; `System' is just a state monad which holds the state of the editor.
;; Each system has to have a `start' function to start the setup process.
;;
;;; Code:
(require 'seq)
(require 'fg42/utils)
(defmacro ->commands (&rest body)
"Return a list of shell commands in the BODY.
Each element has to be list like `(cd \"..\")' the command is static but
the arguments get evaluated."
`(quote
,(mapcar
(lambda (x)
(when (not (listp x))
(error "Expect a list. Got %s" x))
(format "%s %s" (car x) (mapconcat #'eval (cdr x) " ")))
body)))
(defun shell<- (commands &rest opts)
"Run the give list of COMMANDS via ssh on HOST with the given OPTS.
OPTS:
- `:shell' The shell to run the commands with. (default /bin/bash)
- `:buffer' The buffer name to use. (default '*ssh[SHELL]*')
- `:erase?' Whether or not erase the buffer. (default t)"
(let* ((sh (or (plist-get opts :shell) "/bin/bash"))
(buffer (or (plist-get opts :buffer) (format "*shell[%s]*" sh)))
(erase? (or (plist-get opts :erase-buffer?) t))
(cmds (format "'%s'" (mapconcat #'identity commands ";")))
(output-buffer (get-buffer-create buffer)))
(when erase?
(with-current-buffer output-buffer
(setq buffer-read-only nil)
(erase-buffer)))
(let ((p (start-process-shell-command
"shell<-"
(buffer-name output-buffer)
(format "%s -c %s"
sh
cmds))))
(set-process-sentinel p
(lambda (_ event)
(when (string= event "finished\n")
(message "Commands finished.")
;;(kill-process process)
))))))
(defun ssh<- (host commands &rest opts)
"Run the give list of COMMANDS via ssh on HOST with the given OPTS.
OPTS:
- `:shell' The shell to run the commands with. (default /bin/bash)
- `:buffer' The buffer name to use. (default '*ssh[HOST]*')
- `:erase?' Whether or not erase the buffer. (default t)"
(let ((sh (or (plist-get opts :shell) "/bin/bash"))
(buffer (or (plist-get opts :buffer) (format "*ssh[%s]*" host)))
(erase? (or (plist-get opts :erase-buffer?) t))
(cmds (format "'%s'" (mapconcat #'identity commands ";")))
(output-buffer (get-buffer-create buffer)))
(when erase?
(with-current-buffer output-buffer
(setq buffer-read-only nil)
(erase-buffer)))
(let ((p (start-process-shell-command
(format "ssh-to-%s" host)
(buffer-name output-buffer)
(format "ssh -t %s %s -c %s"
host
sh
cmds))))
(set-process-sentinel p
(lambda (_ event)
(when (string= event "finished\n")
(message "Commands finished. Closing SSH connection.")
;;(kill-process process)
))))
(message "Task started on %s -> %s" host (buffer-name output-buffer))))
(provide 'fg42/ssh)
;;; ssh.el ends here

View File

@ -1,58 +0,0 @@
;;; FG42 --- The mighty editor for the emacsians -*- lexical-binding: t; -*-
;;
;; Copyright (c) 2010-2023 Sameer Rahmani <lxsameer@gnu.org>
;;
;; Author: Sameer Rahmani <lxsameer@gnu.org>
;; URL: https://devheroes.codes/FG42/FG42
;; Version: 3.0.0
;;
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;
;;; Commentary:
;; `System' is just a state monad which holds the state of the editor.
;; Each system has to have a `start' function to start the setup process.
;;
;;; Code:
(require 'seq)
(require 'fg42/utils)
(defun ssh-run (host commands &rest opts)
"Run the give list of COMMANDS via ssh on HOST with the given OPTS."
(let ((sh (or (plist-get opts :shell) "/bin/bash"))
(cmds (format "'%s'" (mapconcat #'identity commands ";")))
(output-buffer (get-buffer-create (format "*ssh[%s]*" host))))
(with-current-buffer output-buffer
(setq buffer-read-only nil)
(erase-buffer))
(let ((p (start-process-shell-command
(format "ssh-to-%s" host)
(buffer-name output-buffer)
(format "ssh -t %s %s -c %s"
host
sh
cmds))))
(set-process-sentinel p
(lambda (_ event)
(when (string= event "finished\n")
(message "Commands finished. Closing SSH connection.")
;;(kill-process process)
))))
(message "Task started on %s -> %s" host (buffer-name output-buffer))))
(provide 'fg42/ssh)
;;; ssh.el ends here

View File

@ -196,19 +196,5 @@ is non-nil value it means that the function can be called interactively."
(fg42/log "INFO" args))
(defmacro ->shell (&rest body)
"Return a list of shell commands in the BODY.
Each element has to be list like `(cd \"..\")' the command is static but
the arguments get evaluated."
`(quote
,(mapcar
(lambda (x)
(when (not (listp x))
(error "Expect a list. Got %s" x))
(format "%s %s" (car x) (mapconcat #'eval (cdr x) " ")))
body)))
(provide 'fg42/utils)
;;; utils.el ends here