all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#13755: 24.3.50; regression: incorrect font-lock highlighting
@ 2013-02-18 22:38 Drew Adams
  2013-02-26  6:16 ` Drew Adams
  2013-03-09 14:38 ` Drew Adams
  0 siblings, 2 replies; 7+ messages in thread
From: Drew Adams @ 2013-02-18 22:38 UTC (permalink / raw)
  To: 13755

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

The build from 2013-02-17 broke not only whether/when font-locking
occurs (see bugs #13751 and #13730).  It broke also what gets
highlighted.  A build from Feb 15 shows no font-lock problems.
 
See the two attached screenshots.  The one from 02-17 does not highlight
the command name (`icicle-customize-apropos-options-of-type') completely,
as it should and as does the one from 02-15.
 
Attached are also files showing the values of `font-lock-keywords' in an
Emacs Lisp buffer from builds of Feb 15 and Feb 17.  Diffing them shows
something interesting to you, perhaps (doesn't do much for me).  But
what is significant here is that the part that should govern the
highlighting that I notice broken is identical.  So something else is
wrong, somewhere.

In GNU Emacs 24.3.50.1 (i386-mingw-nt5.1.2600)
 of 2013-02-17 on VBOX-W7
Bzr revision: 111822 rgm@gnu.org-20130217190146-mm9bh3227ev56bus
Windowing system distributor `Microsoft Corp.', version 5.1.2600
Configured using:
 `configure --with-gcc (4.7) --no-opt --enable-checking --cflags
 -IC:/emacs/libs/libXpm-3.5.10/include -IC:/emacs/libs/libXpm-3.5.10/src
 -IC:/emacs/libs/libpng-dev_1.4.3-1_win32/include
 -IC:/emacs/libs/zlib-dev_1.2.5-2_win32/include
 -IC:/emacs/libs/giflib-4.1.4-1-lib/include
 -IC:/emacs/libs/jpeg-6b-4-lib/include
 -IC:/emacs/libs/tiff-3.8.2-1-lib/include
 -IC:/emacs/libs/libxml2-2.7.8-w32-bin/include/libxml2
 -IC:/emacs/libs/gnutls-3.1.8-w32/include
 -IC:/emacs/libs/libiconv-1.14-2-mingw32-dev/include'
 

[-- Attachment #2: throw-f-l-kw-new.txt --]
[-- Type: text/plain, Size: 14873 bytes --]

font-lock-keywords is a variable defined in `font-lock.el'.
Its value is shown below.

  This variable can be risky when used as a file-local variable.

Documentation:
A list of the keywords to highlight.
There are two kinds of values: user-level, and compiled.

A user-level keywords list is what a major mode or the user would
set up.  Normally the list would come from `font-lock-defaults'.
through selection of a fontification level and evaluation of any
contained expressions.  You can also alter it by calling
`font-lock-add-keywords' or `font-lock-remove-keywords' with MODE = nil.

Each element in a user-level keywords list should have one of these forms:

 MATCHER
 (MATCHER . SUBEXP)
 (MATCHER . FACENAME)
 (MATCHER . HIGHLIGHT)
 (MATCHER HIGHLIGHT ...)
 (eval . FORM)

where MATCHER can be either the regexp to search for, or the function name to
call to make the search (called with one argument, the limit of the search;
it should return non-nil, move point, and set `match-data' appropriately if
it succeeds; like `re-search-forward' would).
MATCHER regexps can be generated via the function `regexp-opt'.

FORM is an expression, whose value should be a keyword element, evaluated when
the keyword is (first) used in a buffer.  This feature can be used to provide a
keyword that can only be generated when Font Lock mode is actually turned on.

HIGHLIGHT should be either MATCH-HIGHLIGHT or MATCH-ANCHORED.

For highlighting single items, for example each instance of the word "foo",
typically only MATCH-HIGHLIGHT is required.
However, if an item or (typically) items are to be highlighted following the
instance of another item (the anchor), for example each instance of the
word "bar" following the word "anchor" then MATCH-ANCHORED may be required.

MATCH-HIGHLIGHT should be of the form:

 (SUBEXP FACENAME [OVERRIDE [LAXMATCH]])

SUBEXP is the number of the subexpression of MATCHER to be highlighted.

FACENAME is an expression whose value is the face name to use.
Instead of a face, FACENAME can evaluate to a property list
of the form (face FACE PROP1 VAL1 PROP2 VAL2 ...)
in which case all the listed text-properties will be set rather than
just FACE.  In such a case, you will most likely want to put those
properties in `font-lock-extra-managed-props' or to override
`font-lock-unfontify-region-function'.

OVERRIDE and LAXMATCH are flags.  If OVERRIDE is t, existing fontification can
be overwritten.  If `keep', only parts not already fontified are highlighted.
If `prepend' or `append', existing fontification is merged with the new, in
which the new or existing fontification, respectively, takes precedence.
If LAXMATCH is non-nil, that means don't signal an error if there is
no match for SUBEXP in MATCHER.

For example, an element of the form highlights (if not already highlighted):

 "\\<foo\\>"		discrete occurrences of "foo" in the value of the
			variable `font-lock-keyword-face'.
 ("fu\\(bar\\)" . 1)	substring "bar" within all occurrences of "fubar" in
			the value of `font-lock-keyword-face'.
 ("fubar" . fubar-face)	Occurrences of "fubar" in the value of `fubar-face'.
 ("foo\\|bar" 0 foo-bar-face t)
			occurrences of either "foo" or "bar" in the value
			of `foo-bar-face', even if already highlighted.
 (fubar-match 1 fubar-face)
			the first subexpression within all occurrences of
			whatever the function `fubar-match' finds and matches
			in the value of `fubar-face'.

MATCH-ANCHORED should be of the form:

 (MATCHER PRE-MATCH-FORM POST-MATCH-FORM MATCH-HIGHLIGHT ...)

where MATCHER is a regexp to search for or the function name to call to make
the search, as for MATCH-HIGHLIGHT above, but with one exception; see below.
PRE-MATCH-FORM and POST-MATCH-FORM are evaluated before the first, and after
the last, instance MATCH-ANCHORED's MATCHER is used.  Therefore they can be
used to initialize before, and cleanup after, MATCHER is used.  Typically,
PRE-MATCH-FORM is used to move to some position relative to the original
MATCHER, before starting with MATCH-ANCHORED's MATCHER.  POST-MATCH-FORM might
be used to move back, before resuming with MATCH-ANCHORED's parent's MATCHER.

For example, an element of the form highlights (if not already highlighted):

 ("\\<anchor\\>" (0 anchor-face) ("\\<item\\>" nil nil (0 item-face)))

 discrete occurrences of "anchor" in the value of `anchor-face', and subsequent
 discrete occurrences of "item" (on the same line) in the value of `item-face'.
 (Here PRE-MATCH-FORM and POST-MATCH-FORM are nil.  Therefore "item" is
 initially searched for starting from the end of the match of "anchor", and
 searching for subsequent instances of "anchor" resumes from where searching
 for "item" concluded.)

The above-mentioned exception is as follows.  The limit of the MATCHER search
defaults to the end of the line after PRE-MATCH-FORM is evaluated.
However, if PRE-MATCH-FORM returns a position greater than the position after
PRE-MATCH-FORM is evaluated, that position is used as the limit of the search.
It is generally a bad idea to return a position greater than the end of the
line, i.e., cause the MATCHER search to span lines.

These regular expressions can match text which spans lines, although
it is better to avoid it if possible since updating them while editing
text is slower, and it is not guaranteed to be always correct when using
support modes like jit-lock or lazy-lock.

This variable is set by major modes via the variable `font-lock-defaults'.
Be careful when composing regexps for this list; a poorly written pattern can
dramatically slow things down!

A compiled keywords list starts with t.  It is produced internal
by `font-lock-compile-keywords' from a user-level keywords list.
Its second element is the user-level keywords list that was
compiled.  The remaining elements have the same form as
user-level keywords, but normally their values have been
optimized.

For more information check the manuals.



Value:
 (t
 (("\\<lambda\\>"
   (0
    (progn
      (compose-region
       (match-beginning 0)
       (match-end 0)
       955)
      nil)))
  ("(\\(icicle-define-\\(?:\\(?:\\(?:add-to-alist\\|file\\|sort\\)-\\)?command\\)\\)\\>[ 	'(]*\\(\\sw+\\)?"
   (1 font-lock-keyword-face)
   (2 font-lock-function-name-face nil t))
  ("(\\(icicle-condition-case-no-debug\\)\\>" 1 font-lock-keyword-face)
  ("(\\(def\\(\\(advice\\|alias\\|generic\\|macro\\*?\\|method\\|setf\\|subst\\*?\\|un\\*?\\|ine-\\(condition\\|\\(?:derived\\|\\(?:global\\(?:ized\\)?-\\)?minor\\|generic\\)-mode\\|method-combination\\|setf-expander\\|skeleton\\|widget\\|function\\|\\(compiler\\|modify\\|symbol\\)-macro\\)\\)\\|\\(const\\(ant\\)?\\|custom\\|varalias\\|face\\|parameter\\|var\\(?:-local\\)?\\)\\|\\(class\\|group\\|theme\\|package\\|struct\\|type\\)\\)\\)\\_>[ 	'(]*\\(setf[ 	]+\\(?:\\sw\\|\\s_\\)+\\|\\(?:\\sw\\|\\s_\\)+\\)?"
   (1 font-lock-keyword-face)
   (9
    (cond
     ((match-beginning 3)
      font-lock-function-name-face)
     ((match-beginning 6)
      font-lock-variable-name-face)
     (t font-lock-type-face))
    nil t))
  ("^;;;###\\([-a-z]*autoload\\)" 1 font-lock-warning-face prepend)
  ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)
  ("(\\(co\\(?:mbine-after-change-calls\\|nd\\(?:ition-case\\(?:-unless-debug\\)?\\)?\\)\\|eval-\\(?:a\\(?:fter-load\\|nd-compile\\)\\|next-after-load\\|when\\(?:-compile\\)?\\)\\|i\\(?:f\\|nline\\)\\|l\\(?:ambda\\|et\\(?:\\*\\|rec\\)?\\)\\|p\\(?:case\\(?:-let\\*?\\)?\\|rog[*12nv]?\\)\\|save-\\(?:current-buffer\\|excursion\\|match-data\\|restriction\\|selected-window\\|window-excursion\\)\\|track-mouse\\|unwind-protect\\|w\\(?:hile\\(?:-no-input\\)?\\|ith-\\(?:c\\(?:a\\(?:\\(?:se\\|tegory\\)-table\\)\\|urrent-buffer\\)\\|demoted-errors\\|electric-help\\|local-quit\\|no-warnings\\|output-to-\\(?:string\\|temp-buffer\\)\\|s\\(?:elected-\\(?:frame\\|window\\)\\|ilent-modifications\\|yntax-table\\)\\|t\\(?:emp-\\(?:buffer\\|\\(?:fil\\|messag\\)e\\)\\|imeout\\(?:-handler\\)?\\)\\|wrapper-hook\\)\\)\\)\\_>" . 1)
  ("(\\(b\\(?:\\(?:loc\\|rea\\)k\\)\\|c\\(?:ase\\|case\\|ompiler-let\\|typecase\\)\\|d\\(?:e\\(?:cla\\(?:im\\|re\\)\\|structuring-bind\\)\\|o\\(?:\\*\\|list\\|times\\)?\\)\\|e\\(?:\\(?:type\\)?case\\)\\|flet\\|go\\|handler-\\(?:bind\\|case\\)\\|i\\(?:gnore-errors\\|n-package\\)\\|l\\(?:abels\\|e\\(?:tf\\|xical-let\\*?\\)\\|o\\(?:cally\\|op\\)\\)\\|m\\(?:acrolet\\|ultiple-value-\\(?:bind\\|prog1\\)\\)\\|proclaim\\|re\\(?:start-\\(?:bind\\|case\\)\\|turn\\(?:-from\\)?\\)\\|symbol-macrolet\\|t\\(?:agbody\\|\\(?:h\\|ypecas\\)e\\)\\|unless\\|w\\(?:hen\\|ith-\\(?:accessors\\|co\\(?:mpilation-unit\\|ndition-restarts\\)\\|hash-table-iterator\\|input-from-string\\|o\\(?:pen-\\(?:file\\|stream\\)\\|utput-to-string\\)\\|package-iterator\\|s\\(?:imple-restart\\|lots\\|tandard-io-syntax\\)\\)\\)\\)\\_>" . 1)
  ("(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\>[ 	']*\\(\\(?:\\sw\\|\\s_\\)+\\)?"
   (1 font-lock-keyword-face)
   (2 font-lock-constant-face nil t))
  ("(\\(abort\\|assert\\|warn\\|check-type\\|cerror\\|error\\|signal\\)\\>" 1 font-lock-warning-face)
  ("\\\\\\\\\\[\\(\\(?:\\sw\\|\\s_\\)+\\)\\]"
   (1 font-lock-constant-face prepend))
  ("`\\(\\(?:\\sw\\|\\s_\\)\\(?:\\sw\\|\\s_\\)+\\)'"
   (1 font-lock-constant-face prepend))
  ("\\<:\\(?:\\sw\\|\\s_\\)+\\>" 0 font-lock-builtin-face)
  ("\\<\\&\\(?:\\sw\\|\\s_\\)+\\>" . font-lock-type-face)
  ((lambda
     (bound)
     (catch 'found
       (while
           (re-search-forward "\\(\\\\\\\\\\)\\(?:\\(\\\\\\\\\\)\\|\\((\\(?:\\?[0-9]*:\\)?\\|[|)]\\)\\)" bound t)
         (unless
             (match-beginning 2)
           (let
               ((face
                 (get-text-property
                  (1-
                   (point))
                  'face)))
             (when
                 (or
                  (and
                   (listp face)
                   (memq 'font-lock-string-face face))
                  (eq 'font-lock-string-face face))
               (throw 'found t)))))))
   (1 'font-lock-regexp-grouping-backslash prepend)
   (3 'font-lock-regexp-grouping-construct prepend)))
 ("\\<lambda\\>"
  (0
   (progn
     (compose-region
      (match-beginning 0)
      (match-end 0)
      955)
     nil)))
 ("(\\(icicle-define-\\(?:\\(?:\\(?:add-to-alist\\|file\\|sort\\)-\\)?command\\)\\)\\>[ 	'(]*\\(\\sw+\\)?"
  (1 font-lock-keyword-face)
  (2 font-lock-function-name-face nil t))
 ("(\\(icicle-condition-case-no-debug\\)\\>"
  (1 font-lock-keyword-face))
 ("(\\(def\\(\\(advice\\|alias\\|generic\\|macro\\*?\\|method\\|setf\\|subst\\*?\\|un\\*?\\|ine-\\(condition\\|\\(?:derived\\|\\(?:global\\(?:ized\\)?-\\)?minor\\|generic\\)-mode\\|method-combination\\|setf-expander\\|skeleton\\|widget\\|function\\|\\(compiler\\|modify\\|symbol\\)-macro\\)\\)\\|\\(const\\(ant\\)?\\|custom\\|varalias\\|face\\|parameter\\|var\\(?:-local\\)?\\)\\|\\(class\\|group\\|theme\\|package\\|struct\\|type\\)\\)\\)\\_>[ 	'(]*\\(setf[ 	]+\\(?:\\sw\\|\\s_\\)+\\|\\(?:\\sw\\|\\s_\\)+\\)?"
  (1 font-lock-keyword-face)
  (9
   (cond
    ((match-beginning 3)
     font-lock-function-name-face)
    ((match-beginning 6)
     font-lock-variable-name-face)
    (t font-lock-type-face))
   nil t))
 ("^;;;###\\([-a-z]*autoload\\)"
  (1 font-lock-warning-face prepend))
 ("\\[\\(\\^\\)"
  (1 font-lock-negation-char-face prepend))
 ("(\\(co\\(?:mbine-after-change-calls\\|nd\\(?:ition-case\\(?:-unless-debug\\)?\\)?\\)\\|eval-\\(?:a\\(?:fter-load\\|nd-compile\\)\\|next-after-load\\|when\\(?:-compile\\)?\\)\\|i\\(?:f\\|nline\\)\\|l\\(?:ambda\\|et\\(?:\\*\\|rec\\)?\\)\\|p\\(?:case\\(?:-let\\*?\\)?\\|rog[*12nv]?\\)\\|save-\\(?:current-buffer\\|excursion\\|match-data\\|restriction\\|selected-window\\|window-excursion\\)\\|track-mouse\\|unwind-protect\\|w\\(?:hile\\(?:-no-input\\)?\\|ith-\\(?:c\\(?:a\\(?:\\(?:se\\|tegory\\)-table\\)\\|urrent-buffer\\)\\|demoted-errors\\|electric-help\\|local-quit\\|no-warnings\\|output-to-\\(?:string\\|temp-buffer\\)\\|s\\(?:elected-\\(?:frame\\|window\\)\\|ilent-modifications\\|yntax-table\\)\\|t\\(?:emp-\\(?:buffer\\|\\(?:fil\\|messag\\)e\\)\\|imeout\\(?:-handler\\)?\\)\\|wrapper-hook\\)\\)\\)\\_>"
  (1 font-lock-keyword-face))
 ("(\\(b\\(?:\\(?:loc\\|rea\\)k\\)\\|c\\(?:ase\\|case\\|ompiler-let\\|typecase\\)\\|d\\(?:e\\(?:cla\\(?:im\\|re\\)\\|structuring-bind\\)\\|o\\(?:\\*\\|list\\|times\\)?\\)\\|e\\(?:\\(?:type\\)?case\\)\\|flet\\|go\\|handler-\\(?:bind\\|case\\)\\|i\\(?:gnore-errors\\|n-package\\)\\|l\\(?:abels\\|e\\(?:tf\\|xical-let\\*?\\)\\|o\\(?:cally\\|op\\)\\)\\|m\\(?:acrolet\\|ultiple-value-\\(?:bind\\|prog1\\)\\)\\|proclaim\\|re\\(?:start-\\(?:bind\\|case\\)\\|turn\\(?:-from\\)?\\)\\|symbol-macrolet\\|t\\(?:agbody\\|\\(?:h\\|ypecas\\)e\\)\\|unless\\|w\\(?:hen\\|ith-\\(?:accessors\\|co\\(?:mpilation-unit\\|ndition-restarts\\)\\|hash-table-iterator\\|input-from-string\\|o\\(?:pen-\\(?:file\\|stream\\)\\|utput-to-string\\)\\|package-iterator\\|s\\(?:imple-restart\\|lots\\|tandard-io-syntax\\)\\)\\)\\)\\_>"
  (1 font-lock-keyword-face))
 ("(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\>[ 	']*\\(\\(?:\\sw\\|\\s_\\)+\\)?"
  (1 font-lock-keyword-face)
  (2 font-lock-constant-face nil t))
 ("(\\(abort\\|assert\\|warn\\|check-type\\|cerror\\|error\\|signal\\)\\>"
  (1 font-lock-warning-face))
 ("\\\\\\\\\\[\\(\\(?:\\sw\\|\\s_\\)+\\)\\]"
  (1 font-lock-constant-face prepend))
 ("`\\(\\(?:\\sw\\|\\s_\\)\\(?:\\sw\\|\\s_\\)+\\)'"
  (1 font-lock-constant-face prepend))
 ("\\<:\\(?:\\sw\\|\\s_\\)+\\>"
  (0 font-lock-builtin-face))
 ("\\<\\&\\(?:\\sw\\|\\s_\\)+\\>"
  (0 font-lock-type-face))
 ((lambda
    (bound)
    (catch 'found
      (while
          (re-search-forward "\\(\\\\\\\\\\)\\(?:\\(\\\\\\\\\\)\\|\\((\\(?:\\?[0-9]*:\\)?\\|[|)]\\)\\)" bound t)
        (unless
            (match-beginning 2)
          (let
              ((face
                (get-text-property
                 (1-
                  (point))
                 'face)))
            (when
                (or
                 (and
                  (listp face)
                  (memq 'font-lock-string-face face))
                 (eq 'font-lock-string-face face))
              (throw 'found t)))))))
  (1 'font-lock-regexp-grouping-backslash prepend)
  (3 'font-lock-regexp-grouping-construct prepend))
 ("^\\s("
  (0
   (if
       (memq
        (get-text-property
         (match-beginning 0)
         'face)
        '(font-lock-string-face font-lock-doc-face font-lock-comment-face))
       (list 'face font-lock-warning-face 'help-echo "Looks like a toplevel defun: escape the parenthesis"))
   prepend)))

Local in buffer `icicles-cmd1.el'; global value is nil

[back]	[forward]

[-- Attachment #3: throw-f-l-kw.txt --]
[-- Type: text/plain, Size: 14565 bytes --]

font-lock-keywords is a variable defined in `font-lock.el'.
Its value is shown below.

  This variable can be risky when used as a file-local variable.

Documentation:
A list of the keywords to highlight.
There are two kinds of values: user-level, and compiled.

A user-level keywords list is what a major mode or the user would
set up.  Normally the list would come from `font-lock-defaults'.
through selection of a fontification level and evaluation of any
contained expressions.  You can also alter it by calling
`font-lock-add-keywords' or `font-lock-remove-keywords' with MODE = nil.

Each element in a user-level keywords list should have one of these forms:

 MATCHER
 (MATCHER . SUBEXP)
 (MATCHER . FACENAME)
 (MATCHER . HIGHLIGHT)
 (MATCHER HIGHLIGHT ...)
 (eval . FORM)

where MATCHER can be either the regexp to search for, or the function name to
call to make the search (called with one argument, the limit of the search;
it should return non-nil, move point, and set `match-data' appropriately if
it succeeds; like `re-search-forward' would).
MATCHER regexps can be generated via the function `regexp-opt'.

FORM is an expression, whose value should be a keyword element, evaluated when
the keyword is (first) used in a buffer.  This feature can be used to provide a
keyword that can only be generated when Font Lock mode is actually turned on.

HIGHLIGHT should be either MATCH-HIGHLIGHT or MATCH-ANCHORED.

For highlighting single items, for example each instance of the word "foo",
typically only MATCH-HIGHLIGHT is required.
However, if an item or (typically) items are to be highlighted following the
instance of another item (the anchor), for example each instance of the
word "bar" following the word "anchor" then MATCH-ANCHORED may be required.

MATCH-HIGHLIGHT should be of the form:

 (SUBEXP FACENAME [OVERRIDE [LAXMATCH]])

SUBEXP is the number of the subexpression of MATCHER to be highlighted.

FACENAME is an expression whose value is the face name to use.
Instead of a face, FACENAME can evaluate to a property list
of the form (face FACE PROP1 VAL1 PROP2 VAL2 ...)
in which case all the listed text-properties will be set rather than
just FACE.  In such a case, you will most likely want to put those
properties in `font-lock-extra-managed-props' or to override
`font-lock-unfontify-region-function'.

OVERRIDE and LAXMATCH are flags.  If OVERRIDE is t, existing fontification can
be overwritten.  If `keep', only parts not already fontified are highlighted.
If `prepend' or `append', existing fontification is merged with the new, in
which the new or existing fontification, respectively, takes precedence.
If LAXMATCH is non-nil, that means don't signal an error if there is
no match for SUBEXP in MATCHER.

For example, an element of the form highlights (if not already highlighted):

 "\\<foo\\>"		discrete occurrences of "foo" in the value of the
			variable `font-lock-keyword-face'.
 ("fu\\(bar\\)" . 1)	substring "bar" within all occurrences of "fubar" in
			the value of `font-lock-keyword-face'.
 ("fubar" . fubar-face)	Occurrences of "fubar" in the value of `fubar-face'.
 ("foo\\|bar" 0 foo-bar-face t)
			occurrences of either "foo" or "bar" in the value
			of `foo-bar-face', even if already highlighted.
 (fubar-match 1 fubar-face)
			the first subexpression within all occurrences of
			whatever the function `fubar-match' finds and matches
			in the value of `fubar-face'.

MATCH-ANCHORED should be of the form:

 (MATCHER PRE-MATCH-FORM POST-MATCH-FORM MATCH-HIGHLIGHT ...)

where MATCHER is a regexp to search for or the function name to call to make
the search, as for MATCH-HIGHLIGHT above, but with one exception; see below.
PRE-MATCH-FORM and POST-MATCH-FORM are evaluated before the first, and after
the last, instance MATCH-ANCHORED's MATCHER is used.  Therefore they can be
used to initialize before, and cleanup after, MATCHER is used.  Typically,
PRE-MATCH-FORM is used to move to some position relative to the original
MATCHER, before starting with MATCH-ANCHORED's MATCHER.  POST-MATCH-FORM might
be used to move back, before resuming with MATCH-ANCHORED's parent's MATCHER.

For example, an element of the form highlights (if not already highlighted):

 ("\\<anchor\\>" (0 anchor-face) ("\\<item\\>" nil nil (0 item-face)))

 discrete occurrences of "anchor" in the value of `anchor-face', and subsequent
 discrete occurrences of "item" (on the same line) in the value of `item-face'.
 (Here PRE-MATCH-FORM and POST-MATCH-FORM are nil.  Therefore "item" is
 initially searched for starting from the end of the match of "anchor", and
 searching for subsequent instances of "anchor" resumes from where searching
 for "item" concluded.)

The above-mentioned exception is as follows.  The limit of the MATCHER search
defaults to the end of the line after PRE-MATCH-FORM is evaluated.
However, if PRE-MATCH-FORM returns a position greater than the position after
PRE-MATCH-FORM is evaluated, that position is used as the limit of the search.
It is generally a bad idea to return a position greater than the end of the
line, i.e., cause the MATCHER search to span lines.

These regular expressions can match text which spans lines, although
it is better to avoid it if possible since updating them while editing
text is slower, and it is not guaranteed to be always correct when using
support modes like jit-lock or lazy-lock.

This variable is set by major modes via the variable `font-lock-defaults'.
Be careful when composing regexps for this list; a poorly written pattern can
dramatically slow things down!

A compiled keywords list starts with t.  It is produced internal
by `font-lock-compile-keywords' from a user-level keywords list.
Its second element is the user-level keywords list that was
compiled.  The remaining elements have the same form as
user-level keywords, but normally their values have been
optimized.

For more information check the manuals.



Value:
 (t
 (("\\<lambda\\>"
   (0
    (progn
      (compose-region
       (match-beginning 0)
       (match-end 0)
       955)
      nil)))
  ("(\\(icicle-define-\\(?:\\(?:\\(?:add-to-alist\\|file\\|sort\\)-\\)?command\\)\\)\\>[ 	'(]*\\(\\sw+\\)?"
   (1 font-lock-keyword-face)
   (2 font-lock-function-name-face nil t))
  ("(\\(icicle-condition-case-no-debug\\)\\>" 1 font-lock-keyword-face)
  ("(\\(def\\(\\(advice\\|alias\\|generic\\|macro\\*?\\|method\\|setf\\|subst\\*?\\|un\\*?\\|ine-\\(condition\\|\\(?:derived\\|\\(?:global\\(?:ized\\)?-\\)?minor\\|generic\\)-mode\\|method-combination\\|setf-expander\\|skeleton\\|widget\\|function\\|\\(compiler\\|modify\\|symbol\\)-macro\\)\\)\\|\\(const\\(ant\\)?\\|custom\\|varalias\\|face\\|parameter\\|var\\)\\|\\(class\\|group\\|theme\\|package\\|struct\\|type\\)\\)\\)\\>[ 	'(]*\\(setf[ 	]+\\sw+\\|\\sw+\\)?"
   (1 font-lock-keyword-face)
   (9
    (cond
     ((match-beginning 3)
      font-lock-function-name-face)
     ((match-beginning 6)
      font-lock-variable-name-face)
     (t font-lock-type-face))
    nil t))
  ("^;;;###\\([-a-z]*autoload\\)" 1 font-lock-warning-face prepend)
  ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)
  ("(\\(co\\(?:mbine-after-change-calls\\|nd\\(?:ition-case\\(?:-unless-debug\\)?\\)?\\)\\|eval-\\(?:a\\(?:fter-load\\|nd-compile\\)\\|next-after-load\\|when\\(?:-compile\\)?\\)\\|i\\(?:f\\|nline\\)\\|l\\(?:ambda\\|et\\(?:\\*\\|rec\\)?\\)\\|p\\(?:case\\(?:-let\\*?\\)?\\|rog[*12nv]?\\)\\|save-\\(?:current-buffer\\|excursion\\|match-data\\|restriction\\|selected-window\\|window-excursion\\)\\|track-mouse\\|unwind-protect\\|w\\(?:hile\\(?:-no-input\\)?\\|ith-\\(?:c\\(?:a\\(?:\\(?:se\\|tegory\\)-table\\)\\|urrent-buffer\\)\\|demoted-errors\\|electric-help\\|local-quit\\|no-warnings\\|output-to-\\(?:string\\|temp-buffer\\)\\|s\\(?:elected-\\(?:frame\\|window\\)\\|ilent-modifications\\|yntax-table\\)\\|t\\(?:emp-\\(?:buffer\\|\\(?:fil\\|messag\\)e\\)\\|imeout\\(?:-handler\\)?\\)\\|wrapper-hook\\)\\)\\)\\>" . 1)
  ("(\\(b\\(?:\\(?:loc\\|rea\\)k\\)\\|c\\(?:ase\\|case\\|ompiler-let\\|typecase\\)\\|d\\(?:e\\(?:cla\\(?:im\\|re\\)\\|structuring-bind\\)\\|o\\(?:\\*\\|list\\|times\\)?\\)\\|e\\(?:\\(?:type\\)?case\\)\\|flet\\|go\\|handler-\\(?:bind\\|case\\)\\|i\\(?:gnore-errors\\|n-package\\)\\|l\\(?:abels\\|e\\(?:tf\\|xical-let\\*?\\)\\|o\\(?:cally\\|op\\)\\)\\|m\\(?:acrolet\\|ultiple-value-\\(?:bind\\|prog1\\)\\)\\|proclaim\\|re\\(?:start-\\(?:bind\\|case\\)\\|turn\\(?:-from\\)?\\)\\|symbol-macrolet\\|t\\(?:agbody\\|\\(?:h\\|ypecas\\)e\\)\\|unless\\|w\\(?:hen\\|ith-\\(?:accessors\\|co\\(?:mpilation-unit\\|ndition-restarts\\)\\|hash-table-iterator\\|input-from-string\\|o\\(?:pen-\\(?:file\\|stream\\)\\|utput-to-string\\)\\|package-iterator\\|s\\(?:imple-restart\\|lots\\|tandard-io-syntax\\)\\)\\)\\)\\>" . 1)
  ("(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\>[ 	']*\\(\\sw+\\)?"
   (1 font-lock-keyword-face)
   (2 font-lock-constant-face nil t))
  ("(\\(abort\\|assert\\|warn\\|check-type\\|cerror\\|error\\|signal\\)\\>" 1 font-lock-warning-face)
  ("\\\\\\\\\\[\\(\\sw+\\)\\]" 1 font-lock-constant-face prepend)
  ("`\\(\\sw\\sw+\\)'" 1 font-lock-constant-face prepend)
  ("\\<:\\sw+\\>" 0 font-lock-builtin-face)
  ("\\<\\&\\sw+\\>" . font-lock-type-face)
  ((lambda
     (bound)
     (catch 'found
       (while
           (re-search-forward "\\(\\\\\\\\\\)\\(?:\\(\\\\\\\\\\)\\|\\((\\(?:\\?[0-9]*:\\)?\\|[|)]\\)\\)" bound t)
         (unless
             (match-beginning 2)
           (let
               ((face
                 (get-text-property
                  (1-
                   (point))
                  'face)))
             (when
                 (or
                  (and
                   (listp face)
                   (memq 'font-lock-string-face face))
                  (eq 'font-lock-string-face face))
               (throw 'found t)))))))
   (1 'font-lock-regexp-grouping-backslash prepend)
   (3 'font-lock-regexp-grouping-construct prepend)))
 ("\\<lambda\\>"
  (0
   (progn
     (compose-region
      (match-beginning 0)
      (match-end 0)
      955)
     nil)))
 ("(\\(icicle-define-\\(?:\\(?:\\(?:add-to-alist\\|file\\|sort\\)-\\)?command\\)\\)\\>[ 	'(]*\\(\\sw+\\)?"
  (1 font-lock-keyword-face)
  (2 font-lock-function-name-face nil t))
 ("(\\(icicle-condition-case-no-debug\\)\\>"
  (1 font-lock-keyword-face))
 ("(\\(def\\(\\(advice\\|alias\\|generic\\|macro\\*?\\|method\\|setf\\|subst\\*?\\|un\\*?\\|ine-\\(condition\\|\\(?:derived\\|\\(?:global\\(?:ized\\)?-\\)?minor\\|generic\\)-mode\\|method-combination\\|setf-expander\\|skeleton\\|widget\\|function\\|\\(compiler\\|modify\\|symbol\\)-macro\\)\\)\\|\\(const\\(ant\\)?\\|custom\\|varalias\\|face\\|parameter\\|var\\)\\|\\(class\\|group\\|theme\\|package\\|struct\\|type\\)\\)\\)\\>[ 	'(]*\\(setf[ 	]+\\sw+\\|\\sw+\\)?"
  (1 font-lock-keyword-face)
  (9
   (cond
    ((match-beginning 3)
     font-lock-function-name-face)
    ((match-beginning 6)
     font-lock-variable-name-face)
    (t font-lock-type-face))
   nil t))
 ("^;;;###\\([-a-z]*autoload\\)"
  (1 font-lock-warning-face prepend))
 ("\\[\\(\\^\\)"
  (1 font-lock-negation-char-face prepend))
 ("(\\(co\\(?:mbine-after-change-calls\\|nd\\(?:ition-case\\(?:-unless-debug\\)?\\)?\\)\\|eval-\\(?:a\\(?:fter-load\\|nd-compile\\)\\|next-after-load\\|when\\(?:-compile\\)?\\)\\|i\\(?:f\\|nline\\)\\|l\\(?:ambda\\|et\\(?:\\*\\|rec\\)?\\)\\|p\\(?:case\\(?:-let\\*?\\)?\\|rog[*12nv]?\\)\\|save-\\(?:current-buffer\\|excursion\\|match-data\\|restriction\\|selected-window\\|window-excursion\\)\\|track-mouse\\|unwind-protect\\|w\\(?:hile\\(?:-no-input\\)?\\|ith-\\(?:c\\(?:a\\(?:\\(?:se\\|tegory\\)-table\\)\\|urrent-buffer\\)\\|demoted-errors\\|electric-help\\|local-quit\\|no-warnings\\|output-to-\\(?:string\\|temp-buffer\\)\\|s\\(?:elected-\\(?:frame\\|window\\)\\|ilent-modifications\\|yntax-table\\)\\|t\\(?:emp-\\(?:buffer\\|\\(?:fil\\|messag\\)e\\)\\|imeout\\(?:-handler\\)?\\)\\|wrapper-hook\\)\\)\\)\\>"
  (1 font-lock-keyword-face))
 ("(\\(b\\(?:\\(?:loc\\|rea\\)k\\)\\|c\\(?:ase\\|case\\|ompiler-let\\|typecase\\)\\|d\\(?:e\\(?:cla\\(?:im\\|re\\)\\|structuring-bind\\)\\|o\\(?:\\*\\|list\\|times\\)?\\)\\|e\\(?:\\(?:type\\)?case\\)\\|flet\\|go\\|handler-\\(?:bind\\|case\\)\\|i\\(?:gnore-errors\\|n-package\\)\\|l\\(?:abels\\|e\\(?:tf\\|xical-let\\*?\\)\\|o\\(?:cally\\|op\\)\\)\\|m\\(?:acrolet\\|ultiple-value-\\(?:bind\\|prog1\\)\\)\\|proclaim\\|re\\(?:start-\\(?:bind\\|case\\)\\|turn\\(?:-from\\)?\\)\\|symbol-macrolet\\|t\\(?:agbody\\|\\(?:h\\|ypecas\\)e\\)\\|unless\\|w\\(?:hen\\|ith-\\(?:accessors\\|co\\(?:mpilation-unit\\|ndition-restarts\\)\\|hash-table-iterator\\|input-from-string\\|o\\(?:pen-\\(?:file\\|stream\\)\\|utput-to-string\\)\\|package-iterator\\|s\\(?:imple-restart\\|lots\\|tandard-io-syntax\\)\\)\\)\\)\\>"
  (1 font-lock-keyword-face))
 ("(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\>[ 	']*\\(\\sw+\\)?"
  (1 font-lock-keyword-face)
  (2 font-lock-constant-face nil t))
 ("(\\(abort\\|assert\\|warn\\|check-type\\|cerror\\|error\\|signal\\)\\>"
  (1 font-lock-warning-face))
 ("\\\\\\\\\\[\\(\\sw+\\)\\]"
  (1 font-lock-constant-face prepend))
 ("`\\(\\sw\\sw+\\)'"
  (1 font-lock-constant-face prepend))
 ("\\<:\\sw+\\>"
  (0 font-lock-builtin-face))
 ("\\<\\&\\sw+\\>"
  (0 font-lock-type-face))
 ((lambda
    (bound)
    (catch 'found
      (while
          (re-search-forward "\\(\\\\\\\\\\)\\(?:\\(\\\\\\\\\\)\\|\\((\\(?:\\?[0-9]*:\\)?\\|[|)]\\)\\)" bound t)
        (unless
            (match-beginning 2)
          (let
              ((face
                (get-text-property
                 (1-
                  (point))
                 'face)))
            (when
                (or
                 (and
                  (listp face)
                  (memq 'font-lock-string-face face))
                 (eq 'font-lock-string-face face))
              (throw 'found t)))))))
  (1 'font-lock-regexp-grouping-backslash prepend)
  (3 'font-lock-regexp-grouping-construct prepend))
 ("^\\s("
  (0
   (if
       (memq
        (get-text-property
         (match-beginning 0)
         'face)
        '(font-lock-string-face font-lock-doc-face font-lock-comment-face))
       (list 'face font-lock-warning-face 'help-echo "Looks like a toplevel defun: escape the parenthesis"))
   prepend)))

Local in buffer `icicles-cmd1.el'; global value is nil

[-- Attachment #4: throw-f-l-bug-02-17.png --]
[-- Type: image/png, Size: 17651 bytes --]

[-- Attachment #5: throw-f-l-bug-02-15.png --]
[-- Type: image/png, Size: 17699 bytes --]

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

* bug#13755: 24.3.50; regression: incorrect font-lock highlighting
  2013-02-18 22:38 bug#13755: 24.3.50; regression: incorrect font-lock highlighting Drew Adams
@ 2013-02-26  6:16 ` Drew Adams
  2013-03-09 15:52   ` Stefan Monnier
  2013-03-09 14:38 ` Drew Adams
  1 sibling, 1 reply; 7+ messages in thread
From: Drew Adams @ 2013-02-26  6:16 UTC (permalink / raw)
  To: 13755

> The build from 2013-02-17 broke not only whether/when font-locking
> occurs (see bugs #13751 and #13730).  It broke also what gets
> highlighted.  A build from Feb 15 shows no font-lock problems.
>  
> See the two attached screenshots.  The one from 02-17 does 
> not highlight the command name
> (`icicle-customize-apropos-options-of-type') 
> completely, as it should and as does the one from 02-15.

Let me add, in case it helps, that I use this code:

(font-lock-add-keywords
 'emacs-lisp-mode
 `((,(concat "(" (regexp-opt
                  '("icicle-define-add-to-alist-command"
                    "icicle-define-command"
                    "icicle-define-file-command"
                    "icicle-define-sort-command")
                  t)
             "\\>[ \t'\(]*\\(\\sw+\\)?")
    (1 font-lock-keyword-face)
    ;; Index (2 or 3) depends on whether or not shy groups are supported.
    ,(list (if (string-match "\\(?:\\)" "") 2 3)
           'font-lock-function-name-face nil t))
   ("(\\(icicle-condition-case-no-debug\\)\\>"
    1 font-lock-keyword-face)))






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

* bug#13755: 24.3.50; regression: incorrect font-lock highlighting
  2013-02-18 22:38 bug#13755: 24.3.50; regression: incorrect font-lock highlighting Drew Adams
  2013-02-26  6:16 ` Drew Adams
@ 2013-03-09 14:38 ` Drew Adams
  1 sibling, 0 replies; 7+ messages in thread
From: Drew Adams @ 2013-03-09 14:38 UTC (permalink / raw)
  To: 13755

Font-locking was broken in several different ways recently, at the same time.

At least 5 bugs were reported regarding this breakage: 13751, 13755, 13730,
13767, and 13806.  They were all fixed except bug #13755, which has not even
been looked at, AFAICT.

Could someone please take a look at 13755?  Thx.






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

* bug#13755: 24.3.50; regression: incorrect font-lock highlighting
  2013-02-26  6:16 ` Drew Adams
@ 2013-03-09 15:52   ` Stefan Monnier
  2013-03-09 17:16     ` Drew Adams
  0 siblings, 1 reply; 7+ messages in thread
From: Stefan Monnier @ 2013-03-09 15:52 UTC (permalink / raw)
  To: Drew Adams; +Cc: 13755-done

> (font-lock-add-keywords
>  'emacs-lisp-mode
>  `((,(concat "(" (regexp-opt
>                   '("icicle-define-add-to-alist-command"
>                     "icicle-define-command"
>                     "icicle-define-file-command"
>                     "icicle-define-sort-command")
>                   t)
>              "\\>[ \t'\(]*\\(\\sw+\\)?")
                ^^^
There's your bug: you should use \\_>.

>    ("(\\(icicle-condition-case-no-debug\\)\\>"
                                            ^^^
Same here.


        Stefan





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

* bug#13755: 24.3.50; regression: incorrect font-lock highlighting
  2013-03-09 15:52   ` Stefan Monnier
@ 2013-03-09 17:16     ` Drew Adams
  2013-03-10  5:39       ` Stefan Monnier
  0 siblings, 1 reply; 7+ messages in thread
From: Drew Adams @ 2013-03-09 17:16 UTC (permalink / raw)
  To: 'Stefan Monnier'; +Cc: 13755

> > (font-lock-add-keywords
> >  'emacs-lisp-mode
> >  `((,(concat "(" (regexp-opt
> >                   '("icicle-define-add-to-alist-command"
> >                     "icicle-define-command"
> >                     "icicle-define-file-command"
> >                     "icicle-define-sort-command")
> >                   t)
> >              "\\>[ \t'\(]*\\(\\sw+\\)?")
>                 ^^^
> There's your bug: you should use \\_>.

Interesting.  I'm surprised that Emacs has for so long (decades) matched only a
word-end here and not a symbol-end.

Be that as it may, changing from \\> to \\_> here does NOT fix the bug.

Here is the relevant entry from `font-lock-keywords' in Emacs-Lisp mode:

("(\\(icicle-define-\\(?:\\(?:\\(?:add-to-alist\\|file\\|sort\\)-\\)?command\\)\
\)\\_>[ 	'(]*\\(\\sw+\\)?"
   (1 font-lock-keyword-face)
   (2 font-lock-function-name-face nil t))

The problem is not the highlighting of `icicle-define-command', which is
correctly in `font-lock-keyword-face' (when using either \\> or \\_>, for that
matter).

The problem is the highlighting of the command name that follows keyword
`icicle-define-command'.  The command name should all be in
`font-lock-function-name-face'.  But only its first word is highlighted now, as
shown in the screenshots I sent with the bug report.  That is the regression.

It's as if Emacs is not counting regexp groups the same way as before.

Here is the code again (but with your suggested \\_> this time):

(font-lock-add-keywords
 'emacs-lisp-mode
 `((,(concat
      "("
      (regexp-opt
       '("icicle-define-add-to-alist-command"
         "icicle-define-command"
         "icicle-define-file-command"
         "icicle-define-sort-command")
       t)
      "\\_>[ \t'\(]*\\(\\sw+\\)?")
    (1 font-lock-keyword-face)
    ;; Index (2 or 3) depends on whether or not
    ;; shy groups are supported.
    ,(list (if (string-match "\\(?:\\)" "") 2 3)
           'font-lock-function-name-face nil t))
   ("(\\(icicle-condition-case-no-debug\\)\\_>"
    1 font-lock-keyword-face)
   ("(\\(icicle-user-error\\)\\_>"
    1 font-lock-warning-face)))

> >    ("(\\(icicle-condition-case-no-debug\\)\\>"
>                                             ^^^
> Same here.

No.  That highlights correctly.  Again, there is no problem with
`font-lock-keyword-face' highlighting.

Similarly, all the other uses of \\> in Emacs-Lisp mode `font-lock-keywords'
(and there are several, in emacs -Q) also fontify correctly.

AFAICT, you mistook the problem.  Please take another look.






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

* bug#13755: 24.3.50; regression: incorrect font-lock highlighting
  2013-03-09 17:16     ` Drew Adams
@ 2013-03-10  5:39       ` Stefan Monnier
  2013-03-10 17:16         ` Drew Adams
  0 siblings, 1 reply; 7+ messages in thread
From: Stefan Monnier @ 2013-03-10  5:39 UTC (permalink / raw)
  To: Drew Adams; +Cc: 13755

>       "\\_>[ \t'\(]*\\(\\sw+\\)?")
                         ^^^^
and this needs to be \\(?:\\sw\\|\\s_\\).


        Stefan





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

* bug#13755: 24.3.50; regression: incorrect font-lock highlighting
  2013-03-10  5:39       ` Stefan Monnier
@ 2013-03-10 17:16         ` Drew Adams
  0 siblings, 0 replies; 7+ messages in thread
From: Drew Adams @ 2013-03-10 17:16 UTC (permalink / raw)
  To: 'Stefan Monnier'; +Cc: 13755

> >              "\\>[ \t'\(]*\\(\\sw+\\)?")
>                 ^^^
> There's your bug: you should use \\_>.
> 
> >    ("(\\(icicle-condition-case-no-debug\\)\\>"
>                                             ^^^
> Same here.

Actually, \\_> does NOT work for older Emacs versions (e.g. 20).

And \\>, instead of \\_>, DOES work - for all versions, even for the latest
build.  It's not clear to me why that is so, given that you suggested changing
it, and given that hyphen has `symbol', not `word' syntax in Emacs-Lisp mode.
Can you explain this?

> >       "\\_>[ \t'\(]*\\(\\sw+\\)?")
>                          ^^^^
> and this needs to be \\(?:\\sw\\|\\s_\\).

I now have the following, which seems to work for all Emacs versions (20 through
latest 24 trunk build):

(font-lock-add-keywords
 'emacs-lisp-mode
 `((,(concat "(" (regexp-opt
                  '("icicle-define-add-to-alist-command"
                    "icicle-define-bookmark-command"
                    "icicle-define-bookmark-other-window-command"
                    "icicle-define-command"
                    "icicle-define-file-command"
                    "icicle-define-search-bookmark-command"
                    "icicle-define-sort-command")
                  t)
             "\\>[ \t'\(]*\\(\\(\\sw\\|\\s_\\)+\\)?")
    (1 font-lock-keyword-face)
    ,(list (if (string-match "\\(?:\\)" "") 2 3)
           'font-lock-function-name-face nil t))
   ("(\\(icicle-condition-case-no-debug\\)\\>"
    1 font-lock-keyword-face)
   ("(\\(icicle-user-error\\)\\>"
    1 font-lock-warning-face)))

(FWIW, back in 2006 I used "\\s-+\\(\\sw\\(\\sw\\|\\s_\\)+\\)", but I changed
that to "\\>[ \t'\(]*\\(\\sw+\\)?" - I do not recall just why, wrt the last
part.  IOW, I purposely changed to use just \\sw.)

Please help me understand more.  Just what changed wrt font-locking of Lisp code
between the Emacs builds of Feb 15 and Feb 17?  What is the change that makes
such code changes necessary?

I've searched NEWS and looked at font-lock.el, but so far I do not understand
what you have changed in Emacs that broke the regexp that worked previously
(across all Emacs versions):
"\\>[ \t'\(]*\\(\\sw+\\)?".

I would like to understand why `word' syntax worked here before, even though
hyphen has and had then `symbol', not `word' syntax.  I would like to understand
just what has changed in Emacs.  Was there, e.g., a bug before, which made `-'
sometimes be treated as a word constituent?  What is behind this change?  Thx.






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

end of thread, other threads:[~2013-03-10 17:16 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-18 22:38 bug#13755: 24.3.50; regression: incorrect font-lock highlighting Drew Adams
2013-02-26  6:16 ` Drew Adams
2013-03-09 15:52   ` Stefan Monnier
2013-03-09 17:16     ` Drew Adams
2013-03-10  5:39       ` Stefan Monnier
2013-03-10 17:16         ` Drew Adams
2013-03-09 14:38 ` Drew Adams

Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.