From 23e87814a4b87b596455026dbfcfe8bf13e1956c Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Fri, 11 Oct 1991 03:58:56 +0000 Subject: [PATCH] Be more careful about order of events in M-x shell-command-on-region when the prefix arg is given. Make sure that the output replaces the input atomically. --- v7/src/edwin/process.scm | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/v7/src/edwin/process.scm b/v7/src/edwin/process.scm index 7b61031bd..f8b636f7d 100644 --- a/v7/src/edwin/process.scm +++ b/v7/src/edwin/process.scm @@ -1,6 +1,6 @@ ;;; -*-Scheme-*- ;;; -;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/process.scm,v 1.9 1991/10/11 03:34:46 cph Exp $ +;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/process.scm,v 1.10 1991/10/11 03:58:56 cph Exp $ ;;; ;;; Copyright (c) 1991 Massachusetts Institute of Technology ;;; @@ -610,16 +610,24 @@ Prefix arg means replace the region with it." (let ((point (current-point)) (mark (current-mark))) (let ((swap? (mark< point mark)) - (temp (temporary-buffer " *shell-input*"))) - (let ((st (buffer-start temp))) - (if swap? - (insert-region point mark st) - (insert-region mark point st)) - (delete-string point mark) - (shell-command-region command - point - (make-region st (buffer-end temp)))) - (kill-buffer temp) + (temp)) + (dynamic-wind + (lambda () unspecific) + (lambda () + (set! temp (temporary-buffer " *shell-output*")) + (shell-command-region command + (buffer-start temp) + (make-region point mark)) + (without-interrupts + (lambda () + (delete-string point mark) + (insert-region (buffer-start temp) + (buffer-end temp) + (current-point))))) + (lambda () + (kill-buffer temp) + (set! temp) + unspecific)) (if swap? ((ref-command exchange-point-and-mark))))) (shell-command-pop-up-output (lambda (output-mark) -- 2.25.1