branch: externals/detached commit cb637df4fc0d8829eebd3bd86fbf91291c55a4fe Author: Niklas Eklund <niklas.ekl...@posteo.net> Commit: Niklas Eklund <niklas.ekl...@posteo.net>
Add chained commands section in README --- README.md | 21 +++++++++++++++++++++ detached.el | 12 ++++++++++++ 2 files changed, 33 insertions(+) diff --git a/README.md b/README.md index 2a2c67464c..d49cda5087 100644 --- a/README.md +++ b/README.md @@ -284,6 +284,27 @@ The tool `script` can have different options depending on version and operating Which is compatible with the options described in [script(1) - Linux manual page](https://man7.org/linux/man-pages/man1/script.1.html). +## Chained commands + +With `detached` there exists the possibility to enable callback for a session. With this functionality its possible to create a new session once a session is finished. Here is an example which essentially provides `sleep 1 && ls && ls -la` but every step in the chain is run in isolation. + +``` emacs-lisp +(let* ((default-directory "/tmp") + (detached-session-action + `(,@detached-shell-command-session-action + :callback (lambda (session1) + (when (eq 'success (detached-session-status session1)) + (let ((default-directory (detached--session-working-directory session1)) + (detached-session-action + `(,@detached-shell-command-session-action + :callback (lambda (session2) + (when (eq 'success (detached-session-status session2)) + (let ((default-directory (detached--session-working-directory session2))) + (detached-start-session "ls -la" t))))))) + (detached-start-session "ls" t))))))) + (detached-start-session "sleep 1" t)) +``` + # Tips & Tricks The `detached.el` package integrates with core Emacs packages as well as 3rd party packages. Integration is orchestrated in the `detached-init.el`. In this section you can find tips for integrations that are not supported in the package itself. diff --git a/detached.el b/detached.el index e3ae6f1a5a..e0a8f820e1 100644 --- a/detached.el +++ b/detached.el @@ -764,6 +764,18 @@ This function uses the `notifications' library." (funcall #'async-shell-command dtach-command buffer) (with-current-buffer buffer (setq detached--buffer-session detached--current-session)))))) +(defun detached-session-exit-code (session) + "Return exit code for SESSION." + (pcase-let ((`(,_status . ,exit-code) + (detached--session-status session))) + exit-code)) + +(defun detached-session-status (session) + "Return status for SESSION." + (pcase-let ((`(,status . ,_exit-code) + (detached--session-status session))) + status)) + ;;;;; Other (cl-defgeneric detached-dtach-command (entity &optional concat)