changeset 97445:8f3b361fa8c1

(tramp-handle-shell-command): Handle output going to current buffer like shell-command. Don't disable undo.
author Andreas Schwab <schwab@suse.de>
date Wed, 13 Aug 2008 19:33:36 +0000
parents 85c2adddd765
children 84a0c40d3e82
files lisp/ChangeLog lisp/net/tramp.el
diffstat 2 files changed, 20 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Wed Aug 13 19:09:10 2008 +0000
+++ b/lisp/ChangeLog	Wed Aug 13 19:33:36 2008 +0000
@@ -1,7 +1,7 @@
 2008-08-13  Andreas Schwab  <schwab@suse.de>
 
-	* net/tramp.el (tramp-handle-shell-command): Correctly handle
-	output going to current buffer.  Don't disable undo.
+	* net/tramp.el (tramp-handle-shell-command): Handle output going
+	to current buffer like shell-command.  Don't disable undo.
 
 2008-08-13  Glenn Morris  <rgm@gnu.org>
 
--- a/lisp/net/tramp.el	Wed Aug 13 19:09:10 2008 +0000
+++ b/lisp/net/tramp.el	Wed Aug 13 19:33:36 2008 +0000
@@ -3878,7 +3878,10 @@
 	    (error nil))
 	(error "Shell command in progress")))
 
-    (unless current-buffer-p
+    (if current-buffer-p
+	(progn
+	  (barf-if-buffer-read-only)
+	  (push-mark nil t))
       (with-current-buffer output-buffer
 	(setq buffer-read-only nil)
 	(erase-buffer)))
@@ -3900,12 +3903,20 @@
 	  (with-current-buffer error-buffer
 	    (insert-file-contents (cadr buffer)))
 	  (delete-file (cadr buffer)))
-	;; There's some output, display it.
-	(when (with-current-buffer output-buffer (> (point-max) (point-min)))
-	  (if (functionp 'display-message-or-buffer)
-	      (funcall (symbol-function 'display-message-or-buffer)
-		       output-buffer)
-	    (pop-to-buffer output-buffer)))))))
+	(if current-buffer-p
+	    ;; This is like exchange-point-and-mark, but doesn't
+	    ;; activate the mark.  It is cleaner to avoid activation,
+	    ;; even though the command loop would deactivate the mark
+	    ;; because we inserted text.
+	    (goto-char (prog1 (mark t)
+			 (set-marker (mark-marker) (point)
+				     (current-buffer))))
+	  ;; There's some output, display it.
+	  (when (with-current-buffer output-buffer (> (point-max) (point-min)))
+	    (if (functionp 'display-message-or-buffer)
+		(funcall (symbol-function 'display-message-or-buffer)
+			 output-buffer)
+	      (pop-to-buffer output-buffer))))))))
 
 ;; File Editing.