From: Lute Kamstra Date: Thu, 5 Jun 2003 12:02:09 +0000 (+0000) Subject: (shell-mode): Put `shell-filter-ctrl-a-ctrl-b' on X-Git-Tag: ttn-vms-21-2-B4~9726 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=3811bec8ed4390cac6f77aa27f05a15a94fa6495;p=emacs.git (shell-mode): Put `shell-filter-ctrl-a-ctrl-b' on `comint-output-filter-functions' when bash is used as the inferior shell. (shell-filter-ctrl-a-ctrl-b): New function. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6db45b28c42..662c77d74f0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2003-06-05 Lute Kamstra + + * shell.el (shell-mode): Put `shell-filter-ctrl-a-ctrl-b' on + `comint-output-filter-functions' when bash is used as the inferior + shell. + (shell-filter-ctrl-a-ctrl-b): New function. + 2003-06-05 Dave Love * vc-hooks.el (vc-make-backup-files): Add :group backup. diff --git a/lisp/shell.el b/lisp/shell.el index 77ad7f2808c..154c4ff46eb 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -454,9 +454,31 @@ buffer." (setq shell-dirstack-query (cond ((string-equal shell "sh") "pwd") ((string-equal shell "ksh") "echo $PWD ~-") - (t "dirs")))) + (t "dirs"))) + ;; Bypass a bug in certain versions of bash. + (when (string-equal shell "bash") + (add-hook 'comint-output-filter-functions + 'shell-filter-ctrl-a-ctrl-b nil t))) (comint-read-input-ring t))) +(defun shell-filter-ctrl-a-ctrl-b (string) + "Remove `^A' and `^B' characters from comint output. + +Bash uses these characters as internal quoting characters in its +prompt. Due to a bug in some bash versions (including 2.03, +2.04, and 2.05b), they may erroneously show up when bash is +started with the `--noediting' option and Select Graphic +Rendition (SGR) control sequences (formerly known as ANSI escape +sequences) are used to color the prompt. + +This function can be put on `comint-output-filter-functions'. +The argument STRING is ignored." + (let ((pmark (process-mark (get-buffer-process (current-buffer))))) + (save-excursion + (goto-char (or comint-last-output-start (point-min))) + (while (re-search-forward "[\C-a\C-b]" pmark t) + (replace-match ""))))) + (defun shell-write-history-on-exit (process event) "Called when the shell process is stopped.