From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Leo Newsgroups: gmane.emacs.bugs Subject: bug#7485: 23.2; Fix removing unrecognized ANSI sequences in ansi-color-apply Date: Fri, 26 Nov 2010 14:48:20 +0000 Message-ID: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: dough.gmane.org 1290784503 5930 80.91.229.12 (26 Nov 2010 15:15:03 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Fri, 26 Nov 2010 15:15:03 +0000 (UTC) To: 7485@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Nov 26 16:14:59 2010 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1PM00n-0005xV-9N for geb-bug-gnu-emacs@m.gmane.org; Fri, 26 Nov 2010 16:14:58 +0100 Original-Received: from localhost ([127.0.0.1]:46411 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PM00m-0004ar-KY for geb-bug-gnu-emacs@m.gmane.org; Fri, 26 Nov 2010 10:14:56 -0500 Original-Received: from [140.186.70.92] (port=59038 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PM00e-0004ZN-73 for bug-gnu-emacs@gnu.org; Fri, 26 Nov 2010 10:14:49 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PM00d-00072D-61 for bug-gnu-emacs@gnu.org; Fri, 26 Nov 2010 10:14:48 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:53916) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PM00d-000722-2v for bug-gnu-emacs@gnu.org; Fri, 26 Nov 2010 10:14:47 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1PLzWs-0007dB-F2; Fri, 26 Nov 2010 09:44:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Leo Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 26 Nov 2010 14:44:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 7485 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.129078258529269 (code B ref -1); Fri, 26 Nov 2010 14:44:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 26 Nov 2010 14:43:05 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1PLzVv-0007c1-Ld for submit@debbugs.gnu.org; Fri, 26 Nov 2010 09:43:03 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1PLzVu-0007bY-9w for submit@debbugs.gnu.org; Fri, 26 Nov 2010 09:43:02 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PLzb8-0007Z0-NY for submit@debbugs.gnu.org; Fri, 26 Nov 2010 09:48:28 -0500 Original-Received: from lists.gnu.org ([199.232.76.165]:48504) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PLzb8-0007Yp-Di for submit@debbugs.gnu.org; Fri, 26 Nov 2010 09:48:26 -0500 Original-Received: from [140.186.70.92] (port=53137 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PLzb7-0005DT-By for bug-gnu-emacs@gnu.org; Fri, 26 Nov 2010 09:48:26 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PLzb4-0007YS-TM for bug-gnu-emacs@gnu.org; Fri, 26 Nov 2010 09:48:25 -0500 Original-Received: from ppsw-50.csi.cam.ac.uk ([131.111.8.150]:36488) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PLzb4-0007YE-PE for bug-gnu-emacs@gnu.org; Fri, 26 Nov 2010 09:48:22 -0500 X-Cam-AntiVirus: no malware found X-Cam-SpamDetails: not scanned X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/ Original-Received: from cpc1-cmbg13-0-0-cust596.5-4.cable.virginmedia.com ([86.9.122.85]:59479 helo=Victoria.local) by ppsw-50.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.157]:587) with esmtpsa (PLAIN:sl392) (TLSv1:DHE-RSA-AES128-SHA:128) id 1PLzb2-0007Ma-sg (Exim 4.72) (return-path ); Fri, 26 Nov 2010 14:48:21 +0000 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Fri, 26 Nov 2010 09:44:02 -0500 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:41895 Archived-At: --=-=-= In ansi-color-apply, (string-match "\033" string start) finds the wrong portion of context if unrecognized ANSI sequences is not removed before the match. This can cause, for example, eshell's prompt to disappear if ansi-color-apply is used in eshell-preoutput-filter-functions. The attached patch tries to fix this. Leo --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=fix-ansi.diff Content-Description: fix-ansi.diff diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 146c6c9..8d5cbe1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2010-11-26 Leo + + * ansi-color.el (ansi-color-apply): Also eliminate unrecognized + ANSI sequences for remaining string. + 2010-10-03 Chong Yidong * minibuffer.el (completion--some, completion--do-completion) diff --git a/lisp/ansi-color.el b/lisp/ansi-color.el index 00162c9..40c0066 100644 --- a/lisp/ansi-color.el +++ b/lisp/ansi-color.el @@ -341,12 +341,15 @@ See `ansi-color-unfontify-region' for a way around this." (put-text-property start (length string) 'ansi-color t string) (put-text-property start (length string) 'face face string)) ;; save context, add the remainder of the string to the result - (let (fragment) - (if (string-match "\033" string start) + (let ((remaining (substring string start)) + fragment) + (while (string-match ansi-color-drop-regexp remaining) + (setq remaining (replace-match "" nil nil remaining))) + (if (string-match "\033" remaining) (let ((pos (match-beginning 0))) - (setq fragment (substring string pos)) - (push (substring string start pos) result)) - (push (substring string start) result)) + (setq fragment (substring remaining pos)) + (push (substring remaining 0 pos) result)) + (push remaining result)) (if (or face fragment) (setq ansi-color-context (list face fragment)) (setq ansi-color-context nil))) --=-=-=--