From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 08 11:48:42 2021 Received: (at submit) by debbugs.gnu.org; 8 Apr 2021 15:48:42 +0000 Received: from localhost ([127.0.0.1]:48016 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lUWtc-0000SG-R7 for submit@debbugs.gnu.org; Thu, 08 Apr 2021 11:48:42 -0400 Received: from lists.gnu.org ([209.51.188.17]:51492) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lUWtY-0000S3-4R for submit@debbugs.gnu.org; Thu, 08 Apr 2021 11:48:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37852) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lUWtW-0003aP-GM for bug-gnu-emacs@gnu.org; Thu, 08 Apr 2021 11:48:34 -0400 Received: from mail-io1-xd30.google.com ([2607:f8b0:4864:20::d30]:37599) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lUWtS-0000Ao-S5 for bug-gnu-emacs@gnu.org; Thu, 08 Apr 2021 11:48:34 -0400 Received: by mail-io1-xd30.google.com with SMTP id b10so2730635iot.4 for ; Thu, 08 Apr 2021 08:48:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:mime-version:subject:message-id:date:to; bh=LRb+X32VEIiNdguW7Liii2Hj5+zfSVq+ocI929ZABJg=; b=GqMsXzBHcv+IBQAra9WHY2DPVOYK21rvDAo1hPO+LTWe8WIPWzybPYFdwaYw9zIlMz 9TphaObkMnNi4req8aii+JySRbDDWWaVOoV9lEs5Zv7z84pvQ0sz6FYlQOm3ho9pSnWi 1s+q8566xvBRzWhk4AT9P+EYCfkslQdBqqXmJHmIQqAUHcGAEIz2WsUOd8ZO8JlgsX+9 RPb118ekGpPu7qFECcKFuyNYZ2Ba/we2ZR44KD+RvFo1L6QvA18vI6Ok6lMfQoydx7hQ zSudSPjhJ1UMIqaHXVRYW51xwQeIl4YQDxTFwrtLfGF1zhTCMd9DjDBbYkfx7QK8QiK5 B33w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:mime-version:subject:message-id:date:to; bh=LRb+X32VEIiNdguW7Liii2Hj5+zfSVq+ocI929ZABJg=; b=cyITP2WHr19AOrRJo0X/Qprw0mKXut0yqbhd97L3Nc0Rg4SHp7nMEh3EqffuETAyuX DIYcuLBnn72aUeKPh6o25YdalJRO6OS2bNRUDK8/tIuM02kojJBRqfkZYN/fSjEQafz3 jTdVHcLQWGTb+c7EKT87HgRXAOB5QNLwh5WtRaEUMWzHVp+IPniKV7z0eCHC8hQVsxoo vdk3ngsK8JfyWIyBuSiKXwywhHmVo+n1t5Ykeg/xplqly8xTZ+64NsjdXQfGVSGFK3Ud X++e5N/3NrUnYLnt5vmpKEbMrgoDhaOcYsH3hdQ+taepB+fHPlaHjZzxQg5K6KKy+NMF 51ww== X-Gm-Message-State: AOAM532Z+vqNmJHB7CUiN4VXsoJdmDJDzDZ+w7OQ3gqJ9C4EMBAHH51h 3cAjc3oBWiHM3nFl7TtjkZYozH7T3JHPOw== X-Google-Smtp-Source: ABdhPJy5hqCdeSAFzqcz0k3leqBco4xXFJyB2GSQztXUJCOPlLnbmz8xeNSRllNt4LzMIqYsN98XXw== X-Received: by 2002:a02:a303:: with SMTP id q3mr9715304jai.32.1617896907136; Thu, 08 Apr 2021 08:48:27 -0700 (PDT) Received: from rain.wifi.utoledo.edu ([131.183.185.120]) by smtp.gmail.com with ESMTPSA id n11sm16911959ioa.34.2021.04.08.08.48.26 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 08 Apr 2021 08:48:26 -0700 (PDT) From: JD Smith Content-Type: multipart/alternative; boundary="Apple-Mail=_E2C643A9-F3E6-4D18-9C09-3049494173F8" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.4\)) Subject: python-shell font-lock with multi-line input: runaway fontification buffer length Message-Id: <603226C1-620D-4C53-B8E9-A2ECA3A3DB3C@gmail.com> Date: Thu, 8 Apr 2021 11:48:25 -0400 To: bug-gnu-emacs@gnu.org X-Mailer: Apple Mail (2.3608.120.23.2.4) Received-SPF: pass client-ip=2607:f8b0:4864:20::d30; envelope-from=jdtsmith@gmail.com; helo=mail-io1-xd30.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) --Apple-Mail=_E2C643A9-F3E6-4D18-9C09-3049494173F8 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 =09 `python-shell-font-lock-post-command-hook=E2=80=99 makes the presumption = that only a single line of input can appear at the prompt. It includes = this preparatory =E2=80=9Cclean-up=E2=80=9D of its font lock buffer = after first having copied all input lines after the prompt: (let* ((input (buffer-substring-no-properties prompt-end (point-max))) ... (replacement (python-shell-font-lock-with-font-lock-buffer (delete-region (line-beginning-position) (point-max)) (setq font-lock-buffer-pos (point)) (insert input) This means that using, e.g., C-c SPC (`comint-accumulate=E2=80=99) to = insert a newline at the shell prompt leads to runaway growth of the = font-lock buffer (=E2=80=9C *Python-font-lock=E2=80=9D, by default). = Any command, like an insert, produces a new copy of all but the final = line of input in this buffer. Since this entire buffer is font-locked = from scratch after every single command, this becomes very inefficient. =20= Find an example, below. The simple fix would be to delete the entire font-lock buffer file = contents: (delete-region (point-min) (point-max)) A perhaps smarter and more efficient fix would be to enable font locking = in the inferior Python buffer itself, but constrain it to the text after = the process mark. This would also prevent front-lock from constantly = having to re-fontify the entire input text after each command.=20 ++++ (In *Python* shell buffer): In [2]: a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' d=3D'and I=E2=80=99=20 (In " *Python-font-lock"; this can become arbitrarily long): a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' a=3D 'now is the time' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' d=3D'and I'=20= --Apple-Mail=_E2C643A9-F3E6-4D18-9C09-3049494173F8 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8
=
`python-shell-font-lock-post-command-hook=E2=80= =99 makes the presumption that only a single line of input can appear at = the prompt.  It includes this preparatory =E2=80=9Cclean-up=E2=80=9D = of its font lock buffer after first having copied all input lines after = the prompt:

  =     (let* ((input = (buffer-substring-no-properties
        =              prompt-end = (point-max)))
          =  ...
            =  (replacement
            =   = (python-shell-font-lock-with-font-lock-buffer
  =               (delete-region = (line-beginning-position)
        =                     =    (point-max))
        =         (setq font-lock-buffer-pos = (point))
            =     (insert input)


This means that using, e.g., C-c SPC = (`comint-accumulate=E2=80=99) to insert a newline at the shell prompt = leads to runaway growth of the font-lock buffer (=E2=80=9C = *Python-font-lock=E2=80=9D, by default).  Any command, like an = insert, produces a new copy of all but the final line of input in this = buffer.  Since this entire buffer is font-locked from scratch after = every single command, this becomes very inefficient. =  

Find an = example, below.

The simple fix would be to delete the entire font-lock buffer = file contents:

= (delete-region (point-min) (point-max))

A perhaps smarter and = more efficient fix would be to enable font locking in the inferior = Python buffer itself, but constrain it to the text after the process = mark.  This would also prevent front-lock from constantly having to = re-fontify the entire input text after each command. 

++++

(In *Python* shell = buffer):

In [2]: a=3D 'now is the time'
for i in = range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and through'
d=3D'and I=E2=80=99 

(In " *Python-font-lock"; this can become arbitrarily = long):

a=3D 'now is the = time'
a=3D = 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
a=3D 'now is the time'
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; = print(i+4-4) 
a=3D 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
a=3D = 'now is the time'
for i in range(12):
a =3D 12; print(i+4-4) 
b=3D'one two one two and through and = through'
d=3D'and = I' 
= --Apple-Mail=_E2C643A9-F3E6-4D18-9C09-3049494173F8-- From debbugs-submit-bounces@debbugs.gnu.org Mon Apr 12 05:33:07 2021 Received: (at 47657) by debbugs.gnu.org; 12 Apr 2021 09:33:07 +0000 Received: from localhost ([127.0.0.1]:56472 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lVswN-00038g-Er for submit@debbugs.gnu.org; Mon, 12 Apr 2021 05:33:07 -0400 Received: from quimby.gnus.org ([95.216.78.240]:49304) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lVswL-00037z-R2 for 47657@debbugs.gnu.org; Mon, 12 Apr 2021 05:33:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID :In-Reply-To:Date:References:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=nl+JxoAjg9dsYBhbKn4VFwWRZZh/zFoVT5gJmEH0pyA=; b=FptUE2imVOh2gzBkBUh2v3MM42 BgfZ21G9TnoA8SRDFtaOV8uevrePctWfqL3IPcICZxBKJmLqediteLaeCmuyyzUsfnzUgLK1c9XEG TmFxwcnkp+Ke9nlkOvaweh3KVswGh5FKxptWI/3bqztWpy0irAWyFBsfBhWoNT5Ri+Ts=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lVswB-0005mC-O4; Mon, 12 Apr 2021 11:32:58 +0200 From: Lars Ingebrigtsen To: JD Smith Subject: Re: bug#47657: python-shell font-lock with multi-line input: runaway fontification buffer length References: <603226C1-620D-4C53-B8E9-A2ECA3A3DB3C@gmail.com> X-Now-Playing: Marianne Faithfull's _A Child's Adventure_: "Blue Millionaire" Date: Mon, 12 Apr 2021 11:32:54 +0200 In-Reply-To: <603226C1-620D-4C53-B8E9-A2ECA3A3DB3C@gmail.com> (JD Smith's message of "Thu, 8 Apr 2021 11:48:25 -0400") Message-ID: <87y2dnyhix.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: JD Smith writes: > `python-shell-font-lock-post-command-hook’ makes the presumption that only a > single line of input can appear at the prompt. It includes this preparatory > “clean-up” of its font lock buffer [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 47657 Cc: 47657@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) JD Smith writes: > `python-shell-font-lock-post-command-hook=E2=80=99 makes the presumption = that only a > single line of input can appear at the prompt. It includes this preparat= ory > =E2=80=9Cclean-up=E2=80=9D of its font lock buffer after first having cop= ied all input lines after the > prompt: > > (let* ((input (buffer-substring-no-properties > prompt-end (point-max))) > ... > (replacement > (python-shell-font-lock-with-font-lock-buffer > (delete-region (line-beginning-position) > (point-max)) > (setq font-lock-buffer-pos (point)) > (insert input) I think the point here is that if we're in a multi-line expression, then the font locking may be dependent on the previous lines, too, so we can't just delete the contents of the buffer. > Find an example, below. [...] > (In *Python* shell buffer): > > In [2]: a=3D 'now is the time' > for i in range(12): > a =3D 12; print(i+4-4)=20 > b=3D'one two one two and through and through' > d=3D'and I=E2=80=99=20 > > (In " *Python-font-lock"; this can become arbitrarily long): > > a=3D 'now is the time' > a=3D 'now is the time' I was unable to reproduce this (in Emacs 28). I pasted this into the *Python* buffer: a=3D 'now is the time' for i in range(12): a =3D 12; print(i+4-4)=20 b=3D'one two one two and through and through' d=3D'and I' and the font-lock buffer never became very big. Do you have a step-by-step recipe, starting from "emacs -Q", to reproduce this problem? --=20 (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Mon Apr 12 05:33:13 2021 Received: (at control) by debbugs.gnu.org; 12 Apr 2021 09:33:13 +0000 Received: from localhost ([127.0.0.1]:56475 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lVswS-000399-OZ for submit@debbugs.gnu.org; Mon, 12 Apr 2021 05:33:12 -0400 Received: from quimby.gnus.org ([95.216.78.240]:49320) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lVswQ-00038W-V9 for control@debbugs.gnu.org; Mon, 12 Apr 2021 05:33:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Subject:From:To:Message-Id:Date:Sender:Reply-To:Cc: MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=2lP1Wz/mW+uw3nUxyujPXkf47QjPIu9JGSsaIOtmy6o=; b=HklSo1Kl69jMMLn1CU8pM4Q+5O gvtQPH0QDQUZvDirqh2C40VYzrRraWlc3z8404nezxoiXwQBpztOqbbLJtRSFspVJhIX0V5iNgAUR fSWSedEkAq/F0W471fErIaFA95mn2gAbrqhLkmr4JjffcoRtDIwCTnEiiw3oFaMzwA88=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lVswI-0005mI-Da for control@debbugs.gnu.org; Mon, 12 Apr 2021 11:33:05 +0200 Date: Mon, 12 Apr 2021 11:33:01 +0200 Message-Id: <87wnt7yhiq.fsf@gnus.org> To: control@debbugs.gnu.org From: Lars Ingebrigtsen Subject: control message for bug #47657 X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: tags 47657 + moreinfo quit Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) tags 47657 + moreinfo quit From debbugs-submit-bounces@debbugs.gnu.org Mon Apr 12 09:18:22 2021 Received: (at 47657) by debbugs.gnu.org; 12 Apr 2021 13:18:22 +0000 Received: from localhost ([127.0.0.1]:56858 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lVwSM-00070f-Ib for submit@debbugs.gnu.org; Mon, 12 Apr 2021 09:18:22 -0400 Received: from mail-io1-f46.google.com ([209.85.166.46]:38475) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lVwSK-00070P-Qu for 47657@debbugs.gnu.org; Mon, 12 Apr 2021 09:18:21 -0400 Received: by mail-io1-f46.google.com with SMTP id f15so4626003iob.5 for <47657@debbugs.gnu.org>; Mon, 12 Apr 2021 06:18:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=vjTzrsgoDP3oJKIhDziVjdMcmF56eLQQo2MG+e8Oh3M=; b=icbudc7e3M4ISEViuFZkMZ/JDHrFDYheW2gaWrpG5h6Gt1IF3LWwFw/fpNdck+RiCx 4++bD6a50hCxC15cqC4u4W21RSenC/2oUaZNZRNoBskJQcTMTnJu4dAp2LxrK1lTVeM8 VScTLhAwV2oq37wkYufjOqSJzWYZUf0lybh/LUC5qRt1JjPbefSQdrghuuZOVyil1XO9 699mvVggXdtCMjQPd3hIOd421EhgZNgdTnOGx+cCBuDKmPP9mgH65SUUZAcqrA6SEVnU fhDVWGKBoxFqkl7cBv6a07xX+mHilbqHApkaSA78jlVKThvP5Am2jBZf+giMPQenNBFg xSKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=vjTzrsgoDP3oJKIhDziVjdMcmF56eLQQo2MG+e8Oh3M=; b=BfKFwALv7l3X3WWIK78uPZDWUEVpmWRYOqaos26UYN+8Jbjw80OsgM4j5U2ReEbccA +HVVdfPhgyzYf6LMJhg9XXGu1sFYkLCmwziC5Fmh4coHFK67esp6YU7/E5L2DFUrrxjr Q0EDPdHb6gsWQ6430iyrJZK2wQ2wkqEtkrtpE68U/wsPdbrIYauFcEHOpURh1iL8zywT Bc9Yqkq0QTrAbdADf+VHS4MowaO7ungE5ma9A432Y2QIHhpJMxKHdta060yRjlDx9Zu7 Wq7gOr5A1xRn2umEu7x1J6oh+hQJb5tL7hxBr9x+X6JwGYnLo0soKyAYBtebii0vJAtV WFjw== X-Gm-Message-State: AOAM533ubXp1FbmyVBOwDu4vw39GQmQVSdTP3slz0JGQx1QMwosSm8sb 0BbzfbjAeflSUjOrRC3i4Z4= X-Google-Smtp-Source: ABdhPJykA4pH+SgQjy9nXgpYJG/Nik4Z3zkeHT0JucPYsWUG4Sb9ZyDR3yYACVzPiH39XtmvuB4V0Q== X-Received: by 2002:a05:6638:3884:: with SMTP id b4mr28369111jav.18.1618233495057; Mon, 12 Apr 2021 06:18:15 -0700 (PDT) Received: from [192.168.0.118] (cm-134-228-54-223.buckeyecom.net. [134.228.54.223]) by smtp.gmail.com with ESMTPSA id u20sm5618895ilj.63.2021.04.12.06.18.14 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Apr 2021 06:18:14 -0700 (PDT) From: JD Smith Message-Id: <0BCE3A3A-7A11-465A-8057-0546097D99FA@gmail.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_BA8CFAA5-6801-4D71-823B-D20E999C86AC" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.4\)) Subject: Re: bug#47657: python-shell font-lock with multi-line input: runaway fontification buffer length Date: Mon, 12 Apr 2021 09:18:13 -0400 In-Reply-To: <87y2dnyhix.fsf@gnus.org> To: Lars Ingebrigtsen References: <603226C1-620D-4C53-B8E9-A2ECA3A3DB3C@gmail.com> <87y2dnyhix.fsf@gnus.org> X-Mailer: Apple Mail (2.3608.120.23.2.4) X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 47657 Cc: 47657@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_BA8CFAA5-6801-4D71-823B-D20E999C86AC Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Apr 12, 2021, at 5:32 AM, Lars Ingebrigtsen wrote: >=20 > I was unable to reproduce this (in Emacs 28). I pasted this into the > *Python* buffer: Pasting multiple lines constitutes a single command for = post-command-hook. In that case you would not expect to see any repeated = lines. > Do you have a step-by-step recipe, starting from "emacs -Q", to > reproduce this problem? emacs -Q M-x run-python C-x 5 b =E2=80=9C *Python-font-lock*=E2=80=9D In inferior python shell: type any line. C-c SPC (`comint-accumulate=E2=80=99) to continue. Type another line. Notice the first line is repeated.=20 Repeat steps 5 & 6 several times.=20 The issue is how input is gathered from the prompt to the end of shell = buffer in the post-command-hook: (let* ((input (buffer-substring-no-properties prompt-end (point-max))) Line-at-a-time also won=E2=80=99t be able to handle editing lines before = the last. On emacs-devel Stefan has been helpful with some ideas to = perform font lock in-place in the shell buffer, which is working well in = my tests. I=E2=80=99m using that as part of a package to implement true = multi-line editing (ala iPython).= --Apple-Mail=_BA8CFAA5-6801-4D71-823B-D20E999C86AC Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8

On Apr 12, 2021, at 5:32 AM, Lars Ingebrigtsen <larsi@gnus.org> = wrote:

I was unable = to reproduce this (in Emacs 28).  I pasted this into the
*Python* buffer:

Pasting multiple lines constitutes a single = command for post-command-hook. In that case you would not expect to see = any repeated lines.

Do you have a step-by-step = recipe, starting from "emacs -Q", to
reproduce this = problem?

  1. emacs = -Q
  2. M-x run-python
  3. C-x 5 b =E2=80=9C = *Python-font-lock*=E2=80=9D
  4. In inferior python shell: = type any line.
  5. C-c SPC (`comint-accumulate=E2=80=99) = to continue.
  6. Type another line.  Notice the = first line is repeated. 
  7. Repeat steps 5 & 6 = several times. 

The issue is how input is gathered from = the prompt to the end of shell buffer in the post-command-hook:

      (let* ((input = (buffer-substring-no-properties
    =                  prompt-end = (point-max)))

Line-at-a-time also won=E2=80=99t be able to handle editing = lines before the last.  On emacs-devel Stefan has been helpful with = some ideas to perform font lock in-place in the shell = buffer, which is working well in my tests.  I=E2=80=99m using that = as part of a package to implement true multi-line editing (ala = iPython).
= --Apple-Mail=_BA8CFAA5-6801-4D71-823B-D20E999C86AC-- From debbugs-submit-bounces@debbugs.gnu.org Tue Apr 13 04:05:51 2021 Received: (at 47657) by debbugs.gnu.org; 13 Apr 2021 08:05:51 +0000 Received: from localhost ([127.0.0.1]:58901 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lWE3T-00023w-B1 for submit@debbugs.gnu.org; Tue, 13 Apr 2021 04:05:51 -0400 Received: from quimby.gnus.org ([95.216.78.240]:59446) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lWE3Q-00023g-R3 for 47657@debbugs.gnu.org; Tue, 13 Apr 2021 04:05:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID :In-Reply-To:Date:References:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=7gKuHNSsxkeSrNIbLA8rIuecfZpu1Ig9rhc8NXEo8Ek=; b=M0hWIR9EWCn79hSqGQwjgfQbUU Rxm0inREA3hgjm6CxDQSaQoUMJPawmKD/DHspTLdM7tCcEWZKFdi56QZ/0owwpOcESnTNxPMGEBI6 u7Ql++/GKiVKukI6ELrknQULmGDfDR7kWF7RacDz5dnY83zEGBx0+0Riy49AbKax9VwY=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lWE3I-0000xt-KO; Tue, 13 Apr 2021 10:05:43 +0200 From: Lars Ingebrigtsen To: JD Smith Subject: Re: bug#47657: python-shell font-lock with multi-line input: runaway fontification buffer length References: <603226C1-620D-4C53-B8E9-A2ECA3A3DB3C@gmail.com> <87y2dnyhix.fsf@gnus.org> <0BCE3A3A-7A11-465A-8057-0546097D99FA@gmail.com> X-Now-Playing: Fire!'s _Defeat_: "A random belt, rats your out" Date: Tue, 13 Apr 2021 10:05:40 +0200 In-Reply-To: <0BCE3A3A-7A11-465A-8057-0546097D99FA@gmail.com> (JD Smith's message of "Mon, 12 Apr 2021 09:18:13 -0400") Message-ID: <87fszusj6z.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: JD Smith writes: > Do you have a step-by-step recipe, starting from "emacs -Q", to > reproduce this problem? > > 1 emacs -Q > 2 M-x run-python > 3 C-x 5 b “ *Python-font-lock*” > 4 In inferior python shell: type a [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 47657 Cc: 47657@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) JD Smith writes: > Do you have a step-by-step recipe, starting from "emacs -Q", to > reproduce this problem? > > 1 emacs -Q > 2 M-x run-python > 3 C-x 5 b =E2=80=9C *Python-font-lock*=E2=80=9D > 4 In inferior python shell: type any line. > 5 C-c SPC (`comint-accumulate=E2=80=99) to continue. > 6 Type another line. Notice the first line is repeated.=20 > 7 Repeat steps 5 & 6 several times.=20 You didn't say what Emacs version you're using -- I tested this in Emacs 28, and was unable to reproduce this. The " *Python-font-lock*" buffer never contains more than a single non-blank line using this recipe. (The "any line" I used to test was "5".) --=20 (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Tue Apr 13 09:14:32 2021 Received: (at 47657) by debbugs.gnu.org; 13 Apr 2021 13:14:32 +0000 Received: from localhost ([127.0.0.1]:59288 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lWIsC-0003sv-5c for submit@debbugs.gnu.org; Tue, 13 Apr 2021 09:14:32 -0400 Received: from mail-io1-f49.google.com ([209.85.166.49]:36602) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lWIs9-0003se-RH for 47657@debbugs.gnu.org; Tue, 13 Apr 2021 09:14:30 -0400 Received: by mail-io1-f49.google.com with SMTP id d5so7574614iof.3 for <47657@debbugs.gnu.org>; Tue, 13 Apr 2021 06:14:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=ZpUayER7av/LR0+KH5ne0clwzeU4FGmgB1r/ciIvB38=; b=WRcBWIxQfuYsGck9Xxc3cWu41BUAzgSYw/KUv2aM3a/yHP3ov0ZO10fedBR8tfgwv4 tRzqCWPiEjIU5V2x0YksD1jkk8fbDYcfkv6NuPHH7io1hIuXZTF3Gt8k+3DsTLGHLbnr f7SMZqS7sP991edPGloP9Ji35ojDAZGysuTRJZGVAZS8PGz54cw79bSYP4XX/7fIREVS rlBnHNkmeNgLZmVQUuc5b99p0ShMZ0kUVmYpGCcniTf/XmvvlhDx2dnkH8vpKUvw9R1k r3+rdkxMGr9edslMT1PjkLeFRGGo1TsUOr1daFH0peAHcqJCx15yqe2NX4lAz9EchTsx GfMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=ZpUayER7av/LR0+KH5ne0clwzeU4FGmgB1r/ciIvB38=; b=WSqtHvAGa7oWzbi4zxqR6D8GW1Lj7frws6C6Y3LTwjx/P6noyswBOZrPQQLha9/xzR 90lZCa8RnxKWX8vFueq5cQ69azxV+1vPI2ZmN1aUjagO+m5ECfDzfQVeeCR/vUzdh0xj +m9xJPH2dffndEbFTOjgmKjivgOPnUf64G9fVPbGGG9ngM0Aso8LRJ3bNgl1Qj3Vx1tc S1BEyGD1F4SaQG0WsR5CZXk/vhtcePqncPNzcHvYEuPyPQxyGe4Msryw8LEFdz0zk9Zm 13anC17WDfwKWPfAOF35RVX5K8MyCk7heB5e7G+3mOHUgdjczm5v84pTUdfZov4kKH0R qjeg== X-Gm-Message-State: AOAM5316zUmEL2bJnl54eg/lgoSuFu7fPZJlDqeTpIIQ6bhHmd58g2Jg cQ3KQwLUdaeVGcG6TjcAYgg= X-Google-Smtp-Source: ABdhPJzi5zGH3IdkgO565vgCCOy40hnXnubbf6y9j3QgfcRO7r+wQai5bCmRhx9zespm+NoEcVJxjg== X-Received: by 2002:a5e:990f:: with SMTP id t15mr25657583ioj.180.1618319664218; Tue, 13 Apr 2021 06:14:24 -0700 (PDT) Received: from [192.168.0.113] (cm-134-228-54-223.buckeyecom.net. [134.228.54.223]) by smtp.gmail.com with ESMTPSA id s16sm6880984ilq.87.2021.04.13.06.14.23 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 Apr 2021 06:14:23 -0700 (PDT) From: JD Smith Message-Id: <1971BD45-05FC-4124-8A3C-7EBC968D55D5@gmail.com> Content-Type: multipart/alternative; boundary="Apple-Mail=_C710EBA4-84BA-4682-A772-3BA3B81D5E15" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.4\)) Subject: Re: bug#47657: python-shell font-lock with multi-line input: runaway fontification buffer length Date: Tue, 13 Apr 2021 09:14:20 -0400 In-Reply-To: <87fszusj6z.fsf@gnus.org> To: Lars Ingebrigtsen References: <603226C1-620D-4C53-B8E9-A2ECA3A3DB3C@gmail.com> <87y2dnyhix.fsf@gnus.org> <0BCE3A3A-7A11-465A-8057-0546097D99FA@gmail.com> <87fszusj6z.fsf@gnus.org> X-Mailer: Apple Mail (2.3608.120.23.2.4) X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 47657 Cc: 47657@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_C710EBA4-84BA-4682-A772-3BA3B81D5E15 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Apr 13, 2021, at 4:05 AM, Lars Ingebrigtsen wrote: >=20 > JD Smith writes: >=20 >> Do you have a step-by-step recipe, starting from "emacs -Q", to >> reproduce this problem? >>=20 >> 1 emacs -Q >> 2 M-x run-python >> 3 C-x 5 b =E2=80=9C *Python-font-lock*=E2=80=9D >> 4 In inferior python shell: type any line. >> 5 C-c SPC (`comint-accumulate=E2=80=99) to continue. >> 6 Type another line. Notice the first line is repeated.=20 >> 7 Repeat steps 5 & 6 several times.=20 >=20 > You didn't say what Emacs version you're using -- I tested this in = Emacs > 28, and was unable to reproduce this. The " *Python-font-lock*" = buffer > never contains more than a single non-blank line using this recipe. > (The "any line" I used to test was "5=E2=80=9D.) Mac port, v27.2, python-mode v0.26.1. I have a hard time understanding = how this would not reproduce, as (buffer-substring-no-properties = prompt-end (point-max)) clearly takes all of the text (multi-lines = included) from the prompt onward. I took a look here = (python-mode v0.27.1) and the = input is gathered in the same manner in the post-command-hook. The = =E2=80=9Crepeated=E2=80=9D lines in #6 are in the *Python-font-lock* = buffer, btw.=20= --Apple-Mail=_C710EBA4-84BA-4682-A772-3BA3B81D5E15 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8

On Apr 13, 2021, at 4:05 AM, Lars Ingebrigtsen <larsi@gnus.org> = wrote:

JD Smith <jdtsmith@gmail.com> writes:

Do you have a = step-by-step recipe, starting from "emacs -Q", to
= reproduce this problem?

1 emacs -Q
2 M-x run-python
3 C-x 5 b =E2=80=9C = *Python-font-lock*=E2=80=9D
4 In inferior python shell: = type any line.
5 C-c SPC (`comint-accumulate=E2=80=99) to = continue.
6 Type another line.  Notice the first line = is repeated.
7 Repeat steps 5 & 6 several times.

You didn't say what Emacs version = you're using -- I tested this in Emacs
28, and was unable = to reproduce this.  The " *Python-font-lock*" buffer
never contains more than a single non-blank line using this = recipe.
(The "any line" I used to test was "5=E2=80=9D.)

Mac port, = v27.2, python-mode v0.26.1.  I have a hard time understanding how = this would not reproduce, as (buffer-substring-no-properties  prompt-end (point-max)) clearly takes all of the text = (multi-lines included) from = the prompt onward.  I took a look here (python-mode v0.27.1) and the input = is gathered in the same manner in the post-command-hook. =  The =E2=80=9Crepeated=E2=80=9D lines in #6 are in the = *Python-font-lock* buffer, btw. 
= --Apple-Mail=_C710EBA4-84BA-4682-A772-3BA3B81D5E15-- From debbugs-submit-bounces@debbugs.gnu.org Sun Apr 25 13:35:04 2021 Received: (at 47657) by debbugs.gnu.org; 25 Apr 2021 17:35:04 +0000 Received: from localhost ([127.0.0.1]:43651 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1laieu-0000Jz-F5 for submit@debbugs.gnu.org; Sun, 25 Apr 2021 13:35:04 -0400 Received: from quimby.gnus.org ([95.216.78.240]:37228) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1laier-0000JR-PJ for 47657@debbugs.gnu.org; Sun, 25 Apr 2021 13:35:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=19z5loh3RIyMkOyMYi6VlSH2BCOxCCqyWCSC2Mj37PE=; b=dO0mr1KEO1HsKBZwBi7hRZWkn8 Gmuj+A93pfukpT6i8Ubl9C/EedH1T+/2/jE2z1sn1O8+bRAen5Rb98QbeQ1pWTXoMzYV2a0LRcIOQ TDE2IBNl9fDx/m9lO2QRobzQ4tMaFjlbW/lZJ6NoBTsN82t0vajU3K2gJGgMuxl7lygg=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1laieh-0000Tv-St; Sun, 25 Apr 2021 19:34:55 +0200 From: Lars Ingebrigtsen To: JD Smith Subject: Re: bug#47657: python-shell font-lock with multi-line input: runaway fontification buffer length References: <603226C1-620D-4C53-B8E9-A2ECA3A3DB3C@gmail.com> <87y2dnyhix.fsf@gnus.org> <0BCE3A3A-7A11-465A-8057-0546097D99FA@gmail.com> <87fszusj6z.fsf@gnus.org> <1971BD45-05FC-4124-8A3C-7EBC968D55D5@gmail.com> Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAD1BMVEXLtJS7l2GVcUE7 NjT///8GgWrOAAAAAWJLR0QEj2jZUQAAAAd0SU1FB+UEGREgK3YQiuEAAAG9SURBVDjLbZOBgcMg CEXBLABkAcUFIuy/231N72rao2lrfOFDAImI2BMWrERWz7wN+9S7eUTWuaZjA9G94bqI8fkAVa1f pOyySRV3r614BWj0BlK8eTWtg4V0k5KS3urhNVSAcFFZgDkcPjCx0XA/X6An9i3mrncEHj2oCAkE iXUGd8OXjpFZ0xHpTFKFVLi25mwZqdD3eixwHVFLjKGC3EhRoGsBzRbwymrNFNGBbg8pEQVAFUAL kOiKgUIkEsimaoqShM7fCdRbYe+/4PXmasI+sJ8MoQdQpCkewuYgfwACrN2R5/LgJwjn+bTpuUnN rAZKlSoQqscGTp/tdvw3e4C7uihuhD/Amp4Msuwhf8Buj545Zlb0kLqXMy9pG7B2L03TWmzpmt7B S/Eepb+B273sdPbGbyDOLylxkndJVPor+Ilply0rOW26h3WVfdoBlu7lXSfZ0j3bCmiVP8FqTvAX 6HMKPbh9AEn1UaiRfgQnIxp9niehJ0Br8fJoseh+BmdD7eTBKDk9AAznGc2YZcf6F8yMRnr6yx6g Y6Qj/wGw2cFvsDr1BeaY4NiafwOP2cb2AebMNF3Pm23gB8yriws+oqZ4AAAAJXRFWHRkYXRlOmNy ZWF0ZQAyMDIxLTA0LTI1VDE3OjMyOjQyKzAwOjAwMgcMwAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAy MS0wNC0yNVQxNzozMjo0MiswMDowMENatHwAAAAASUVORK5CYII= X-Now-Playing: Stephen Mallinder's _Um Dada_: "Colour" Date: Sun, 25 Apr 2021 19:34:50 +0200 In-Reply-To: <1971BD45-05FC-4124-8A3C-7EBC968D55D5@gmail.com> (JD Smith's message of "Tue, 13 Apr 2021 09:14:20 -0400") Message-ID: <87lf96l139.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: JD Smith writes: > 1 emacs -Q > 2 M-x run-python > 3 C-x 5 b “ *Python-font-lock*” > 4 In inferior python shell: type any line. > 5 C-c SPC (`comint-accumulate’) to continue. > 6 Type another line. Notice the fi [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 47657 Cc: 47657@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable JD Smith writes: > 1 emacs -Q > 2 M-x run-python > 3 C-x 5 b =E2=80=9C *Python-font-lock*=E2=80=9D > 4 In inferior python shell: type any line. > 5 C-c SPC (`comint-accumulate=E2=80=99) to continue. > 6 Type another line. Notice the first line is repeated.=20 > 7 Repeat steps 5 & 6 several times.=20 > > You didn't say what Emacs version you're using -- I tested this in Emacs > 28, and was unable to reproduce this. The " *Python-font-lock*" buffer > never contains more than a single non-blank line using this recipe. > (The "any line" I used to test was "5=E2=80=9D.) > > Mac port, v27.2, python-mode v0.26.1. I have a hard time > understanding how this would not reproduce, as > (buffer-substring-no-properties prompt-end (point-max)) clearly takes > all of the text (multi-lines included) from the prompt onward. I took > a look here (python-mode v0.27.1) and the input is gathered in the > same manner in the post-command-hook. The =E2=80=9Crepeated=E2=80=9D lin= es in #6 are > in the *Python-font-lock* buffer, btw. After typing "1" in 4) and "7" in 6), the buffer looks like: --=-=-= Content-Type: image/png Content-Disposition: inline Content-Transfer-Encoding: base64 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 CwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcA AAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAA AEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACA KLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFk XwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4A AAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAA AACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAA RJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi +wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYF AAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAA AAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAA IIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU 2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIv AAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAA AACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAA AFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACi yL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9 AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIA AAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAA AIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQ RfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrs CwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcA AAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAA AEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACA KLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFk XwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4A AAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAA AACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAA RJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi +wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYF AAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAA AAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAA IIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU 2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIv AAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAA AACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAA AFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACi yL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9 AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIA AAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAA AIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQ RfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrs CwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcA AAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAA AEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACA KLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFk XwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4A AAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAA AACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAA RJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi +wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYF AAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAA AAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAA IIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU 2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIv AAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAA AACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAA AFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACi yL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9 AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIA AAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAA AIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQ RfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrs CwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcA AAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAA AEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACA KLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFk XwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4A AAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAA AACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAA RJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi +wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYF AAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAA AAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAA IIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU 2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIv AAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAA AACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAA AFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACi yL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9 AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIA AAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAA AIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQ RfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrs CwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcA AAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAA AEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACA KLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFk XwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4A AAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAA AACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAA RJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi +wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYF AAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAA AAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAA IIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU 2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIv AAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAA AACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAA AFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACi yL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9 AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIA AAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAA AIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQ RfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrs CwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcA AAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAA AEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACA KLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFk XwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4A AAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAA AACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAA RJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi +wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYF AAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAA AAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAA IIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU 2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIv AAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAA AACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAA AFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACi yL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9 AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIA AAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAA AIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQ RfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrs CwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcA AAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAA AEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACA KLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFk XwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4A AAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAA AACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAA RJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi +wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYF AAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAA AAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAA IIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU 2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIv AAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAA AACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAA AFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACi yL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9 AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIA AAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAA AIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQ RfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrs CwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcA AAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAA AEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACA KLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFk XwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4A AAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAA AACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAA RJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi +wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAAAAAQRfYF AAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAAIIrsCwAA AAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU2RcAAAAA IIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIvAAAAAEAU 2RcAAAAAIIrsCwAAAAAQRfYFAAAAAIgi+wIAAAAARJF9AQAAAACiyL4AAAAAAFFkXwAAAACAKLIv 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 dTpy51lziqKY8e4TV53270eGl1cVDTfd8wc9ex6+W6s1a28i1DSnZJOOe2016rER5VVFMWPci3f+ bvAj93Q9dq+qz49vVfHmv6+5v3efVxfsw7VBq127bLVW5ZKX2GYdDj/p2I2r/Z+KNx+87Ly/PDeh 2m0mPv/csDmdtl+lfpk9Z+rY118Z8d648ZOKtZpv1Kb9jm2a11/aOzC74r1h/3nrg08/mzC5skGT ddZpsXG77dqsv2adFT8ny8Ps2Qvt4aF+/a+w2UfWmKxElt/Azq54f8Trb37wWXn5xKmVdRs2arr+ xv+zZevNWjSstR+n1tZKKcnwgWWfFUVRFHW267jTFlu9tcFNo8cVRfFWWdn4Iw9vsXou819H4x2/ 33NHw7CKmDHovn++XxRFUdTbpdveTZfTVOtvctBvzvrP0Rf2n7sV/ftlZWN6brnJqjQsHw0bMvy9 D8dPmLZGo2Ybtv52+zYtGiz9619lxfvDXhv5/icTyidXNmjSdJ0Wm26zfZv1GpSs+DmJVq/lLidd dUXJKT+9892qoigqyv5y44vfOa/jl+3VeTk+OnOmfzJq6PB3x08onzh5ZkmDxutusFmbrdpsss7S 7li6ZMvu3ba4+++jimL2K/c99M5BPTbzqALAsoj/vFpn7Tb7/fRPe39/8EO9brz9iUG3PVgURVGM e+bOPkXdFu0PO+GkY/dts3adFTER5itptt3hv/zbgUc/d//Nve95alRFVVFV8Va/v731+fVVg2+7 fPDnZ+q17HDQcT2O2bdt02Ue4ZLGrQ89r8cLh17xUrVYWD5ixIfF9hsURVHx73MPu/zFasfUarjX 7x747W6L7YiT/v2LQy9/uXLBBWt1vfSBX+9eryiK4uXLD/jFv6d88Wy8eeNRXW5c+MJ1vnf1Az/b 9svvw5Sh91x+xW0Dx0ypWrA4Nml74Bnnn7b3t5b47K2aOLLvLTfd+diQsVOrFnrSN91il4OOP+mo 3Vs1+IK/HXtbzx/2envB+SYHXtHn7LZfdU6+js/uO/2wvw794utfuqJ7lytqXrSEI2V/s2NSq8vJ N+vrDGxNM8YNevDW2x8aMPyjhadUFKVNN9thj30OPuzAXTdZa5k/eU586arTz+/z3+pfG5S2OuDi q87etVnJilwprcLeLHt23u4H2nbq2LhYv2PHde/u81lRFCPKyiYcfug6q9FQsNqZWvbowMlzn/07 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 uEo6/PzOG399ZMeWc7femP3pf/pcdcYxx135/OSlnH7lrKnl495+5YnbL/3pRX0XOpbJFu3bV4+6 m3Xr3rb6e87ZLz45sOZOyyYPfLr6sdyKkrb77lNjK4O6jZutV12ThX7aX9pw3fUW0azRUrz3b9rt nAu/v3XT0qKos2arzj87e/+aUXDiu++W1/yDKQPu6/txjf/d9sT/u+SoDi3qF0VR1Gm0yV4//b8L utXIblXDHnhwZNVSzMkFh7ZtXKcoSuq22O2nZ+3f4kvmZHmtoNZsWmPUGi+0qejCY7/eeus1bVBn 5RyT2ltOvhnLbWAnP3PPv2t+N1Nvy2P+dN0lx3Vu+/mh2EvqN9uiU/ceF95017U/27PV0u07Y/ob N5/32z5jqn1jU/qtg764+dbySmnVNn5g2byD263x7Y47LtjMuWXHjvN+Tj7zxYEvzlgdhoLVz9Q3 3/x8c9yNNttsua6Rp49+8JKrnp5ffVvtvttCmzA22KV7l6ZzT378eN9XFruj2qrX+j354dyTTbp0 330FfPnSpOux39to0Y8Pddp2+U7LeafHjB696GvoJwvuwtpdTzhsk8XtI6BhpxOP2mbetCc91fe5 GbUyJ8vf6zf2OOLLnH7729/sorz22vOPTVI1efKU2nl05rz94D8+3zp+3f3OPGNxzXf+A9Ws405b Lu0H0Q0233zewj3njTfetGICgKUXnH0b7nrSGT845Oy/3f63nx+0VZMvuqN1W3T64SW9b72850En /uzoRd98LJeJsJCSzXbYfu25mxTU33DXH17Y646//fx7265b7T1myVqbdz35j7fe9v9+ss+W847x W7rFDtt8yXf7b/c6vkuXLl267NV1n/0PObrnz3//9/7vTq15k/odDtynZY1LWu7TbYfq725nv9x/ 4MRq5yvKnn6l+ra+db6933fXXzHj1Hyv/TtV20tAnXbf3rZm9ayoqFmoZ7804PkaP5Rfd7+Tjljo U2rjTj8+docaF304YMBbyzgnW33ZnKw8jMnKPrAzXxowqMaESrb84a9P3Hqxx18vadzmexed8p0v 3/Py7P/2ueC8W0ZUm27pxgddetWZX7hvh9paKUWYUFY2Yt4gbN2xY/Vfs2zesWPzuadmvFA2ePZq MBasfj54//3Pt/9v2bLlV5pE1azp0xaYWvHZh6NfG3D/X8898dSrB89/v9Fojx5HtF74L0t36L7P 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 --=-=-= Content-Type: text/plain So just the "7", and not the first line, which was "1". Perhaps there's some missing element in your recipe? -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sun Apr 25 13:53:47 2021 Received: (at 47657) by debbugs.gnu.org; 25 Apr 2021 17:53:47 +0000 Received: from localhost ([127.0.0.1]:43672 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1laix0-0002u5-Tm for submit@debbugs.gnu.org; Sun, 25 Apr 2021 13:53:47 -0400 Received: from mail-qk1-f174.google.com ([209.85.222.174]:43572) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1laiwy-0002tp-9V for 47657@debbugs.gnu.org; Sun, 25 Apr 2021 13:53:45 -0400 Received: by mail-qk1-f174.google.com with SMTP id u20so22292805qku.10 for <47657@debbugs.gnu.org>; Sun, 25 Apr 2021 10:53:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=pVPhH23taTTxjXY2BOhh2KNF4E2Q0lSqnSfgKYMharo=; b=QdVxuiVdUOVBPQDNndCf3P1LcWAoLgXCvmTeymGVsJ5vJf7f/rDLOT7cIeV61CSOjM Nf3cka4EFSNX1QxyldQMruNLc8DVc7IrnWkwIVpLiKhesRJ6KorclwY5LJoOpo4NFupi m8VD+XxhB9MSu3tiJG7QYUuKauHdSPoSVCnvAE6kIywJSx3gY4OydnwvuG26MusnrN78 KIcOqVkJopwgwOy2uekS3a/jDxBTjBBPbjAetlWjVavhSdA1l1/VSNMgKzNl1/jXv2yu GZvo4nipD5xOObEJn+lgD8yh6n+2wbJ9JbuXH10Vm7eidW6aVt3yWEsbWsqjw/NccDB1 LslQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=pVPhH23taTTxjXY2BOhh2KNF4E2Q0lSqnSfgKYMharo=; b=WxPjGWpuGUyJcUD8PAhYQnKNe8IxCfKVySPFV26NWcMVbR7U1DA3aFr/ZeJNlJLtcy Bc5ViaRPhR++QVEypnQ3LN5bdzS3Au1LS9rTj4+mGgfPbewtMAhvEOUMlsLxPrGnRjC4 vpekGe7lx/U2ZeBAdyitht9lDNxq/G9uZ2r0OlDmK6Bo8AFyxfcnP9WfbFvzm8Jj7eCy B+/HbW04sKeH+Eax4Us8uHn6L9xX46c0XUjf7FNhszwaeOqKPvMl+o5MWbaeJQyOHICp gHBsX5QmbhMG4iMLICfRXNlpE4hTbnYXCUUjY0qT677AO7zVhamGyVQOJTVH/4zC38BB wnkg== X-Gm-Message-State: AOAM531FD7Dc+GnH9TDyBUHBN9jkexym1ia2TBabNeKaZXpOR7eiZ2TM WWnWVgwDVj3dAKnnXdJv78Y= X-Google-Smtp-Source: ABdhPJwc5UKXrC6lE2qNBrDLjK/gzHype3nzksu4p91hQU8vv6RrzFlRG8/2rJ/EqYUp+w7O4shS5A== X-Received: by 2002:a37:e10e:: with SMTP id c14mr13407927qkm.209.1619373218528; Sun, 25 Apr 2021 10:53:38 -0700 (PDT) Received: from [192.168.0.100] (cm-134-228-54-223.buckeyecom.net. [134.228.54.223]) by smtp.gmail.com with ESMTPSA id x24sm8950820qtm.95.2021.04.25.10.53.37 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 25 Apr 2021 10:53:38 -0700 (PDT) From: JD Smith Message-Id: Content-Type: multipart/alternative; boundary="Apple-Mail=_C35D766C-B623-43B3-BD54-BA37493F75D4" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.4\)) Subject: Re: bug#47657: python-shell font-lock with multi-line input: runaway fontification buffer length Date: Sun, 25 Apr 2021 13:53:35 -0400 In-Reply-To: <87lf96l139.fsf@gnus.org> To: Lars Ingebrigtsen References: <603226C1-620D-4C53-B8E9-A2ECA3A3DB3C@gmail.com> <87y2dnyhix.fsf@gnus.org> <0BCE3A3A-7A11-465A-8057-0546097D99FA@gmail.com> <87fszusj6z.fsf@gnus.org> <1971BD45-05FC-4124-8A3C-7EBC968D55D5@gmail.com> <87lf96l139.fsf@gnus.org> X-Mailer: Apple Mail (2.3608.120.23.2.4) X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 47657 Cc: 47657@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --Apple-Mail=_C35D766C-B623-43B3-BD54-BA37493F75D4 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Very odd, I get : 1 1 7 in *Python-font-lock* after precisely these same steps. What if you use = C-j in step #5 instead of C-c SPC? > On Apr 25, 2021, at 1:34 PM, Lars Ingebrigtsen wrote: >=20 > JD Smith writes: >=20 >> 1 emacs -Q >> 2 M-x run-python >> 3 C-x 5 b =E2=80=9C *Python-font-lock*=E2=80=9D >> 4 In inferior python shell: type any line. >> 5 C-c SPC (`comint-accumulate=E2=80=99) to continue. >> 6 Type another line. Notice the first line is repeated.=20 >> 7 Repeat steps 5 & 6 several times.=20 >>=20 >> You didn't say what Emacs version you're using -- I tested this in = Emacs >> 28, and was unable to reproduce this. The " *Python-font-lock*" = buffer >> never contains more than a single non-blank line using this recipe. >> (The "any line" I used to test was "5=E2=80=9D.) >>=20 >> Mac port, v27.2, python-mode v0.26.1. I have a hard time >> understanding how this would not reproduce, as >> (buffer-substring-no-properties prompt-end (point-max)) clearly takes >> all of the text (multi-lines included) from the prompt onward. I = took >> a look here (python-mode v0.27.1) and the input is gathered in the >> same manner in the post-command-hook. The =E2=80=9Crepeated=E2=80=9D = lines in #6 are >> in the *Python-font-lock* buffer, btw. >=20 > After typing "1" in 4) and "7" in 6), the buffer looks like: >=20 > > So just the "7", and not the first line, which was "1". >=20 > Perhaps there's some missing element in your recipe? >=20 > --=20 > (domestic pets only, the antidote for overdose, milk.) > bloggy blog: http://lars.ingebrigtsen.no --Apple-Mail=_C35D766C-B623-43B3-BD54-BA37493F75D4 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Very = odd, I get :

1
1
7

in *Python-font-lock* after = precisely these same steps.  What if you use C-j in step #5 instead = of C-c SPC?


On Apr 25, 2021, at 1:34 PM, = Lars Ingebrigtsen <larsi@gnus.org> wrote:

JD = Smith <jdtsmith@gmail.com> writes:

1 emacs -Q
= 2 M-x run-python
3 C-x 5 b =E2=80=9C = *Python-font-lock*=E2=80=9D
4 In inferior python shell: = type any line.
5 C-c SPC (`comint-accumulate=E2=80=99) to = continue.
6 Type another line.  Notice the first = line is repeated.
7 Repeat steps 5 & 6 several = times.

You didn't say what Emacs version = you're using -- I tested this in Emacs
28, and was unable = to reproduce this.  The " *Python-font-lock*" buffer
= never contains more than a single non-blank line using this recipe.
(The "any line" I used to test was "5=E2=80=9D.)

Mac port, v27.2, python-mode v0.26.1.  I = have a hard time
understanding how this would not = reproduce, as
(buffer-substring-no-properties prompt-end = (point-max)) clearly takes
all of the text (multi-lines = included) from the prompt onward.  I took
a look here = (python-mode v0.27.1) and the input is gathered in the
same = manner in the post-command-hook.  The =E2=80=9Crepeated=E2=80=9D = lines in #6 are
in the *Python-font-lock* buffer, btw.

After typing "1" in 4) and "7" in = 6), the buffer looks like:

<Mail = Attachment.png>
So just the "7", and not the = first line, which was "1".

Perhaps there's = some missing element in your recipe?

--
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog: http://lars.ingebrigtsen.no

= --Apple-Mail=_C35D766C-B623-43B3-BD54-BA37493F75D4-- From debbugs-submit-bounces@debbugs.gnu.org Sun Apr 25 15:19:33 2021 Received: (at 47657) by debbugs.gnu.org; 25 Apr 2021 19:19:33 +0000 Received: from localhost ([127.0.0.1]:43862 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lakI0-0000xL-Qf for submit@debbugs.gnu.org; Sun, 25 Apr 2021 15:19:32 -0400 Received: from quimby.gnus.org ([95.216.78.240]:38268) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lakHy-0000x6-U0 for 47657@debbugs.gnu.org; Sun, 25 Apr 2021 15:19:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=mbMjHGmqVchIgFKWpJcnB+ceagcMOYU6E1RbtfKTibE=; b=r9yH18imXd8obSch3xWScMgrtd pqWXneE+C48Vc30Rs3WnW561uo5LE6O5GoMr/h7IZdR/KAzk32oZ1CIr3dveGqF/D2hD7nxaTyDYF UwP4mb8X4TO6xEE07tEtwwl3q9DTmjnvljojQmSk0+NaELre3AjKqjDCPg/NmpK8qRb4=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lakHq-0001Nv-Rf; Sun, 25 Apr 2021 21:19:25 +0200 From: Lars Ingebrigtsen To: JD Smith Subject: Re: bug#47657: python-shell font-lock with multi-line input: runaway fontification buffer length References: <603226C1-620D-4C53-B8E9-A2ECA3A3DB3C@gmail.com> <87y2dnyhix.fsf@gnus.org> <0BCE3A3A-7A11-465A-8057-0546097D99FA@gmail.com> <87fszusj6z.fsf@gnus.org> <1971BD45-05FC-4124-8A3C-7EBC968D55D5@gmail.com> <87lf96l139.fsf@gnus.org> Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAD1BMVEU1NimsbSbEmhh+ hYb////81lOLAAAAAWJLR0QEj2jZUQAAAAd0SU1FB+UEGRMAB9LIFs4AAAGwSURBVDjLbVRRlsQg CIN6AbAXEE7QLve/2wbUvuns+uGoMQRCHSIlcnch+hmHGVF3FnYsAJAqgE6HOTZ+DHYseh4S55QM VeMCpAsJuY68OzAjKkINTLjesct7llzDJlGIKADVwd26e2VyIFSJsObBkAk4blJepYw/M/M9kAoO BqIm+gK6Idc+skSMHWwCUgdYVs4LEKSSxbNrGbOjkRzORusm1Y0dyssTpA4Gpv4BlGxS7HjSQqgS n8GteJshC+BMYimka51egx/GUmixAaHo5XMOPe973qiOtV6Zi7IqyjPdcu32KsAAJBsm9LIBDZ55 VtmC3jmXL6w8ATGFlw3oT+Wq7VqAnrNNZ2gBGSqwHhSpGtIiijM1spSW54Fq4t6Vr+JmVOKI8nH6 EXFtANT7IdAtdH3YBcraxxlXK5nlyuNfAwCd8rE9YfMngWsB8cS8Ekzgsy3r0QA6X/1SigQ+pTcD xTMF/R3LFv0HkJl7e/d+MvLprP22htJ7NFx3rCcJS0J2XL408GkE9W7Gf8TrwwTxi1JfE16uylfG Ws9Vqs5vkTwE73qfc2rg70H17dYv17c8bOqLIYAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDQt MjVUMTk6MDA6MDcrMDA6MDCDhJcRAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA0LTI1VDE5OjAw OjA3KzAwOjAw8tkvrQAAAABJRU5ErkJggg== X-Now-Playing: Octo Octa's _Resonant Body_: "Power To The People" Date: Sun, 25 Apr 2021 21:19:22 +0200 In-Reply-To: (JD Smith's message of "Sun, 25 Apr 2021 13:53:35 -0400") Message-ID: <8735vejhol.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: JD Smith writes: > Very odd, I get : > > 1 > 1 > 7 > > in *Python-font-lock* after precisely these same steps. What if you use C-j in step > #5 instead of C-c SPC? I don't see any difference. Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 47657 Cc: 47657@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) JD Smith writes: > Very odd, I get : > > 1 > 1 > 7 > > in *Python-font-lock* after precisely these same steps. What if you use C-j in step > #5 instead of C-c SPC? I don't see any difference. (This is with Emacs 27.2 on Debian/Bullseye.) -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Fri May 28 01:28:23 2021 Received: (at control) by debbugs.gnu.org; 28 May 2021 05:28:23 +0000 Received: from localhost ([127.0.0.1]:53466 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lmV2l-00067g-86 for submit@debbugs.gnu.org; Fri, 28 May 2021 01:28:23 -0400 Received: from quimby.gnus.org ([95.216.78.240]:51666) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lmV2k-00067P-8o for control@debbugs.gnu.org; Fri, 28 May 2021 01:28:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Subject:From:To:Message-Id:Date:Sender:Reply-To:Cc: MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Fnih5BemWgxs1qxWqdiUu1h6sfKmu3773JEIyBZT7J4=; b=T+S00Q8OUDYS+Zp+pNYMTTMbgh yxEtHAjCr1N8ADWvG/H+wQj9z6tL0k9m5R+B/2dRS6M0Hrt9ZpMQKCV/Xfzu4LlM0fLGgsEPmUCcy s6sUBqg5E2CmIU3Xei7enrgQB/cUQLar1wQfWBSN70g1LEhfwDhx0zb9aXETx0JAiXfE=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lmV2c-0005Mr-PW for control@debbugs.gnu.org; Fri, 28 May 2021 07:28:16 +0200 Date: Fri, 28 May 2021 07:28:14 +0200 Message-Id: <87sg27whox.fsf@gnus.org> To: control@debbugs.gnu.org From: Lars Ingebrigtsen Subject: control message for bug #47657 X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: tags 47657 - moreinfo quit Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) tags 47657 - moreinfo quit From debbugs-submit-bounces@debbugs.gnu.org Wed Oct 13 12:45:47 2021 Received: (at 47657) by debbugs.gnu.org; 13 Oct 2021 16:45:47 +0000 Received: from localhost ([127.0.0.1]:33210 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mahNz-0006Yy-HS for submit@debbugs.gnu.org; Wed, 13 Oct 2021 12:45:47 -0400 Received: from quimby.gnus.org ([95.216.78.240]:53366) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mahNw-0006Yc-2b for 47657@debbugs.gnu.org; Wed, 13 Oct 2021 12:45:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=94Dj8gXbKRZx8l4Abi35MK52vkarXn11u03YK3+Qs/Q=; b=GR61HnYmVaA4gli1Ed8qQ16S4D Mn9YV8kQXICfjSxi/piSqqE2GEvHg1hvigrbZpGyKm3ytUAEvY2xQSGTEAxM+ImIXLjvMsW73JIgo L+BJYr0glYbia3Wu6FOw7gfQb0Da538k1y82r2k7z/1qXUyCfFML8nAGa9JvvHLs2bMk=; Received: from [84.212.220.105] (helo=elva) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mahNn-0001aq-9z; Wed, 13 Oct 2021 18:45:37 +0200 From: Lars Ingebrigtsen To: JD Smith Subject: Re: bug#47657: python-shell font-lock with multi-line input: runaway fontification buffer length References: <603226C1-620D-4C53-B8E9-A2ECA3A3DB3C@gmail.com> <87y2dnyhix.fsf@gnus.org> <0BCE3A3A-7A11-465A-8057-0546097D99FA@gmail.com> <87fszusj6z.fsf@gnus.org> <1971BD45-05FC-4124-8A3C-7EBC968D55D5@gmail.com> <87lf96l139.fsf@gnus.org> <8735vejhol.fsf@gnus.org> X-Now-Playing: Body =?utf-8?Q?Me=CF=80a's?= _The Work Is Slow_: "Bullitt" Date: Wed, 13 Oct 2021 18:45:34 +0200 In-Reply-To: <8735vejhol.fsf@gnus.org> (Lars Ingebrigtsen's message of "Sun, 25 Apr 2021 21:19:22 +0200") Message-ID: <87bl3s50wh.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Lars Ingebrigtsen writes: > JD Smith writes: > >> Very odd, I get : >> >> 1 >> 1 >> 7 >> >> in *Python-font-lock* after precisely these same steps. What if you >> use C-j in step >> #5 instead of C-c SPC? [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 47657 Cc: 47657@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Lars Ingebrigtsen writes: > JD Smith writes: > >> Very odd, I get : >> >> 1 >> 1 >> 7 >> >> in *Python-font-lock* after precisely these same steps. What if you >> use C-j in step >> #5 instead of C-c SPC? > > I don't see any difference. > > (This is with Emacs 27.2 on Debian/Bullseye.) I was finally able to reproduce this -- I'm not sure what I was doing differently before. This is now fixed in Emacs 29 (I'm not putting the fix into emacs-28, because I'm not 100% sure about it). -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Wed Oct 13 12:45:51 2021 Received: (at control) by debbugs.gnu.org; 13 Oct 2021 16:45:51 +0000 Received: from localhost ([127.0.0.1]:33213 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mahO2-0006ZF-PF for submit@debbugs.gnu.org; Wed, 13 Oct 2021 12:45:51 -0400 Received: from quimby.gnus.org ([95.216.78.240]:53380) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mahO0-0006Yp-Oe for control@debbugs.gnu.org; Wed, 13 Oct 2021 12:45:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Subject:From:To:Message-Id:Date:Sender:Reply-To:Cc: MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=/Vpd28y2AkTfdeh0LATwsDmW8lpBqzvXKZoMIMngx0o=; b=S/mWZomUz15OARiJ8Gs6IEfi6r PZ6b3B/d0rLVHf1Tdzl39s9BvhM0P5EQzcuMptyuAv3CI2ssmehXnHOtw8P+6KOmVBniNXQBaLhXJ SYGv8b8OFGyCe4AQWMiDNvkm7MC5TDd1U4ahvpc7d7Uu1afw5BbUBZX+rqvYZKsUbNfY=; Received: from [84.212.220.105] (helo=elva) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mahNt-0001b1-1P for control@debbugs.gnu.org; Wed, 13 Oct 2021 18:45:43 +0200 Date: Wed, 13 Oct 2021 18:45:40 +0200 Message-Id: <87a6jc50wb.fsf@gnus.org> To: control@debbugs.gnu.org From: Lars Ingebrigtsen Subject: control message for bug #47657 X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: close 47657 29.1 quit Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) close 47657 29.1 quit From unknown Sat Aug 16 21:17:51 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Thu, 11 Nov 2021 12:24:05 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator