branch: externals/detached
commit 6b64d4d8064cee781e071e825857b442ea96c3d9
Author: Niklas Eklund <niklas.ekl...@posteo.net>
Commit: Niklas Eklund <niklas.ekl...@posteo.net>

    Update kill session function
    
    Make sure to check that a session is active before trying to kill it.
---
 detached.el | 52 +++++++++++++++++++++++++++-------------------------
 1 file changed, 27 insertions(+), 25 deletions(-)

diff --git a/detached.el b/detached.el
index 7eda4dfd66..e139639fa9 100644
--- a/detached.el
+++ b/detached.el
@@ -1076,31 +1076,33 @@ session validation."
   (interactive
    (list (detached-session-in-context)))
   (when session
-    (cl-letf* (((getenv "HISTFILE") "")
-               (default-directory (detached-session-directory session))
-               (buffer (get-buffer-create (format "*dtach-%s*" 
(detached-session-id session))))
-               (termination-delay 0.5)
-               (comint-exec-hook
-                `(,(lambda ()
-                     (when-let ((process (get-buffer-process 
(current-buffer))))
-                       (run-with-timer termination-delay nil
-                                       (lambda ()
-                                         ;; Attach to session
-                                         (with-current-buffer buffer
-                                           (let 
((detached-show-session-context nil))
-                                             (when detached-debug-enabled
-                                               (message "Kill function 
attaching to session %s" (detached-session-id session)))
-                                             (detached-shell-attach-session 
session))
-                                           (run-with-timer termination-delay 
nil
-                                                           (lambda ()
-                                                             ;; Send 
termination signal to session
-                                                             (when 
detached-debug-enabled
-                                                               (message "Kill 
function sending termination signal to session %s" (detached-session-id 
session)))
-                                                             
(with-current-buffer buffer
-                                                               
(call-interactively #'comint-interrupt-subjob)
-                                                               (let 
((kill-buffer-query-functions nil))
-                                                                 
(kill-buffer)))))))))))))
-      (apply #'make-comint-in-buffer `("dtach" ,buffer ,detached-shell-program 
nil)))))
+    (if (detached-session-active-p session)
+        (cl-letf* (((getenv "HISTFILE") "")
+                   (default-directory (detached-session-directory session))
+                   (buffer (get-buffer-create (format "*dtach-%s*" 
(detached-session-id session))))
+                   (termination-delay 0.5)
+                   (comint-exec-hook
+                    `(,(lambda ()
+                         (when-let ((process (get-buffer-process 
(current-buffer))))
+                           (run-with-timer termination-delay nil
+                                           (lambda ()
+                                             ;; Attach to session
+                                             (with-current-buffer buffer
+                                               (let 
((detached-show-session-context nil))
+                                                 (when detached-debug-enabled
+                                                   (message "Kill function 
attaching to session %s" (detached-session-id session)))
+                                                 
(detached-shell-attach-session session))
+                                               (run-with-timer 
termination-delay nil
+                                                               (lambda ()
+                                                                 ;; Send 
termination signal to session
+                                                                 (when 
detached-debug-enabled
+                                                                   (message 
"Kill function sending termination signal to session %s" (detached-session-id 
session)))
+                                                                 
(with-current-buffer buffer
+                                                                   
(call-interactively #'comint-interrupt-subjob)
+                                                                   (let 
((kill-buffer-query-functions nil))
+                                                                     
(kill-buffer)))))))))))))
+          (apply #'make-comint-in-buffer `("dtach" ,buffer 
,detached-shell-program nil)))
+      (message "Session %s is already inactive." (detached-session-id 
session)))))
 
 (defun detached-session-output (session)
   "Return content of SESSION's output."

Reply via email to