[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 76f2d19: * lisp/eshell/em-term.el (eshell-term-sent
From: |
Samer Masterson |
Subject: |
[Emacs-diffs] master 76f2d19: * lisp/eshell/em-term.el (eshell-term-sentinel): |
Date: |
Sun, 17 May 2015 21:59:34 +0000 |
branch: master
commit 76f2d19edd7180874f9539897f674ae05d892419
Author: Samer Masterson <address@hidden>
Commit: Samer Masterson <address@hidden>
* lisp/eshell/em-term.el (eshell-term-sentinel):
No-op by default, only kills term buffer if
`eshell-destroy-buffer-when-process-dies' is non-nil. (Bug#18108)
(eshell-destroy-buffer-when-process-dies): New custom to preserve
previous behavior.
---
etc/NEWS | 8 ++++++++
lisp/eshell/em-term.el | 39 +++++++++++++++++++++++++--------------
2 files changed, 33 insertions(+), 14 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index cf26ded..c040186 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -681,6 +681,14 @@ buffers from eshell more convenient. Custom variable
`eshell-buffer-shorthand', which has been broken for a while, has been
removed.
+*** By default, eshell "visual" program buffers (created by
+`eshell-visual-commands' and similar custom vars) are no longer killed
+when their processes die. This fixes issues with short-lived commands
+and makes visual programs more useful in general. For example, if
+"git log" is a visual command, it will always show the visual command
+buffer, even if the "git log" process dies. For the old behavior,
+make the new option `eshell-destroy-buffer-when-process-dies' non-nil.
+
** Browse-url
*** Support for the Conkeror web browser.
diff --git a/lisp/eshell/em-term.el b/lisp/eshell/em-term.el
index 4a6ac23..9ac2813 100644
--- a/lisp/eshell/em-term.el
+++ b/lisp/eshell/em-term.el
@@ -132,6 +132,13 @@ character to the invoked process."
:type 'boolean
:group 'eshell-term)
+(defcustom eshell-destroy-buffer-when-process-dies nil
+ "If non-nil, term buffers are destroyed after their processes die.
+WARNING: Setting this to non-nil may result in unexpected
+behavior for short-lived processes, see bug#18108."
+ :type 'boolean
+ :group 'eshell-term)
+
;;; Internal Variables:
(defvar eshell-parent-buffer)
@@ -190,20 +197,24 @@ allowed."
nil)
;; Process sentinels receive two arguments.
-(defun eshell-term-sentinel (proc _string)
- "Destroy the buffer visiting PROC."
- (let ((proc-buf (process-buffer proc)))
- (when (and proc-buf (buffer-live-p proc-buf)
- (not (eq 'run (process-status proc)))
- (= (process-exit-status proc) 0))
- (if (eq (current-buffer) proc-buf)
- (let ((buf (and (boundp 'eshell-parent-buffer)
- eshell-parent-buffer
- (buffer-live-p eshell-parent-buffer)
- eshell-parent-buffer)))
- (if buf
- (switch-to-buffer buf))))
- (kill-buffer proc-buf))))
+(defun eshell-term-sentinel (proc msg)
+ "Clean up the buffer visiting PROC.
+If `eshell-destroy-buffer-when-process-dies' is non-nil, destroy
+the buffer."
+ (term-sentinel proc msg) ;; First call the normal term sentinel.
+ (when eshell-destroy-buffer-when-process-dies
+ (let ((proc-buf (process-buffer proc)))
+ (when (and proc-buf (buffer-live-p proc-buf)
+ (not (eq 'run (process-status proc)))
+ (= (process-exit-status proc) 0))
+ (if (eq (current-buffer) proc-buf)
+ (let ((buf (and (boundp 'eshell-parent-buffer)
+ eshell-parent-buffer
+ (buffer-live-p eshell-parent-buffer)
+ eshell-parent-buffer)))
+ (if buf
+ (switch-to-buffer buf))))
+ (kill-buffer proc-buf)))))
;; jww (1999-09-17): The code below will allow Eshell to send input
;; characters directly to the currently running interactive process.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 76f2d19: * lisp/eshell/em-term.el (eshell-term-sentinel):,
Samer Masterson <=