[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#4343: comint-carriage-motion for async-shell-command

From: Juri Linkov
Subject: bug#4343: comint-carriage-motion for async-shell-command
Date: Sat, 05 Sep 2009 00:02:33 +0300
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (x86_64-pc-linux-gnu)

Often an asynchronous shell command run with M-& produces the output
that looks like garbage when programs use carriage control characters ^M
to display progress with percentages.

Even the `compile' command is better in this regard because its
`compilation-filter' handles carriage motion using the function

The following patch does the same for asynchronous commands in
`shell-command'.  It seems it was intended to do this anyway because
`*Async Shell Command*' uses `shell-mode'.  But `shell-mode' doesn't set
the filter that processes carriage control characters.  It is the `shell'
command that sets the filter via `comint-exec' before enabling `shell-mode'.
So it's necessary to set the filter explicitly in `shell-command'
after enabling `shell-mode':

Index: lisp/simple.el
RCS file: /sources/emacs/emacs/lisp/simple.el,v
retrieving revision 1.1008
diff -u -r1.1008 simple.el
--- lisp/simple.el      28 Aug 2009 04:21:17 -0000      1.1008
+++ lisp/simple.el      4 Sep 2009 21:02:21 -0000
@@ -2214,7 +2220,11 @@
                  (setq mode-line-process '(":%s"))
                  (require 'shell) (shell-mode)
                  (set-process-sentinel proc 'shell-command-sentinel)
+                 ;; Use the comint filter for proper handling of carriage 
+                 ;; (see `comint-inhibit-carriage-motion'),.
+                 (set-process-filter proc 'comint-output-filter)
            (shell-command-on-region (point) (point) command
                                     output-buffer nil error-buffer)))))))

Juri Linkov

reply via email to

[Prev in Thread] Current Thread [Next in Thread]