* bug#58844: 29.0.50; Font lock features for js/ts-mode
@ 2022-10-28 19:27 Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-10-28 19:55 ` Yuan Fu
0 siblings, 1 reply; 8+ messages in thread
From: Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-10-28 19:27 UTC (permalink / raw)
To: 58844; +Cc: casouri
[-- Attachment #1: Type: text/plain, Size: 233 bytes --]
Hi Yuan!
I've added more font lock features to the js and ts modes. I think they
can serve as a suitable starting point for the features, and serve as
inspiration to other modes, until we settle on a standard here.
Thanks,
Theo
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-in-new-font-lock-features-in-js-ts-mode.patch --]
[-- Type: text/x-diff, Size: 13150 bytes --]
From 28d148dc4d3b0a7ba26948c4872ee4aa90a8b51a Mon Sep 17 00:00:00 2001
From: Theodor Thornhill <theo@thornhill.no>
Date: Fri, 28 Oct 2022 21:23:19 +0200
Subject: [PATCH] Add in new font lock features in js/ts-mode
We want to support font lock features on the syntactic level, not the
granularity level.
New supported features are:
- comments
- constants
- keywords
- strings
- declarations
- identifiers
- expressions
- properties
- patterns
- jsx
* lisp/progmodes/js.el (js--treesit-font-lock-settings, js-mode): Add
in the new features.
* lisp/progmodes/ts-mode.el (ts-mode--indent-rules): Remove faulty '.'
anchor.
(ts-mode--font-lock-settings, ts-mode): Add in the new features.
---
lisp/progmodes/js.el | 102 ++++++++++++++++------------
lisp/progmodes/ts-mode.el | 136 +++++++++++++++++++++-----------------
2 files changed, 138 insertions(+), 100 deletions(-)
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index dae6de1052..705ea8aad5 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -3463,28 +3463,32 @@ js--treesit-font-lock-settings
(treesit-font-lock-rules
:language 'javascript
:override t
- :feature 'minimal
- `(
- ((identifier) @font-lock-constant-face
+ :feature 'comments
+ `((comment) @font-lock-comment-face)
+ :language 'javascript
+ :override t
+ :feature 'constants
+ `(((identifier) @font-lock-constant-face
(:match "^[A-Z_][A-Z_\\d]*$" @font-lock-constant-face))
- [(this) (super)] @font-lock-keyword-face
-
[(true) (false) (null)] @font-lock-constant-face
- (regex pattern: (regex_pattern)) @font-lock-string-face
- (number) @font-lock-constant-face
-
+ (number) @font-lock-constant-face)
+ :language 'javascript
+ :override t
+ :feature 'keywords
+ `([,@js--treesit-keywords] @font-lock-keyword-face
+ [(this) (super)] @font-lock-keyword-face)
+ :language 'javascript
+ :override t
+ :feature 'strings
+ `((regex pattern: (regex_pattern)) @font-lock-string-face
(string) @font-lock-string-face
- (comment) @font-lock-comment-face
- [,@js--treesit-keywords] @font-lock-keyword-face
-
(template_string) @js--fontify-template-string
- (template_substitution ["${" "}"] @font-lock-constant-face))
+ (template_substitution ["${" "}"] @font-lock-builtin-face))
:language 'javascript
:override t
- :feature 'moderate
- `(
- (function
+ :feature 'declarations
+ `((function
name: (identifier) @font-lock-function-name-face)
(class_declaration
@@ -3499,18 +3503,6 @@ js--treesit-font-lock-settings
(variable_declarator
name: (identifier) @font-lock-variable-name-face)
- (new_expression
- constructor: (identifier) @font-lock-type-face)
-
- (for_in_statement
- left: (identifier) @font-lock-variable-name-face)
-
- (arrow_function
- parameter: (identifier) @font-lock-variable-name-face))
- :language 'javascript
- :override t
- :feature 'full
- `(
(variable_declarator
name: (identifier) @font-lock-function-name-face
value: [(function) (arrow_function)])
@@ -3520,9 +3512,22 @@ js--treesit-font-lock-settings
(identifier)
(identifier)
@font-lock-function-name-face)
- value: (array (number) (function)))
+ value: (array (number) (function))))
+ :language 'javascript
+ :override t
+ :feature 'identifiers
+ `((new_expression
+ constructor: (identifier) @font-lock-type-face)
- (assignment_expression
+ (for_in_statement
+ left: (identifier) @font-lock-variable-name-face)
+
+ (arrow_function
+ parameter: (identifier) @font-lock-variable-name-face))
+ :language 'javascript
+ :override t
+ :feature 'expressions
+ `((assignment_expression
left: [(identifier) @font-lock-function-name-face
(member_expression property: (property_identifier)
@font-lock-function-name-face)]
@@ -3537,9 +3542,11 @@ js--treesit-font-lock-settings
(assignment_expression
left: [(identifier) @font-lock-variable-name-face
(member_expression
- property: (property_identifier) @font-lock-variable-name-face)])
-
- (pair key: (property_identifier) @font-lock-variable-name-face)
+ property: (property_identifier) @font-lock-variable-name-face)]))
+ :language 'javascript
+ :override t
+ :feature 'properties
+ `((pair key: (property_identifier) @font-lock-variable-name-face)
(pair value: (identifier) @font-lock-variable-name-face)
@@ -3549,12 +3556,16 @@ js--treesit-font-lock-settings
((shorthand_property_identifier) @font-lock-variable-name-face)
- (pair_pattern key: (property_identifier) @font-lock-variable-name-face)
-
- ((shorthand_property_identifier_pattern) @font-lock-variable-name-face)
-
- (array_pattern (identifier) @font-lock-variable-name-face)
-
+ ((shorthand_property_identifier_pattern) @font-lock-variable-name-face))
+ :language 'javascript
+ :override t
+ :feature 'patterns
+ `((pair_pattern key: (property_identifier) @font-lock-variable-name-face)
+ (array_pattern (identifier) @font-lock-variable-name-face))
+ :language 'javascript
+ :override t
+ :feature 'jsx
+ `(
(jsx_opening_element
[(nested_identifier (identifier)) (identifier)]
@font-lock-function-name-face)
@@ -3780,7 +3791,17 @@ js-mode
"lexical_declaration")))
;; Fontification.
(setq-local treesit-font-lock-settings js--treesit-font-lock-settings)
- (setq-local treesit-font-lock-feature-list '((minimal) (moderate) (full)))
+ (setq-local treesit-font-lock-feature-list
+ '((comments)
+ (constants)
+ (keywords)
+ (strings)
+ (declarations)
+ (identifiers)
+ (expressions)
+ (properties)
+ (patterns)
+ (jsx)))
;; Imenu
(setq-local imenu-create-index-function
#'js--treesit-imenu)
@@ -3802,8 +3823,7 @@ js-mode
(add-hook 'syntax-propertize-extend-region-functions
#'syntax-propertize-multiline 'append 'local)
(add-hook 'syntax-propertize-extend-region-functions
- #'js--syntax-propertize-extend-region 'append 'local)
- )))
+ #'js--syntax-propertize-extend-region 'append 'local))))
(defvar js-json--treesit-font-lock-settings
(treesit-font-lock-rules
diff --git a/lisp/progmodes/ts-mode.el b/lisp/progmodes/ts-mode.el
index 15b8cbf711..7deb7a0344 100644
--- a/lisp/progmodes/ts-mode.el
+++ b/lisp/progmodes/ts-mode.el
@@ -60,8 +60,6 @@ ts-mode--indent-rules
((node-is ")") parent-bol 0)
((node-is "]") parent-bol 0)
((node-is ">") parent-bol 0)
- ((node-is ".")
- parent-bol ,ts-mode-indent-offset)
((parent-is "ternary_expression")
parent-bol ,ts-mode-indent-offset)
((parent-is "member_expression")
@@ -123,39 +121,32 @@ ts-mode--font-lock-settings
(treesit-font-lock-rules
:language 'tsx
:override t
- :feature 'minimal
- `(
- ((identifier) @font-lock-constant-face
+ :feature 'comments
+ `((comment) @font-lock-comment-face)
+ :language 'tsx
+ :override t
+ :feature 'constants
+ `(((identifier) @font-lock-constant-face
(:match "^[A-Z_][A-Z_\\d]*$" @font-lock-constant-face))
- [,@ts-mode--keywords] @font-lock-keyword-face
- [(this) (super)] @font-lock-keyword-face
-
[(true) (false) (null)] @font-lock-constant-face
- (regex pattern: (regex_pattern)) @font-lock-string-face
- (number) @font-lock-constant-face
-
+ (number) @font-lock-constant-face)
+ :language 'tsx
+ :override t
+ :feature 'keywords
+ `([,@ts-mode--keywords] @font-lock-keyword-face
+ [(this) (super)] @font-lock-keyword-face)
+ :language 'tsx
+ :override t
+ :feature 'strings
+ `((regex pattern: (regex_pattern)) @font-lock-string-face
(string) @font-lock-string-face
-
(template_string) @js--fontify-template-string
- (template_substitution ["${" "}"] @font-lock-builtin-face)
-
- (comment) @font-lock-comment-face)
+ (template_substitution ["${" "}"] @font-lock-builtin-face))
:language 'tsx
:override t
- :feature 'moderate
- '(
- (nested_type_identifier
- module: (identifier) @font-lock-type-face)
-
- (type_identifier) @font-lock-type-face
-
- (predefined_type) @font-lock-type-face
-
- (new_expression
- constructor: (identifier) @font-lock-type-face)
-
- (function
+ :feature 'declarations
+ `((function
name: (identifier) @font-lock-function-name-face)
(function_declaration
@@ -169,6 +160,31 @@ ts-mode--font-lock-settings
(enum_declaration (identifier) @font-lock-type-face)
+ (arrow_function
+ parameter: (identifier) @font-lock-variable-name-face)
+
+ (variable_declarator
+ name: (identifier) @font-lock-function-name-face
+ value: [(function) (arrow_function)])
+
+ (variable_declarator
+ name: (array_pattern
+ (identifier)
+ (identifier) @font-lock-function-name-face)
+ value: (array (number) (function))))
+ :language 'tsx
+ :override t
+ :feature 'identifiers
+ `((nested_type_identifier
+ module: (identifier) @font-lock-type-face)
+
+ (type_identifier) @font-lock-type-face
+
+ (predefined_type) @font-lock-type-face
+
+ (new_expression
+ constructor: (identifier) @font-lock-type-face)
+
(enum_body (property_identifier) @font-lock-type-face)
(enum_assignment name: (property_identifier) @font-lock-type-face)
@@ -182,22 +198,14 @@ ts-mode--font-lock-settings
left: (identifier) @font-lock-variable-name-face)
(arrow_function
- parameter: (identifier) @font-lock-variable-name-face))
+ parameters:
+ [(_ (identifier) @font-lock-variable-name-face)
+ (_ (_ (identifier) @font-lock-variable-name-face))
+ (_ (_ (_ (identifier) @font-lock-variable-name-face)))]))
:language 'tsx
:override t
- :feature 'full
- '(
- (variable_declarator
- name: (identifier) @font-lock-function-name-face
- value: [(function) (arrow_function)])
-
- (variable_declarator
- name: (array_pattern
- (identifier)
- (identifier) @font-lock-function-name-face)
- value: (array (number) (function)))
-
- (assignment_expression
+ :feature 'expressions
+ '((assignment_expression
left: [(identifier) @font-lock-function-name-face
(member_expression
property: (property_identifier) @font-lock-function-name-face)]
@@ -207,15 +215,11 @@ ts-mode--font-lock-settings
function:
[(identifier) @font-lock-function-name-face
(member_expression
- property: (property_identifier) @font-lock-function-name-face)])
-
- (arrow_function
- parameters:
- [(_ (identifier) @font-lock-variable-name-face)
- (_ (_ (identifier) @font-lock-variable-name-face))
- (_ (_ (_ (identifier) @font-lock-variable-name-face)))])
-
- (pair key: (property_identifier) @font-lock-variable-name-face)
+ property: (property_identifier) @font-lock-function-name-face)]))
+ :language 'tsx
+ :override t
+ :feature 'properties
+ `((pair key: (property_identifier) @font-lock-variable-name-face)
(pair value: (identifier) @font-lock-variable-name-face)
@@ -228,15 +232,19 @@ ts-mode--font-lock-settings
((shorthand_property_identifier) @font-lock-variable-name-face)
- (pair_pattern
- key: (property_identifier) @font-lock-variable-name-face)
-
((shorthand_property_identifier_pattern)
- @font-lock-variable-name-face)
-
- (array_pattern (identifier) @font-lock-variable-name-face)
+ @font-lock-variable-name-face))
+ :language 'tsx
+ :override t
+ :feature 'patterns
+ `((pair_pattern
+ key: (property_identifier) @font-lock-variable-name-face)
- (jsx_opening_element
+ (array_pattern (identifier) @font-lock-variable-name-face))
+ :language 'tsx
+ :override t
+ :feature 'jsx
+ `((jsx_opening_element
[(nested_identifier (identifier)) (identifier)]
@font-lock-function-name-face)
@@ -283,7 +291,17 @@ ts-mode
"lexical_declaration")))
;; Font-lock.
(setq-local treesit-font-lock-settings ts-mode--font-lock-settings)
- (setq-local treesit-font-lock-feature-list '((minimal) (moderate) (full)))
+ (setq-local treesit-font-lock-feature-list
+ '((comments)
+ (constants)
+ (keywords)
+ (strings)
+ (declarations)
+ (identifiers)
+ (expressions)
+ (properties)
+ (patterns)
+ (jsx)))
;; Imenu.
(setq-local imenu-create-index-function #'js--treesit-imenu)
;; Which-func (use imenu).
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* bug#58844: 29.0.50; Font lock features for js/ts-mode
2022-10-28 19:27 bug#58844: 29.0.50; Font lock features for js/ts-mode Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-10-28 19:55 ` Yuan Fu
2022-10-28 19:59 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 8+ messages in thread
From: Yuan Fu @ 2022-10-28 19:55 UTC (permalink / raw)
To: Theodor Thornhill; +Cc: 58844
> On Oct 28, 2022, at 12:27 PM, Theodor Thornhill <theo@thornhill.no> wrote:
>
> Hi Yuan!
>
> I've added more font lock features to the js and ts modes. I think they
> can serve as a suitable starting point for the features, and serve as
> inspiration to other modes, until we settle on a standard here.
>
> Thanks,
>
> Theo
>
> <0001-Add-in-new-font-lock-features-in-js-ts-mode.patch>
Thanks! Minor bikeshed: I think singular is slightly better. Ie, comment instead of comments. No need to modify your patch, if you agree I can change them myself. Also treesit-font-lock-feature-list should contain three sublist, each representing a decoration level, that’s how we get two types of customization in the same time. I can fix that too.
While we’re at it, are there specific reasons why you write many indent rules in two lines, like this:
((parent-is "ternary_expression")
parent-bol ,ts-mode-indent-offset)
?
I think they should be in one line for clarity and space efficiency.
Yuan
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#58844: 29.0.50; Font lock features for js/ts-mode
2022-10-28 19:55 ` Yuan Fu
@ 2022-10-28 19:59 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-10-28 20:25 ` Yuan Fu
0 siblings, 1 reply; 8+ messages in thread
From: Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-10-28 19:59 UTC (permalink / raw)
To: Yuan Fu; +Cc: 58844
Yuan Fu <casouri@gmail.com> writes:
>> On Oct 28, 2022, at 12:27 PM, Theodor Thornhill <theo@thornhill.no> wrote:
>>
>> Hi Yuan!
>>
>> I've added more font lock features to the js and ts modes. I think they
>> can serve as a suitable starting point for the features, and serve as
>> inspiration to other modes, until we settle on a standard here.
>>
>> Thanks,
>>
>> Theo
>>
>> <0001-Add-in-new-font-lock-features-in-js-ts-mode.patch>
>
> Thanks! Minor bikeshed: I think singular is slightly better. Ie,
> comment instead of comments. No need to modify your patch, if you
> agree I can change them myself. Also treesit-font-lock-feature-list
> should contain three sublist, each representing a decoration level,
> that’s how we get two types of customization in the same time. I can
> fix that too.
>
Sure, just go ahead!
> While we’re at it, are there specific reasons why you write many indent rules in two lines, like this:
>
> ((parent-is "ternary_expression")
> parent-bol ,ts-mode-indent-offset)
>
> ?
>
> I think they should be in one line for clarity and space efficiency.
Sure! The only reason was that you asked me to cram it into short lines,
hehe ;-) Do you want another patch for that?
BTW, disregard the other bug. That's the same one...
--
Thanks,
Theo
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#58844: 29.0.50; Font lock features for js/ts-mode
2022-10-28 19:59 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-10-28 20:25 ` Yuan Fu
2022-11-12 20:45 ` Stefan Kangas
0 siblings, 1 reply; 8+ messages in thread
From: Yuan Fu @ 2022-10-28 20:25 UTC (permalink / raw)
To: Theodor Thornhill; +Cc: 58844
> On Oct 28, 2022, at 12:59 PM, Theodor Thornhill <theo@thornhill.no> wrote:
>
> Yuan Fu <casouri@gmail.com> writes:
>
>>> On Oct 28, 2022, at 12:27 PM, Theodor Thornhill <theo@thornhill.no> wrote:
>>>
>>> Hi Yuan!
>>>
>>> I've added more font lock features to the js and ts modes. I think they
>>> can serve as a suitable starting point for the features, and serve as
>>> inspiration to other modes, until we settle on a standard here.
>>>
>>> Thanks,
>>>
>>> Theo
>>>
>>> <0001-Add-in-new-font-lock-features-in-js-ts-mode.patch>
>>
>> Thanks! Minor bikeshed: I think singular is slightly better. Ie,
>> comment instead of comments. No need to modify your patch, if you
>> agree I can change them myself. Also treesit-font-lock-feature-list
>> should contain three sublist, each representing a decoration level,
>> that’s how we get two types of customization in the same time. I can
>> fix that too.
>>
>
> Sure, just go ahead!
>
>> While we’re at it, are there specific reasons why you write many indent rules in two lines, like this:
>>
>> ((parent-is "ternary_expression")
>> parent-bol ,ts-mode-indent-offset)
>>
>> ?
>>
>> I think they should be in one line for clarity and space efficiency.
>
> Sure! The only reason was that you asked me to cram it into short lines,
> hehe ;-) Do you want another patch for that?
My bad, anywhere between 70 to 80 columns is good. I can change them myself. Thanks!
Yuan
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#58844: 29.0.50; Font lock features for js/ts-mode
2022-10-28 20:25 ` Yuan Fu
@ 2022-11-12 20:45 ` Stefan Kangas
2022-11-12 20:55 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 8+ messages in thread
From: Stefan Kangas @ 2022-11-12 20:45 UTC (permalink / raw)
To: Yuan Fu; +Cc: 58844, Theodor Thornhill
Yuan Fu <casouri@gmail.com> writes:
>> Sure! The only reason was that you asked me to cram it into short lines,
>> hehe ;-) Do you want another patch for that?
>
> My bad, anywhere between 70 to 80 columns is good. I can change them myself. Thanks!
Was this patch installed? Thanks.
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#58844: 29.0.50; Font lock features for js/ts-mode
2022-11-12 20:45 ` Stefan Kangas
@ 2022-11-12 20:55 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-11-12 21:11 ` Stefan Kangas
0 siblings, 1 reply; 8+ messages in thread
From: Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-11-12 20:55 UTC (permalink / raw)
To: Stefan Kangas, Yuan Fu; +Cc: 58844
On 12 November 2022 21:45:30 CET, Stefan Kangas <stefankangas@gmail.com> wrote:
>Yuan Fu <casouri@gmail.com> writes:
>
>>> Sure! The only reason was that you asked me to cram it into short lines,
>>> hehe ;-) Do you want another patch for that?
>>
>> My bad, anywhere between 70 to 80 columns is good. I can change them myself. Thanks!
>
>Was this patch installed? Thanks.
That patch or not, this is settled for now at least :)
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#58844: 29.0.50; Font lock features for js/ts-mode
2022-11-12 20:55 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-11-12 21:11 ` Stefan Kangas
2022-11-14 9:15 ` Yuan Fu
0 siblings, 1 reply; 8+ messages in thread
From: Stefan Kangas @ 2022-11-12 21:11 UTC (permalink / raw)
To: Theodor Thornhill, Yuan Fu; +Cc: 58844-done
Theodor Thornhill <theo@thornhill.no> writes:
> On 12 November 2022 21:45:30 CET, Stefan Kangas <stefankangas@gmail.com> wrote:
>>Yuan Fu <casouri@gmail.com> writes:
>>
>>>> Sure! The only reason was that you asked me to cram it into short lines,
>>>> hehe ;-) Do you want another patch for that?
>>>
>>> My bad, anywhere between 70 to 80 columns is good. I can change them myself. Thanks!
>>
>>Was this patch installed? Thanks.
>
> That patch or not, this is settled for now at least :)
Thanks, I'm therefore closing this bug report.
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#58844: 29.0.50; Font lock features for js/ts-mode
2022-11-12 21:11 ` Stefan Kangas
@ 2022-11-14 9:15 ` Yuan Fu
0 siblings, 0 replies; 8+ messages in thread
From: Yuan Fu @ 2022-11-14 9:15 UTC (permalink / raw)
To: Stefan Kangas; +Cc: 58844-done, Theodor Thornhill
> On Nov 12, 2022, at 1:11 PM, Stefan Kangas <stefankangas@gmail.com> wrote:
>
> Theodor Thornhill <theo@thornhill.no> writes:
>
>> On 12 November 2022 21:45:30 CET, Stefan Kangas <stefankangas@gmail.com> wrote:
>>> Yuan Fu <casouri@gmail.com> writes:
>>>
>>>>> Sure! The only reason was that you asked me to cram it into short lines,
>>>>> hehe ;-) Do you want another patch for that?
>>>>
>>>> My bad, anywhere between 70 to 80 columns is good. I can change them myself. Thanks!
>>>
>>> Was this patch installed? Thanks.
>>
>> That patch or not, this is settled for now at least :)
>
> Thanks, I'm therefore closing this bug report.
Thanks. Forgot about this report :-)
Yuan
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-11-14 9:15 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-28 19:27 bug#58844: 29.0.50; Font lock features for js/ts-mode Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-10-28 19:55 ` Yuan Fu
2022-10-28 19:59 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-10-28 20:25 ` Yuan Fu
2022-11-12 20:45 ` Stefan Kangas
2022-11-12 20:55 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-11-12 21:11 ` Stefan Kangas
2022-11-14 9:15 ` Yuan Fu
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.