unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#25682: 25.1; font-lock: fontifying too slow in some modes on very long lines
@ 2017-02-10 21:33 Ryan B
  2017-02-11 14:07 ` Andreas Röhler
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Ryan B @ 2017-02-10 21:33 UTC (permalink / raw)
  To: 25682

[-- Attachment #1: Type: text/plain, Size: 25990 bytes --]

i occasionally have very long lines in some buffers, e.g. 10k-20k
characters. font-lock-mode often hangs for a long time (5-10s) when
fontifying these lines.

this has evidently been a known issue with font-lock-mode for a long time,
and inspired a number of optimizations and workarounds: jit-lock/lazy-lock
(formerly fast-lock), font-lock-maximum-decoration,
https://www.emacswiki.org/emacs/SoLong , etc. they all work by deferring,
downgrading, or disabling fontification in certain buffers.

that's nice, but i'd ideally like to keep font-lock-mode on in buffers
where very long lines appear, and still prevent the hangs. i'm considering
adding an opt-in max line length to font-lock-mode, after which it would
stop fontifying or evaluating regexps. i'd love to hear feedback on whether
this makes sense!

here are steps that reproduce this, with gnu emacs 25.1.1 on mac os x:

1. put the single long line under the === below (18572 chars long) into a
file
2. run emacs -Q
3. type C-x C-f <filename> RET to open the file
4. type M-x compilation-mode RET

this consistently hangs emacs for 9-10s for me on modern hardware, a 2014
retina macbook pro.

===

[2017-02-10T07:35:45Z django.db.backends] DEBUG: (0.057) SELECT
"xxx_xxxxxx_xxxxxxxx"."xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxx_xxxx", "xxx_xxxxxx_xxxxxxxx"."xxx_xxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xx_xxx",
"xxx_xxxxxx_xxxxxxxx"."xxxx_xxx_xxxxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xx",
MAX("xxx_xxxxxx_xxxxxxxxxxxxxxxxxx"."xx") AS "xxxxxxxx_xx", COUNT(DISTINCT
"xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxx_xx") AS "xxx_xxxxxxx",
MAX("xxxxxxx_xxxxxx"."xxxx_xx") AS "xxxxxx_xxxx_xx",
STRING_AGG("xxxxxxx_xxxxxx"."xxx_xxxxxxx", ' ') AS "xxx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxx_xx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxx_xxxx_xxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xx_xxxxxx_xxxxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xxx_xxxxxxxxxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxx_xxx_xxxxxxxx_xxxxx_xx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxxxx_xxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxx_xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxx_x3_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx1",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx_xxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx1",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx2",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", T11."xx", T11."xxxxxxxx",
T11."xxxx_xxxxx", T11."xx_xxxxxxxxx", T11."xxxxx",
T11."xxxxxxxxxxx_xxxxxxx_xxxxx", T11."xxxxxxx_xx", T11."xxxxx_xxxx",
T11."xxxx_xxxx", T11."xxxxxxxx", T11."xxxxxx", T11."xxxxx_xxxxxx",
T11."xxxxxxx_xxxxxxx_xx", T11."xxxxxxx_xxxxxxxx_xxxxxxx_xx",
T11."xxxxxxx_xx_xxxxx", T11."xxx_xxx_xxx_xxxxxxxx", T11."xx_xxxxx",
T11."xxxxx_xxxxx_xxxxx_xxxxxxx", T11."xx_xxxxxx", T11."xx_xxxxx",
T11."xxxxxxx_xx", T11."xxxxxxx_xx", T11."xxxxxxx_xx",
T11."xxxx_xxxxx_xxxxxxx", T11."xxxxxxxxxxx_xxxxxx_xxxxxx", T12."xx",
T12."xxxxxxx_xx", T12."xxxxxxx_xx", T12."xxx", T12."xxxxx_xxxx",
T12."xxxx_xxxx", T12."xxxxx", T12."xxxxx_xxxxxx", T12."xxx_xxxxxx",
T12."xxxxxxx_xxxx", T12."xxxxxxxxxxx_xxxx", T12."xxxx", T12."xxxxx",
T12."xxxxxxx_xxxx1", T12."xxxxxxx", T12."xxxxxxx_xxxxxxx_xxxxxxx_xxx",
T12."xxxx_xx", T12."xxxxxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxx_xx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxx_xxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx_xxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxxxxxxx_xxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxx_xxxxx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx_xxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", "xxxxxxxx_xxxxxxxx"."xx_xxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxx_xxx_xxxx" FROM "xxx_xxxxxx_xxxxxxxx" LEFT OUTER
JOIN "xxx_xxxxxx_xxxxxxxxxxxxxxx" ON (
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx" =
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN
"xxx_xxxxxx_xxxxxxxxxxxxxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xx" =
"xxx_xxxxxx_xxxxxxxxxxxxxxxxxx"."xxx_xxxxx_xx" ) LEFT OUTER JOIN
"xxx_xxxxxx_xxxxxxxx_xxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xx" =
"xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxxxx_xx" ) LEFT OUTER JOIN
"xxxxxxx_xxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxx_xx" =
"xxxxxxx_xxxxxx"."xx" ) LEFT OUTER JOIN
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx" ON (
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx" =
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx" ON (
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx" =
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx" ON (
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx" =
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx" ON (
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx" =
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN "xxxxx_xxxxxxxxx" T11
ON ( "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx" = T11."xx" ) LEFT
OUTER JOIN "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx" T12 ON ( T11."xx" =
T12."xxxx_xx" ) LEFT OUTER JOIN "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx" ON (
T12."xx" = "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx" )
LEFT OUTER JOIN "xxxxxxxx_xxxxxxxx" ON (
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx" = "xxxxxxxx_xxxxxxxx"."xx" ) WHERE (NOT
("xxx_xxxxxx_xxxxxxxx"."xxxxx" = 'xxxxxxxxx') AND NOT
("xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx" <
'2015-04-20T00:00:00-07:00'::xxxxxxxxxxx) AND NOT
("xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx" IN ('xx', 'xx') AND
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx" IS NOT NULL)) GROUP BY
"xxx_xxxxxx_xxxxxxxx"."xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxx_xxxx", "xxx_xxxxxx_xxxxxxxx"."xxx_xxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xx_xxx",
"xxx_xxxxxx_xxxxxxxx"."xxxx_xxx_xxxxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxx_xx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxx_xxxx_xxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xx_xxxxxx_xxxxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xxx_xxxxxxxxxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxx_xxx_xxxxxxxx_xxxxx_xx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxxxx_xxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxx_xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxx_x3_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx1",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx_xxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx1",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx2",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", T11."xx", T11."xxxxxxxx",
T11."xxxx_xxxxx", T11."xx_xxxxxxxxx", T11."xxxxx",
T11."xxxxxxxxxxx_xxxxxxx_xxxxx", T11."xxxxxxx_xx", T11."xxxxx_xxxx",
T11."xxxx_xxxx", T11."xxxxxxxx", T11."xxxxxx", T11."xxxxx_xxxxxx",
T11."xxxxxxx_xxxxxxx_xx", T11."xxxxxxx_xxxxxxxx_xxxxxxx_xx",
T11."xxxxxxx_xx_xxxxx", T11."xxx_xxx_xxx_xxxxxxxx", T11."xx_xxxxx",
T11."xxxxx_xxxxx_xxxxx_xxxxxxx", T11."xx_xxxxxx", T11."xx_xxxxx",
T11."xxxxxxx_xx", T11."xxxxxxx_xx", T11."xxxxxxx_xx",
T11."xxxx_xxxxx_xxxxxxx", T11."xxxxxxxxxxx_xxxxxx_xxxxxx", T12."xx",
T12."xxxxxxx_xx", T12."xxxxxxx_xx", T12."xxx", T12."xxxxx_xxxx",
T12."xxxx_xxxx", T12."xxxxx", T12."xxxxx_xxxxxx", T12."xxx_xxxxxx",
T12."xxxxxxx_xxxx", T12."xxxxxxxxxxx_xxxx", T12."xxxx", T12."xxxxx",
T12."xxxxxxx_xxxx1", T12."xxxxxxx", T12."xxxxxxx_xxxxxxx_xxxxxxx_xxx",
T12."xxxx_xx", T12."xxxxxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxx_xx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxx_xxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx_xxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxxxxxxx_xxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxx_xxxxx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx_xxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", "xxxxxxxx_xxxxxxxx"."xx_xxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxx_xxx_xxxx"; xxxx=('xxxxxxxxx',
datetime.datetime(2015, 4, 20, 0, 0, tzinfo=<DstTzInfo
'America/Los_Angeles' PDT-1 day, 17:00:00 DST>), 'ff', 'qa')


===



In GNU Emacs 25.1.1 (x86_64-apple-darwin15.6.0, NS appkit-1404.47 Version
10.11.6 (Build 15G1004))
 of 2016-09-17 built on hell.PK5001Z
Windowing system distributor 'Apple', version 10.3.1404
Configured using:
 'configure --disable-dependency-tracking --disable-silent-rules
 --enable-locallisppath=/usr/local/share/emacs/site-lisp
 --infodir=/usr/local/Cellar/emacs/25.1/share/info/emacs
 --prefix=/usr/local/Cellar/emacs/25.1 --without-x --with-xml2
 --without-dbus --without-gnutls --with-rsvg --with-ns
 --disable-ns-self-contained'

Configured features:
JPEG RSVG NOTIFY ACL LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: JavaScript

Minor modes in effect:
  helm-mode: t
  diff-auto-refine-mode: t
  rainbow-identifiers-mode: t
  rainbow-delimiters-mode: t
  async-bytecomp-package-mode: t
  global-auto-revert-mode: t
  desktop-save-mode: t
  savehist-mode: t
  show-paren-mode: t
  delete-selection-mode: t
  recentf-mode: t
  global-subword-mode: t
  subword-mode: t
  shell-dirtrack-mode: t
  global-eldoc-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:
Saving file /Users/ryan/.emacs.d/recentf...
Wrote /Users/ryan/.emacs.d/recentf
Desktop saved in ~/.emacs.d/
Saving file /Users/ryan/.emacs.d/recentf...
Wrote /Users/ryan/.emacs.d/recentf
Reverting buffer ‘recentf’.
next-line: End of buffer [2 times]
Mark set [5 times]
Saving file /tmp/*scratch*...
Wrote /tmp/*scratch*

Load-path shadows:
/Users/ryan/.emacs.d/elpa/seq-2.19/seq hides
/usr/local/Cellar/emacs/25.1/share/emacs/25.1/lisp/emacs-lisp/seq

Features:
(shadow sort mail-extr emacsbug sendmail ibuf-ext man vc-annotate
log-view pcmpl-unix vc-bzr vc-src vc-sccs vc-cvs vc-rcs dabbrev
image-file dirtrack emacs-lock manoj-dark-theme ibuffer eieio-opt
find-func cus-edit rst fillcode cc-bytecomp make-mode filecache
tramp-cache conf-mode helm-command vc-svn helm-elisp helm-eval edebug
sql view json-mode json-reformat json-snatcher misearch multi-isearch
ido ess-toolbar ess-mouse mouseme ess-menu ess-swv ess-noweb
ess-noweb-font-lock-mode ess-bugs-l essd-els ess-sas-d ess-sas-l
ess-sas-a ess-sta-d ess-sta-l make-regexp ess-sp6-d ess-dde ess-sp3-d
ess-julia julia-mode ess-r-d ess-r-syntax ess-r-completion ess-roxy
essddr hideshow ess-help ess-r-package ess-s-l ess-site ess ess-inf
ess-tracebug ess-mode ess-noweb-mode ess-utils ess-generics cl
ess-custom ess-compat nxml-uchnm rng-xsd xsd-regexp rng-cmpct rng-nxml
rng-valid rng-loc rng-uri rng-parse nxml-parse rng-match rng-dt rng-util
rng-pttrn nxml-ns nxml-mode nxml-outln nxml-rap nxml-util nxml-glyph
nxml-enc xmltok php-mode derived speedbar sb-image ezimage dframe
flymake cc-langs smerge-mode vc-dir ewoc vc vc-dispatcher winner
yaml-mode jka-compr helm-mode vc-git diff-mode rainbow-identifiers color
rainbow-delimiters helm-misc helm-files image-dired dired-x dired-aux
helm-buffers helm-elscreen helm-tags helm-bookmark helm-adaptive
helm-info bookmark pp helm-locate helm-grep helm-regexp helm-external
helm-net browse-url xml helm-utils helm-help helm-types helm-config
helm-easymenu async-bytecomp async helm edmacro kmacro helm-source
helm-multi-match helm-lib midnight autorevert filenotify desktop
frameset savehist paren redo+ delsel warnings grep cus-start cus-load
git-link dash-at-point recentf tree-widget wid-edit cap-words superword
subword jade-mode js imenu cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs python tramp-sh tramp
tramp-compat tramp-loaddefs trampver shell pcomplete sh-script
executable sgml-mode go-mode url url-proxy url-privacy url-expand
url-methods url-history url-cookie url-domsuf url-util mailcap find-file
ffap etags xref project compile comint ansi-color css-mode smie
markdown-mode thingatpt noutline outline log-edit easy-mmode message
dired format-spec rfc822 mml mml-sec epg mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev mail-utils
gmm-utils mailheader ring pcvs-util add-log finder-inf gh-common
gh-profile url-parse auth-source gnus-util mm-util help-fns mail-prsvr
password-cache url-vars rx s marshal cl-seq eieio-compat ht json map
dash eieio eieio-core cl-macs info package epg-config seq byte-opt gv
bytecomp byte-compile cl-extra help-mode easymenu cconv cl-loaddefs
cl-lib subr-x pcase advice server time-date mule-util tooltip eldoc
electric uniquify ediff-hook vc-hooks lisp-float-type mwheel ns-win
ucs-normalize term/common-win tool-bar dnd fontset image regexp-opt
fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register
page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
font-lock syntax facemenu font-core frame cl-generic cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese charscript case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer cl-preloaded nadvice
loaddefs button faces cus-face macroexp files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote kqueue cocoa ns multi-tty
make-network-process emacs)

Memory information:
((conses 16 5126063 736652)
 (symbols 48 53998 0)
 (miscs 40 3720 24660)
 (strings 32 157538 77287)
 (string-bytes 1 5024002)
 (vectors 16 90573)
 (vector-slots 8 2240527 189813)
 (floats 8 946 1835)
 (intervals 56 1059644 6492)
 (buffers 976 638))


-- 
https://snarfed.org/

[-- Attachment #2: Type: text/html, Size: 33840 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#25682: 25.1; font-lock: fontifying too slow in some modes on very long lines
  2017-02-10 21:33 bug#25682: 25.1; font-lock: fontifying too slow in some modes on very long lines Ryan B
@ 2017-02-11 14:07 ` Andreas Röhler
  2019-10-31 17:07 ` Lars Ingebrigtsen
  2022-07-23  9:03 ` Lars Ingebrigtsen
  2 siblings, 0 replies; 6+ messages in thread
From: Andreas Röhler @ 2017-02-11 14:07 UTC (permalink / raw)
  To: 25682

[-- Attachment #1: Type: text/plain, Size: 27140 bytes --]



On 10.02.2017 22:33, Ryan B wrote:
> i occasionally have very long lines in some buffers, e.g. 10k-20k 
> characters. font-lock-mode often hangs for a long time (5-10s) when 
> fontifying these lines.
>
> this has evidently been a known issue with font-lock-mode for a long 
> time, and inspired a number of optimizations and workarounds: 
> jit-lock/lazy-lock (formerly fast-lock), font-lock-maximum-decoration, 
> https://www.emacswiki.org/emacs/SoLong , etc. they all work by 
> deferring, downgrading, or disabling fontification in certain buffers.
>
> that's nice, but i'd ideally like to keep font-lock-mode on in buffers 
> where very long lines appear, and still prevent the hangs. i'm 
> considering adding an opt-in max line length to font-lock-mode, after 
> which it would stop fontifying or evaluating regexps. i'd love to hear 
> feedback on whether this makes sense!
>
> here are steps that reproduce this, with gnu emacs 25.1.1 on mac os x:
>
> 1. put the single long line under the === below (18572 chars long) 
> into a file
> 2. run emacs -Q
> 3. type C-x C-f <filename> RET to open the file
> 4. type M-x compilation-mode RET
>
> this consistently hangs emacs for 9-10s for me on modern hardware, a 
> 2014 retina macbook pro.
>
> ===
>
> [2017-02-10T07:35:45Z django.db.backends] DEBUG: (0.057) SELECT 
> "xxx_xxxxxx_xxxxxxxx"."xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxx_xxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xx_xxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxx_xxx_xxxxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xx", 
> MAX("xxx_xxxxxx_xxxxxxxxxxxxxxxxxx"."xx") AS "xxxxxxxx_xx", 
> COUNT(DISTINCT "xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxx_xx") AS 
> "xxx_xxxxxxx", MAX("xxxxxxx_xxxxxx"."xxxx_xx") AS "xxxxxx_xxxx_xx", 
> STRING_AGG("xxxxxxx_xxxxxx"."xxx_xxxxxxx", ' ') AS "xxx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxx_xx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxx_xxxx_xxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xx_xxxxxx_xxxxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xxx_xxxxxxxxxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxx_xxx_xxxxxxxx_xxxxx_xx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxxxx_xxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxx_x3_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx1", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx_xxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx1", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx2", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", T11."xx", T11."xxxxxxxx", 
> T11."xxxx_xxxxx", T11."xx_xxxxxxxxx", T11."xxxxx", 
> T11."xxxxxxxxxxx_xxxxxxx_xxxxx", T11."xxxxxxx_xx", T11."xxxxx_xxxx", 
> T11."xxxx_xxxx", T11."xxxxxxxx", T11."xxxxxx", T11."xxxxx_xxxxxx", 
> T11."xxxxxxx_xxxxxxx_xx", T11."xxxxxxx_xxxxxxxx_xxxxxxx_xx", 
> T11."xxxxxxx_xx_xxxxx", T11."xxx_xxx_xxx_xxxxxxxx", T11."xx_xxxxx", 
> T11."xxxxx_xxxxx_xxxxx_xxxxxxx", T11."xx_xxxxxx", T11."xx_xxxxx", 
> T11."xxxxxxx_xx", T11."xxxxxxx_xx", T11."xxxxxxx_xx", 
> T11."xxxx_xxxxx_xxxxxxx", T11."xxxxxxxxxxx_xxxxxx_xxxxxx", T12."xx", 
> T12."xxxxxxx_xx", T12."xxxxxxx_xx", T12."xxx", T12."xxxxx_xxxx", 
> T12."xxxx_xxxx", T12."xxxxx", T12."xxxxx_xxxxxx", T12."xxx_xxxxxx", 
> T12."xxxxxxx_xxxx", T12."xxxxxxxxxxx_xxxx", T12."xxxx", T12."xxxxx", 
> T12."xxxxxxx_xxxx1", T12."xxxxxxx", T12."xxxxxxx_xxxxxxx_xxxxxxx_xxx", 
> T12."xxxx_xx", T12."xxxxxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxx_xx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx_xxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxxxxxxx_xxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xx_xxxx_xx", "xxxxxxxx_xxxxxxxx"."xxx_xxx_xxxx" 
> FROM "xxx_xxxxxx_xxxxxxxx" LEFT OUTER JOIN 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx" ON ( 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx" = 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN 
> "xxx_xxxxxx_xxxxxxxxxxxxxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xx" = 
> "xxx_xxxxxx_xxxxxxxxxxxxxxxxxx"."xxx_xxxxx_xx" ) LEFT OUTER JOIN 
> "xxx_xxxxxx_xxxxxxxx_xxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xx" = 
> "xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxxxx_xx" ) LEFT OUTER JOIN 
> "xxxxxxx_xxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxx_xx" = 
> "xxxxxxx_xxxxxx"."xx" ) LEFT OUTER JOIN 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx" ON ( 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx" = 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx" ON ( 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx" = 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx" ON ( 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx" = 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx" ON ( 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx" = 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN 
> "xxxxx_xxxxxxxxx" T11 ON ( 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx" = T11."xx" ) LEFT 
> OUTER JOIN "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx" T12 ON ( T11."xx" = 
> T12."xxxx_xx" ) LEFT OUTER JOIN "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx" 
> ON ( T12."xx" = 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx" ) LEFT 
> OUTER JOIN "xxxxxxxx_xxxxxxxx" ON ( 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx" = "xxxxxxxx_xxxxxxxx"."xx" ) WHERE 
> (NOT ("xxx_xxxxxx_xxxxxxxx"."xxxxx" = 'xxxxxxxxx') AND NOT 
> ("xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx" < 
> '2015-04-20T00:00:00-07:00'::xxxxxxxxxxx) AND NOT 
> ("xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx" IN ('xx', 'xx') AND 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx" IS NOT NULL)) GROUP BY 
> "xxx_xxxxxx_xxxxxxxx"."xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxx_xxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xx_xxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxx_xxx_xxxxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxx_xx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxx_xxxx_xxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xx_xxxxxx_xxxxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xxx_xxxxxxxxxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxx_xxx_xxxxxxxx_xxxxx_xx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxxxx_xxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxx_x3_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx1", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx_xxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx1", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx2", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", T11."xx", T11."xxxxxxxx", 
> T11."xxxx_xxxxx", T11."xx_xxxxxxxxx", T11."xxxxx", 
> T11."xxxxxxxxxxx_xxxxxxx_xxxxx", T11."xxxxxxx_xx", T11."xxxxx_xxxx", 
> T11."xxxx_xxxx", T11."xxxxxxxx", T11."xxxxxx", T11."xxxxx_xxxxxx", 
> T11."xxxxxxx_xxxxxxx_xx", T11."xxxxxxx_xxxxxxxx_xxxxxxx_xx", 
> T11."xxxxxxx_xx_xxxxx", T11."xxx_xxx_xxx_xxxxxxxx", T11."xx_xxxxx", 
> T11."xxxxx_xxxxx_xxxxx_xxxxxxx", T11."xx_xxxxxx", T11."xx_xxxxx", 
> T11."xxxxxxx_xx", T11."xxxxxxx_xx", T11."xxxxxxx_xx", 
> T11."xxxx_xxxxx_xxxxxxx", T11."xxxxxxxxxxx_xxxxxx_xxxxxx", T12."xx", 
> T12."xxxxxxx_xx", T12."xxxxxxx_xx", T12."xxx", T12."xxxxx_xxxx", 
> T12."xxxx_xxxx", T12."xxxxx", T12."xxxxx_xxxxxx", T12."xxx_xxxxxx", 
> T12."xxxxxxx_xxxx", T12."xxxxxxxxxxx_xxxx", T12."xxxx", T12."xxxxx", 
> T12."xxxxxxx_xxxx1", T12."xxxxxxx", T12."xxxxxxx_xxxxxxx_xxxxxxx_xxx", 
> T12."xxxx_xx", T12."xxxxxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxx_xx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx_xxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxxxxxxx_xxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xx_xxxx_xx", "xxxxxxxx_xxxxxxxx"."xxx_xxx_xxxx"; 
> xxxx=('xxxxxxxxx', datetime.datetime(2015, 4, 20, 0, 0, 
> tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>), 
> 'ff', 'qa')
>
>
> ===
>
>
>
> In GNU Emacs 25.1.1 (x86_64-apple-darwin15.6.0, NS appkit-1404.47 
> Version 10.11.6 (Build 15G1004))
>  of 2016-09-17 built on hell.PK5001Z
> Windowing system distributor 'Apple', version 10.3.1404
> Configured using:
>  'configure --disable-dependency-tracking --disable-silent-rules
>  --enable-locallisppath=/usr/local/share/emacs/site-lisp
>  --infodir=/usr/local/Cellar/emacs/25.1/share/info/emacs
>  --prefix=/usr/local/Cellar/emacs/25.1 --without-x --with-xml2
>  --without-dbus --without-gnutls --with-rsvg --with-ns
>  --disable-ns-self-contained'
>
> Configured features:
> JPEG RSVG NOTIFY ACL LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS
>
> Important settings:
>   value of $LANG: en_US.UTF-8
>   locale-coding-system: utf-8-unix
>
> Major mode: JavaScript
>
> Minor modes in effect:
>   helm-mode: t
>   diff-auto-refine-mode: t
>   rainbow-identifiers-mode: t
>   rainbow-delimiters-mode: t
>   async-bytecomp-package-mode: t
>   global-auto-revert-mode: t
>   desktop-save-mode: t
>   savehist-mode: t
>   show-paren-mode: t
>   delete-selection-mode: t
>   recentf-mode: t
>   global-subword-mode: t
>   subword-mode: t
>   shell-dirtrack-mode: t
>   global-eldoc-mode: t
>   mouse-wheel-mode: t
>   file-name-shadow-mode: t
>   global-font-lock-mode: t
>   font-lock-mode: t
>   auto-composition-mode: t
>   auto-encryption-mode: t
>   auto-compression-mode: t
>   column-number-mode: t
>   line-number-mode: t
>   transient-mark-mode: t
>
> Recent messages:
> Saving file /Users/ryan/.emacs.d/recentf...
> Wrote /Users/ryan/.emacs.d/recentf
> Desktop saved in ~/.emacs.d/
> Saving file /Users/ryan/.emacs.d/recentf...
> Wrote /Users/ryan/.emacs.d/recentf
> Reverting buffer ‘recentf’.
> next-line: End of buffer [2 times]
> Mark set [5 times]
> Saving file /tmp/*scratch*...
> Wrote /tmp/*scratch*
>
> Load-path shadows:
> /Users/ryan/.emacs.d/elpa/seq-2.19/seq hides 
> /usr/local/Cellar/emacs/25.1/share/emacs/25.1/lisp/emacs-lisp/seq
>
> Features:
> (shadow sort mail-extr emacsbug sendmail ibuf-ext man vc-annotate
> log-view pcmpl-unix vc-bzr vc-src vc-sccs vc-cvs vc-rcs dabbrev
> image-file dirtrack emacs-lock manoj-dark-theme ibuffer eieio-opt
> find-func cus-edit rst fillcode cc-bytecomp make-mode filecache
> tramp-cache conf-mode helm-command vc-svn helm-elisp helm-eval edebug
> sql view json-mode json-reformat json-snatcher misearch multi-isearch
> ido ess-toolbar ess-mouse mouseme ess-menu ess-swv ess-noweb
> ess-noweb-font-lock-mode ess-bugs-l essd-els ess-sas-d ess-sas-l
> ess-sas-a ess-sta-d ess-sta-l make-regexp ess-sp6-d ess-dde ess-sp3-d
> ess-julia julia-mode ess-r-d ess-r-syntax ess-r-completion ess-roxy
> essddr hideshow ess-help ess-r-package ess-s-l ess-site ess ess-inf
> ess-tracebug ess-mode ess-noweb-mode ess-utils ess-generics cl
> ess-custom ess-compat nxml-uchnm rng-xsd xsd-regexp rng-cmpct rng-nxml
> rng-valid rng-loc rng-uri rng-parse nxml-parse rng-match rng-dt rng-util
> rng-pttrn nxml-ns nxml-mode nxml-outln nxml-rap nxml-util nxml-glyph
> nxml-enc xmltok php-mode derived speedbar sb-image ezimage dframe
> flymake cc-langs smerge-mode vc-dir ewoc vc vc-dispatcher winner
> yaml-mode jka-compr helm-mode vc-git diff-mode rainbow-identifiers color
> rainbow-delimiters helm-misc helm-files image-dired dired-x dired-aux
> helm-buffers helm-elscreen helm-tags helm-bookmark helm-adaptive
> helm-info bookmark pp helm-locate helm-grep helm-regexp helm-external
> helm-net browse-url xml helm-utils helm-help helm-types helm-config
> helm-easymenu async-bytecomp async helm edmacro kmacro helm-source
> helm-multi-match helm-lib midnight autorevert filenotify desktop
> frameset savehist paren redo+ delsel warnings grep cus-start cus-load
> git-link dash-at-point recentf tree-widget wid-edit cap-words superword
> subword jade-mode js imenu cc-mode cc-fonts cc-guess cc-menus cc-cmds
> cc-styles cc-align cc-engine cc-vars cc-defs python tramp-sh tramp
> tramp-compat tramp-loaddefs trampver shell pcomplete sh-script
> executable sgml-mode go-mode url url-proxy url-privacy url-expand
> url-methods url-history url-cookie url-domsuf url-util mailcap find-file
> ffap etags xref project compile comint ansi-color css-mode smie
> markdown-mode thingatpt noutline outline log-edit easy-mmode message
> dired format-spec rfc822 mml mml-sec epg mm-decode mm-bodies mm-encode
> mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev mail-utils
> gmm-utils mailheader ring pcvs-util add-log finder-inf gh-common
> gh-profile url-parse auth-source gnus-util mm-util help-fns mail-prsvr
> password-cache url-vars rx s marshal cl-seq eieio-compat ht json map
> dash eieio eieio-core cl-macs info package epg-config seq byte-opt gv
> bytecomp byte-compile cl-extra help-mode easymenu cconv cl-loaddefs
> cl-lib subr-x pcase advice server time-date mule-util tooltip eldoc
> electric uniquify ediff-hook vc-hooks lisp-float-type mwheel ns-win
> ucs-normalize term/common-win tool-bar dnd fontset image regexp-opt
> fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register
> page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
> font-lock syntax facemenu font-core frame cl-generic cham georgian
> utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
> japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
> ethiopic indian cyrillic chinese charscript case-table epa-hook
> jka-cmpr-hook help simple abbrev minibuffer cl-preloaded nadvice
> loaddefs button faces cus-face macroexp files text-properties overlay
> sha1 md5 base64 format env code-pages mule custom widget
> hashtable-print-readable backquote kqueue cocoa ns multi-tty
> make-network-process emacs)
>
> Memory information:
> ((conses 16 5126063 736652)
>  (symbols 48 53998 0)
>  (miscs 40 3720 24660)
>  (strings 32 157538 77287)
>  (string-bytes 1 5024002)
>  (vectors 16 90573)
>  (vector-slots 8 2240527 189813)
>  (floats 8 946 1835)
>  (intervals 56 1059644 6492)
>  (buffers 976 638))
>
>
> -- 
> https://snarfed.org/

At my machine, which is not fastest, it took 55 sec until cursor returned.
GNU Emacs 25.1.91.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2017-01-02

Linux sprache 3.16.0-4-686-pae #1 SMP Debian 3.16.39-1 (2016-12-30) i686 
GNU/Linux

[-- Attachment #2: Type: text/html, Size: 31587 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#25682: 25.1; font-lock: fontifying too slow in some modes on very long lines
  2017-02-10 21:33 bug#25682: 25.1; font-lock: fontifying too slow in some modes on very long lines Ryan B
  2017-02-11 14:07 ` Andreas Röhler
@ 2019-10-31 17:07 ` Lars Ingebrigtsen
  2019-10-31 17:26   ` Eli Zaretskii
  2022-07-23  9:03 ` Lars Ingebrigtsen
  2 siblings, 1 reply; 6+ messages in thread
From: Lars Ingebrigtsen @ 2019-10-31 17:07 UTC (permalink / raw)
  To: Ryan B; +Cc: 25682

[-- Attachment #1: Type: text/plain, Size: 705 bytes --]

Ryan B <public@ryanb.org> writes:

> here are steps that reproduce this, with gnu emacs 25.1.1 on mac os x:
>
> 1. put the single long line under the === below (18572 chars long) into a file
> 2. run emacs -Q
> 3. type C-x C-f <filename> RET to open the file
> 4. type M-x compilation-mode RET
>
> this consistently hangs emacs for 9-10s for me on modern hardware, a 2014
> retina macbook pro.

The example was corrupted in transit (line-folded), so I've included a
fixed-up version as an attachment here.

Running M-x compilation-mode takes about five seconds for me, but this
laptop is pretty fast.

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

[-- Attachment #2: long.txt --]
[-- Type: text/plain, Size: 18578 bytes --]

[2017-02-10T07:35:45Z django.db.backends] DEBUG: (0.057) SELECT "xxx_xxxxxx_xxxxxxxx"."xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xxxx", "xxx_xxxxxx_xxxxxxxx"."xxx_xxxxx_xxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xx_xxx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xxx_xxxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xx", MAX ("xxx_xxxxxx_xxxxxxxxxxxxxxxxxx"."xx") AS "xxxxxxxx_xx", COUNT(DISTINCT "xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxx_xx") AS "xxx_xxxxxxx", MAX ("xxxxxxx_xxxxxx"."xxxx_xx") AS "xxxxxx_xxxx_xx", STRING_AGG ("xxxxxxx_xxxxxx"."xxx_xxxxxxx", ' ') AS "xxx_xxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx_xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxx_xx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxx_xxxx_xxxxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xx_xxxxxx_xxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xxx_xxxxxxxxxx_xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxx_xxx_xxxxxxxx_xxxxx_xx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxxxx_xxxxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxx_xxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxx_x3_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx1", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxx_xxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx_xxxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx1", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx2", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxx_xxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", T11."xx", T11."xxxxxxxx", T11."xxxx_xxxxx", T11."xx_xxxxxxxxx", T11."xxxxx", T11."xxxxxxxxxxx_xxxxxxx_xxxxx", T11."xxxxxxx_xx", T11."xxxxx_xxxx", T11."xxxx_xxxx", T11."xxxxxxxx", T11."xxxxxx", T11."xxxxx_xxxxxx", T11."xxxxxxx_xxxxxxx_xx", T11."xxxxxxx_xxxxxxxx_xxxxxxx_xx", T11."xxxxxxx_xx_xxxxx", T11."xxx_xxx_xxx_xxxxxxxx", T11."xx_xxxxx", T11."xxxxx_xxxxx_xxxxx_xxxxxxx", T11."xx_xxxxxx", T11."xx_xxxxx", T11."xxxxxxx_xx", T11."xxxxxxx_xx", T11."xxxxxxx_xx", T11."xxxx_xxxxx_xxxxxxx", T11."xxxxxxxxxxx_xxxxxx_xxxxxx", T12."xx", T12."xxxxxxx_xx", T12."xxxxxxx_xx", T12."xxx", T12."xxxxx_xxxx", T12."xxxx_xxxx", T12."xxxxx", T12."xxxxx_xxxxxx", T12."xxx_xxxxxx", T12."xxxxxxx_xxxx", T12."xxxxxxxxxxx_xxxx", T12."xxxx", T12."xxxxx", T12."xxxxxxx_xxxx1", T12."xxxxxxx", T12."xxxxxxx_xxxxxxx_xxxxxxx_xxx", T12."xxxx_xx", T12."xxxxxxxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxx_xx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xxxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxxxxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxx_xxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxxxxxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxx_xx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx_xxxxxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxxxxxxx_xxxxxxxx"."xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxx_xxxxx", "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx_xxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", "xxxxxxxx_xxxxxxxx"."xx_xxxx_xx", "xxxxxxxx_xxxxxxxx"."xxx_xxx_xxxx" FROM "xxx_xxxxxx_xxxxxxxx" LEFT OUTER JOIN "xxx_xxxxxx_xxxxxxxxxxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx" = "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN "xxx_xxxxxx_xxxxxxxxxxxxxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xx" = "xxx_xxxxxx_xxxxxxxxxxxxxxxxxx"."xxx_xxxxx_xx" ) LEFT OUTER JOIN "xxx_xxxxxx_xxxxxxxx_xxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xx" = "xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxxxx_xx" ) LEFT OUTER JOIN "xxxxxxx_xxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxx_xx" = "xxxxxxx_xxxxxx"."xx" ) LEFT OUTER JOIN "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx" = "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx" ON ( "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx" = "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx" ON ( "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx" = "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN "xxxxxxxxxx_xxxxxxxxxxxxxxxxx" ON ( "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx" = "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN "xxxxx_xxxxxxxxx" T11 ON ( "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx" = T11."xx" ) LEFT OUTER JOIN "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx" T12 ON ( T11."xx" = T12."xxxx_xx" ) LEFT OUTER JOIN "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx" ON ( T12."xx" = "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx" ) LEFT OUTER JOIN "xxxxxxxx_xxxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx" = "xxxxxxxx_xxxxxxxx"."xx" ) WHERE (NOT ("xxx_xxxxxx_xxxxxxxx"."xxxxx" = 'xxxxxxxxx') AND NOT ("xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx" < '2015-04-20T00:00:00-07:00'::xxxxxxxxxxx) AND NOT ("xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx" IN ('xx', 'xx') AND "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx" IS NOT NULL)) GROUP BY "xxx_xxxxxx_xxxxxxxx"."xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xxxx", "xxx_xxxxxx_xxxxxxxx"."xxx_xxxxx_xxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xx_xxx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xxx_xxxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx_xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxx_xx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxx_xxxx_xxxxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xx_xxxxxx_xxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xxx_xxxxxxxxxx_xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxx_xxx_xxxxxxxx_xxxxx_xx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxxxx_xxxxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxx_xxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxx_x3_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx1", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxx_xxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx_xxxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx1", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx2", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxx_xxxx", "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", T11."xx", T11."xxxxxxxx", T11."xxxx_xxxxx", T11."xx_xxxxxxxxx", T11."xxxxx", T11."xxxxxxxxxxx_xxxxxxx_xxxxx", T11."xxxxxxx_xx", T11."xxxxx_xxxx", T11."xxxx_xxxx", T11."xxxxxxxx", T11."xxxxxx", T11."xxxxx_xxxxxx", T11."xxxxxxx_xxxxxxx_xx", T11."xxxxxxx_xxxxxxxx_xxxxxxx_xx", T11."xxxxxxx_xx_xxxxx", T11."xxx_xxx_xxx_xxxxxxxx", T11."xx_xxxxx", T11."xxxxx_xxxxx_xxxxx_xxxxxxx", T11."xx_xxxxxx", T11."xx_xxxxx", T11."xxxxxxx_xx", T11."xxxxxxx_xx", T11."xxxxxxx_xx", T11."xxxx_xxxxx_xxxxxxx", T11."xxxxxxxxxxx_xxxxxx_xxxxxx", T12."xx", T12."xxxxxxx_xx", T12."xxxxxxx_xx", T12."xxx", T12."xxxxx_xxxx", T12."xxxx_xxxx", T12."xxxxx", T12."xxxxx_xxxxxx", T12."xxx_xxxxxx", T12."xxxxxxx_xxxx", T12."xxxxxxxxxxx_xxxx", T12."xxxx", T12."xxxxx", T12."xxxxxxx_xxxx1", T12."xxxxxxx", T12."xxxxxxx_xxxxxxx_xxxxxxx_xxx", T12."xxxx_xx", T12."xxxxxxxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxx_xx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xxxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxxxxxxx_xxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxx_xxxxxx", "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxx_xxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxxxxxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxx_xx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx_xxxxxxx", "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxxxxxxx_xxxxxxxx"."xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxx_xxxxx", "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx_xxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", "xxxxxxxx_xxxxxxxx"."xx_xxxx_xx", "xxxxxxxx_xxxxxxxx"."xxx_xxx_xxxx"; xxxx=('xxxxxxxxx', datetime.datetime(2015, 4, 20, 0, 0, tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>), 'ff', 'qa') 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#25682: 25.1; font-lock: fontifying too slow in some modes on very long lines
  2019-10-31 17:07 ` Lars Ingebrigtsen
@ 2019-10-31 17:26   ` Eli Zaretskii
  2019-10-31 17:32     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2019-10-31 17:26 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 25682, public

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Date: Thu, 31 Oct 2019 18:07:53 +0100
> Cc: 25682@debbugs.gnu.org
> 
> > 1. put the single long line under the === below (18572 chars long) into a file
> > 2. run emacs -Q
> > 3. type C-x C-f <filename> RET to open the file
> > 4. type M-x compilation-mode RET
> >
> > this consistently hangs emacs for 9-10s for me on modern hardware, a 2014
> > retina macbook pro.
> 
> The example was corrupted in transit (line-folded), so I've included a
> fixed-up version as an attachment here.

The profile is below.

> Running M-x compilation-mode takes about five seconds for me, but this
> laptop is pretty fast.

Yours is an optimized build, right?

- ...                                                            3375  98%
 - compilation--ensure-parse                                     3362  98%
  - save-excursion                                               3362  98%
   - if                                                          3362  98%
    - progn                                                      3362  98%
     - let                                                       3362  98%
      - let*                                                     3362  98%
       - unwind-protect                                          3362  98%
        - progn                                                  3362  98%
         - compilation--parse-region                             3362  98%
          - if                                                   3362  98%
           - compilation-parse-errors                            3362  98%
            - let                                                3362  98%
             - while                                             3362  98%
              - let                                              3362  98%
               - let                                             3362  98%
                  while                                          3362  98%
   Automatic GC                                                    13   0%
- command-execute                                                  50   1%
 - call-interactively                                              50   1%
  - funcall-interactively                                          48   1%
   - execute-extended-command                                      48   1%
    - execute-extended-command--shorter                            45   1%
     - completion-try-completion                                   45   1%
      - completion--nth-completion                                 45   1%
       - completion--some                                          45   1%
        - #<compiled -0x1ffffffff85d3920>                          45   1%
         - completion-pcm-try-completion                           28   0%
          - completion-pcm--find-all-completions                   26   0%
             completion-pcm--all-completions                       26   0%
          - completion-pcm--merge-try                               2   0%
             completion-pcm--merge-completions                      1   0%
           completion-basic-try-completion                         17   0%
    - command-execute                                               1   0%
     - call-interactively                                           1   0%
      - funcall-interactively                                       1   0%
       - compilation-mode                                           1   0%
        - run-mode-hooks                                            1   0%
         - hack-local-variables                                     1   0%
          - hack-dir-local-variables                                1   0%
           - dir-locals-find-file                                   1   0%
            - locate-dominating-file                                1   0%
               dir-locals--all-files                                1   0%
    - sit-for                                                       1   0%
       redisplay                                                    1   0%
  - byte-code                                                       2   0%
   - read-extended-command                                          2   0%
    - completing-read                                               2   0%
     - completing-read-default                                      2   0%
        read-from-minibuffer                                        2   0%





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#25682: 25.1; font-lock: fontifying too slow in some modes on very long lines
  2019-10-31 17:26   ` Eli Zaretskii
@ 2019-10-31 17:32     ` Lars Ingebrigtsen
  0 siblings, 0 replies; 6+ messages in thread
From: Lars Ingebrigtsen @ 2019-10-31 17:32 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 25682, public

Eli Zaretskii <eliz@gnu.org> writes:

>> Running M-x compilation-mode takes about five seconds for me, but this
>> laptop is pretty fast.
>
> Yours is an optimized build, right?

Yup.

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





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#25682: 25.1; font-lock: fontifying too slow in some modes on very long lines
  2017-02-10 21:33 bug#25682: 25.1; font-lock: fontifying too slow in some modes on very long lines Ryan B
  2017-02-11 14:07 ` Andreas Röhler
  2019-10-31 17:07 ` Lars Ingebrigtsen
@ 2022-07-23  9:03 ` Lars Ingebrigtsen
  2 siblings, 0 replies; 6+ messages in thread
From: Lars Ingebrigtsen @ 2022-07-23  9:03 UTC (permalink / raw)
  To: Ryan B; +Cc: 25682

Ryan B <public@ryanb.org> writes:

> i occasionally have very long lines in some buffers, e.g. 10k-20k characters.
> font-lock-mode often hangs for a long time (5-10s) when fontifying these lines.

These issues have been fixed in Emacs 29 -- long lines no longer slows
down Emacs (to these degrees), so I'm closing this bug report.  (And I'm
not able to reproduce the problem in the test case here with the current
Emacs.)

There may be issues remaining with long lines, and if so, please open
new bug reports for those issues (and cases for reproduction would be
appreciated).







^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-07-23  9:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-10 21:33 bug#25682: 25.1; font-lock: fontifying too slow in some modes on very long lines Ryan B
2017-02-11 14:07 ` Andreas Röhler
2019-10-31 17:07 ` Lars Ingebrigtsen
2019-10-31 17:26   ` Eli Zaretskii
2019-10-31 17:32     ` Lars Ingebrigtsen
2022-07-23  9:03 ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).