;;; FG42 --- The mighty editor for the emacsians -*- lexical-binding: t; -*- ;; ;; Copyright (c) 2010-2023 Sameer Rahmani ;; ;; Author: Sameer Rahmani ;; 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 . ;; ;;; 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