branch: externals/detached commit 8be0a4827cc112c861b2e55ceea83bf5c4e92a69 Author: Niklas Eklund <niklas.ekl...@posteo.net> Commit: Niklas Eklund <niklas.ekl...@posteo.net>
Add edit-and-run command This command makes it possible to rerun a session, but first edit the command in case it should be tweaked. --- CHANGELOG.org | 2 ++ detached-list.el | 21 +++++++++++++++++++++ detached.el | 20 ++++++++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/CHANGELOG.org b/CHANGELOG.org index 1c212733a0..5aac39f27a 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -4,6 +4,8 @@ * Development +- Add =edit-and-run= command, which is convenient when a session command needs to be tweaked before re-running. + * Version 0.9.2 (2022-11-01) - Use =display-buffer= in =detached-list= in order for users to more easily customize the display of the buffer. diff --git a/detached-list.el b/detached-list.el index c0002da400..e206dcd383 100644 --- a/detached-list.el +++ b/detached-list.el @@ -222,6 +222,26 @@ Optionally DELETE the session if prefix-argument is provided." detached-list-open-session-display-buffer-action)) (detached-view-dwim session))) +(defun detached-list-edit-and-run-session (session &optional toggle-suppress-output) + "Edit and run SESSION at point. + +Optionally TOGGLE-SUPPRESS-OUTPUT." + (interactive + (list (tabulated-list-get-id) + current-prefix-arg)) + (let ((detached-session-mode + (if toggle-suppress-output + (if (eq 'create (detached--session-initial-mode session)) + 'create-and-attach + 'create) + (detached--session-initial-mode session)))) + (unless (eq detached-session-mode 'create) + (when-let ((single-window (> (length (window-list)) 1)) + (buffer (current-buffer))) + (delete-window (get-buffer-window)) + (bury-buffer buffer))) + (detached-edit-and-run-session session))) + (defun detached-list-rerun-session (session &optional toggle-suppress-output) "Rerun SESSION at point. @@ -863,6 +883,7 @@ If prefix-argument is provided unmark instead of mark." (let ((map (make-sparse-keymap))) (define-key map (kbd "a") #'detached-list-edit-annotation) (define-key map (kbd "d") #'detached-list-delete-session) + (define-key map (kbd "e") #'detached-list-edit-and-run-session) (define-key map (kbd "f") #'detached-list-select-filter) (define-key map (kbd "g") #'detached-list-revert) (define-key map (kbd "i") #'detached-list-initialize-session-directory) diff --git a/detached.el b/detached.el index f50908b7b7..33732b8998 100644 --- a/detached.el +++ b/detached.el @@ -462,6 +462,26 @@ The session is compiled by opening its output and enabling (select-window (display-buffer buffer-name detached-open-session-display-buffer-action)))))) +;;;###autoload +(defun detached-edit-and-run-session (session &optional suppress-output) + "Edit SESSION and run, optionally SUPPRESS-OUTPUT." + (interactive + (list (detached-completing-read (detached-get-sessions)) + current-prefix-arg)) + (when (detached-valid-session session) + (let* ((default-directory + (detached--session-working-directory session)) + (detached-session-mode (or detached-session-mode + (detached--session-initial-mode session))) + (detached-session-action (detached--session-action session)) + (command + (read-string "Edit command: " (detached--session-command session)))) + (if suppress-output + (detached-start-session command suppress-output) + (if-let ((run-fun (plist-get (detached--session-action session) :run))) + (funcall run-fun command) + (detached-start-session command)))))) + ;;;###autoload (defun detached-rerun-session (session &optional suppress-output) "Rerun SESSION, optionally SUPPRESS-OUTPUT."