From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Lawrence D'Anna Newsgroups: gmane.emacs.devel Subject: [PATCH] comint: save & restore fonts so misidentified prompts don't lose their color Date: Wed, 11 Mar 2015 21:59:05 -0700 Message-ID: <9377f7fea03766d39e03bc98355eb6f01e13b51f.1426134831.git.larry@elder-gods.org> NNTP-Posting-Host: plane.gmane.org X-Trace: ger.gmane.org 1426136378 14226 80.91.229.3 (12 Mar 2015 04:59:38 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 12 Mar 2015 04:59:38 +0000 (UTC) Cc: Lawrence D'Anna To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Mar 12 05:59:29 2015 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1YVvDU-0002CM-D1 for ged-emacs-devel@m.gmane.org; Thu, 12 Mar 2015 05:59:28 +0100 Original-Received: from localhost ([::1]:58054 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YVvDT-0001hd-UZ for ged-emacs-devel@m.gmane.org; Thu, 12 Mar 2015 00:59:27 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59885) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YVvDQ-0001hX-O5 for emacs-devel@gnu.org; Thu, 12 Mar 2015 00:59:25 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YVvDN-0004bp-IQ for emacs-devel@gnu.org; Thu, 12 Mar 2015 00:59:24 -0400 Original-Received: from mail-pa0-f45.google.com ([209.85.220.45]:40158) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YVvDN-0004bl-E5 for emacs-devel@gnu.org; Thu, 12 Mar 2015 00:59:21 -0400 Original-Received: by padfb1 with SMTP id fb1so17327652pad.7 for ; Wed, 11 Mar 2015 21:59:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=1rwvJw9sfIdQNh61Zi72WAStHup2hqgspAwRHhrlk/g=; b=nGY/xKPZhjltlA48IPMW8GOouLnLJXbsO9mwvDZP2baiUr7x6DVnG2mbl1y4R8Lzvp tX9yodgCiJv320C/zhg4CayDOd+3BHpxSgqJSd5fUA4ffhoHj8mY5ZzqWGqEyFbgj1kT UcoJ6kMvqWfeFHZtg43sxiMuuH11ttDELJLc1tHUxZO7Absp1KImrSje//KWfTiEBTa1 98VgfumhoBTYTKMFGZa94SdOlSGLHzfWhKMw1ESrYiBVpKQ1RkrzmUwxIyV2S2u+Fjbw RTVgcaNv1OdPkW1YnewiDE/UTnt3dAEx3uDeluWAwWghFFbB4zghxBak1sX0QYDSGzyF h1Sw== X-Gm-Message-State: ALoCoQlZI18EVIMHZj8xgs9205nrwFvRcPumDAwKV6ywRgtYC1MMTe+HuyyOEo1uaVfsKifVJiPF X-Received: by 10.70.52.8 with SMTP id p8mr85620914pdo.27.1426136360157; Wed, 11 Mar 2015 21:59:20 -0700 (PDT) Original-Received: from orcus.lan ([73.15.67.146]) by mx.google.com with ESMTPSA id k5sm8456275pdf.95.2015.03.11.21.59.19 (version=TLSv1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 11 Mar 2015 21:59:19 -0700 (PDT) X-Mailer: git-send-email 2.3.1 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.220.45 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:183801 Archived-At: I'm hitting a very annoying bug where sometimes colors will be missing from random segments of output, always starting at the beginning of a line. The reason is that comint is seeing a partial line, interpreting it as a prompt, coloring it as a prompt, and then uncoloring it when it receives more input. This should fix it by saving and restoring the colors in an alternate text property instead. --- lisp/comint.el | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lisp/comint.el b/lisp/comint.el index 68b8edb..9a0ca2a 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -1989,6 +1989,12 @@ Make backspaces delete the previous character." (set-marker delete-end nil)) (widen)))) +(defun comint-copy-text-property (begin end src dest) + (while (< begin end) + (put-text-property begin (1+ begin) dest + (get-text-property begin src)) + (setq begin (1+ begin)))) + ;; The purpose of using this filter for comint processes ;; is to keep comint-last-input-end from moving forward ;; when output is inserted. @@ -2077,11 +2083,14 @@ Make backspaces delete the previous character." (add-text-properties prompt-start (point) '(read-only t front-sticky (read-only))))) (when comint-last-prompt - (remove-text-properties (car comint-last-prompt) - (cdr comint-last-prompt) - '(font-lock-face))) + (comint-copy-text-property + (car comint-last-prompt) (cdr comint-last-prompt) + 'comint-saved-face 'font-lock-face)) + (setq comint-last-prompt (cons (copy-marker prompt-start) (point-marker))) + (comint-copy-text-property + prompt-start (point) 'font-lock-face 'comint-saved-face) (add-text-properties prompt-start (point) '(rear-nonsticky t font-lock-face comint-highlight-prompt))) -- 2.2.1 (Apple Git-53)