diff options
| author | Charles A. Roelli | 2018-07-19 22:06:07 +0200 |
|---|---|---|
| committer | Charles A. Roelli | 2018-07-19 22:06:07 +0200 |
| commit | 36b64e087ea332505ae9a40f90af45e678db2255 (patch) | |
| tree | 606c3102daa3d80c7d5e9957e50b9a06534b6db2 | |
| parent | 5934122c1f3371a07b9f041aec693d762e9d8767 (diff) | |
| download | emacs-36b64e087ea332505ae9a40f90af45e678db2255.tar.gz emacs-36b64e087ea332505ae9a40f90af45e678db2255.zip | |
Add 'font-lock-maximum-decoration' levels for Python
* etc/NEWS: New entry under Python mode.
* lisp/progmodes/python.el (python-font-lock-keywords-level-1)
(python-font-lock-keywords-level-2)
(python-font-lock-keywords-maximum-decoration): New variables
based off the incumbent 'python-font-lock-keywords'.
(python-font-lock-keywords): Change it to a list of the new
symbols, for use in the 'car' of 'font-lock-defaults'.
(python-mode): Set the 'car' of 'font-lock-defaults' to the
value of 'python-font-lock-keywords', instead of the symbol
'python-font-lock-keywords'.
| -rw-r--r-- | etc/NEWS | 7 | ||||
| -rw-r--r-- | lisp/progmodes/python.el | 95 |
2 files changed, 70 insertions, 32 deletions
| @@ -384,6 +384,13 @@ bound to 'C-c C-f'. | |||
| 384 | when escaping text and in addition all numeric entities when | 384 | when escaping text and in addition all numeric entities when |
| 385 | unescaping text. | 385 | unescaping text. |
| 386 | 386 | ||
| 387 | ** Python mode | ||
| 388 | |||
| 389 | --- | ||
| 390 | *** Python mode supports three different font lock decoration levels. | ||
| 391 | The maximum level is used by default; customize | ||
| 392 | 'font-lock-maximum-decoration' to tone down the decoration. | ||
| 393 | |||
| 387 | ** Dired | 394 | ** Dired |
| 388 | 395 | ||
| 389 | +++ | 396 | +++ |
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index e39ff08739b..c55b69e33ec 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el | |||
| @@ -526,9 +526,19 @@ The type returned can be `comment', `string' or `paren'." | |||
| 526 | font-lock-string-face) | 526 | font-lock-string-face) |
| 527 | font-lock-comment-face)) | 527 | font-lock-comment-face)) |
| 528 | 528 | ||
| 529 | (defvar python-font-lock-keywords | 529 | (defvar python-font-lock-keywords-level-1 |
| 530 | ;; Keywords | 530 | `((,(rx symbol-start "def" (1+ space) (group (1+ (or word ?_)))) |
| 531 | `(,(rx symbol-start | 531 | (1 font-lock-function-name-face)) |
| 532 | (,(rx symbol-start "class" (1+ space) (group (1+ (or word ?_)))) | ||
| 533 | (1 font-lock-type-face))) | ||
| 534 | "Font lock keywords to use in python-mode for level 1 decoration. | ||
| 535 | |||
| 536 | This is the minimum decoration level, including function and | ||
| 537 | class declarations.") | ||
| 538 | |||
| 539 | (defvar python-font-lock-keywords-level-2 | ||
| 540 | `(,@python-font-lock-keywords-level-1 | ||
| 541 | ,(rx symbol-start | ||
| 532 | (or | 542 | (or |
| 533 | "and" "del" "from" "not" "while" "as" "elif" "global" "or" "with" | 543 | "and" "del" "from" "not" "while" "as" "elif" "global" "or" "with" |
| 534 | "assert" "else" "if" "pass" "yield" "break" "except" "import" "class" | 544 | "assert" "else" "if" "pass" "yield" "break" "except" "import" "class" |
| @@ -548,12 +558,35 @@ The type returned can be `comment', `string' or `paren'." | |||
| 548 | ;; Extra: | 558 | ;; Extra: |
| 549 | "self") | 559 | "self") |
| 550 | symbol-end) | 560 | symbol-end) |
| 551 | ;; functions | 561 | ;; Builtins |
| 552 | (,(rx symbol-start "def" (1+ space) (group (1+ (or word ?_)))) | 562 | (,(rx symbol-start |
| 553 | (1 font-lock-function-name-face)) | 563 | (or |
| 554 | ;; classes | 564 | "abs" "all" "any" "bin" "bool" "callable" "chr" "classmethod" |
| 555 | (,(rx symbol-start "class" (1+ space) (group (1+ (or word ?_)))) | 565 | "compile" "complex" "delattr" "dict" "dir" "divmod" "enumerate" |
| 556 | (1 font-lock-type-face)) | 566 | "eval" "filter" "float" "format" "frozenset" "getattr" "globals" |
| 567 | "hasattr" "hash" "help" "hex" "id" "input" "int" "isinstance" | ||
| 568 | "issubclass" "iter" "len" "list" "locals" "map" "max" "memoryview" | ||
| 569 | "min" "next" "object" "oct" "open" "ord" "pow" "print" "property" | ||
| 570 | "range" "repr" "reversed" "round" "set" "setattr" "slice" "sorted" | ||
| 571 | "staticmethod" "str" "sum" "super" "tuple" "type" "vars" "zip" | ||
| 572 | "__import__" | ||
| 573 | ;; Python 2: | ||
| 574 | "basestring" "cmp" "execfile" "file" "long" "raw_input" "reduce" | ||
| 575 | "reload" "unichr" "unicode" "xrange" "apply" "buffer" "coerce" | ||
| 576 | "intern" | ||
| 577 | ;; Python 3: | ||
| 578 | "ascii" "bytearray" "bytes" "exec" | ||
| 579 | ;; Extra: | ||
| 580 | "__all__" "__doc__" "__name__" "__package__") | ||
| 581 | symbol-end) . font-lock-builtin-face)) | ||
| 582 | "Font lock keywords to use in python-mode for level 2 decoration. | ||
| 583 | |||
| 584 | This is the medium decoration level, including everything in | ||
| 585 | `python-font-lock-keywords-level-1', as well as keywords and | ||
| 586 | builtins.") | ||
| 587 | |||
| 588 | (defvar python-font-lock-keywords-maximum-decoration | ||
| 589 | `(,@python-font-lock-keywords-level-2 | ||
| 557 | ;; Constants | 590 | ;; Constants |
| 558 | (,(rx symbol-start | 591 | (,(rx symbol-start |
| 559 | (or | 592 | (or |
| @@ -596,27 +629,6 @@ The type returned can be `comment', `string' or `paren'." | |||
| 596 | "VMSError" "WindowsError" | 629 | "VMSError" "WindowsError" |
| 597 | ) | 630 | ) |
| 598 | symbol-end) . font-lock-type-face) | 631 | symbol-end) . font-lock-type-face) |
| 599 | ;; Builtins | ||
| 600 | (,(rx symbol-start | ||
| 601 | (or | ||
| 602 | "abs" "all" "any" "bin" "bool" "callable" "chr" "classmethod" | ||
| 603 | "compile" "complex" "delattr" "dict" "dir" "divmod" "enumerate" | ||
| 604 | "eval" "filter" "float" "format" "frozenset" "getattr" "globals" | ||
| 605 | "hasattr" "hash" "help" "hex" "id" "input" "int" "isinstance" | ||
| 606 | "issubclass" "iter" "len" "list" "locals" "map" "max" "memoryview" | ||
| 607 | "min" "next" "object" "oct" "open" "ord" "pow" "print" "property" | ||
| 608 | "range" "repr" "reversed" "round" "set" "setattr" "slice" "sorted" | ||
| 609 | "staticmethod" "str" "sum" "super" "tuple" "type" "vars" "zip" | ||
| 610 | "__import__" | ||
| 611 | ;; Python 2: | ||
| 612 | "basestring" "cmp" "execfile" "file" "long" "raw_input" "reduce" | ||
| 613 | "reload" "unichr" "unicode" "xrange" "apply" "buffer" "coerce" | ||
| 614 | "intern" | ||
| 615 | ;; Python 3: | ||
| 616 | "ascii" "bytearray" "bytes" "exec" | ||
| 617 | ;; Extra: | ||
| 618 | "__all__" "__doc__" "__name__" "__package__") | ||
| 619 | symbol-end) . font-lock-builtin-face) | ||
| 620 | ;; assignments | 632 | ;; assignments |
| 621 | ;; support for a = b = c = 5 | 633 | ;; support for a = b = c = 5 |
| 622 | (,(lambda (limit) | 634 | (,(lambda (limit) |
| @@ -640,7 +652,26 @@ The type returned can be `comment', `string' or `paren'." | |||
| 640 | (goto-char (match-end 1)) | 652 | (goto-char (match-end 1)) |
| 641 | (python-syntax-context 'paren))) | 653 | (python-syntax-context 'paren))) |
| 642 | res)) | 654 | res)) |
| 643 | (1 font-lock-variable-name-face nil nil)))) | 655 | (1 font-lock-variable-name-face nil nil))) |
| 656 | "Font lock keywords to use in python-mode for maximum decoration. | ||
| 657 | |||
| 658 | This decoration level includes everything in | ||
| 659 | `python-font-lock-keywords-level-2', as well as constants, | ||
| 660 | decorators, exceptions, and assignments.") | ||
| 661 | |||
| 662 | (defvar python-font-lock-keywords | ||
| 663 | '(python-font-lock-keywords-level-1 ; When `font-lock-maximum-decoration' is nil. | ||
| 664 | python-font-lock-keywords-level-1 ; When `font-lock-maximum-decoration' is 1. | ||
| 665 | python-font-lock-keywords-level-2 ; When `font-lock-maximum-decoration' is 2. | ||
| 666 | python-font-lock-keywords-maximum-decoration ; When `font-lock-maximum-decoration' | ||
| 667 | ; is more than 1, or t (which it is, | ||
| 668 | ; by default). | ||
| 669 | ) | ||
| 670 | "List of font lock keyword specifications to use in python-mode. | ||
| 671 | |||
| 672 | Which one will be chosen depends on the value of | ||
| 673 | `font-lock-maximum-decoration'.") | ||
| 674 | |||
| 644 | 675 | ||
| 645 | (defconst python-syntax-propertize-function | 676 | (defconst python-syntax-propertize-function |
| 646 | (syntax-propertize-rules | 677 | (syntax-propertize-rules |
| @@ -5325,7 +5356,7 @@ REPORT-FN is Flymake's callback function." | |||
| 5325 | 'python-nav-forward-sexp) | 5356 | 'python-nav-forward-sexp) |
| 5326 | 5357 | ||
| 5327 | (set (make-local-variable 'font-lock-defaults) | 5358 | (set (make-local-variable 'font-lock-defaults) |
| 5328 | '(python-font-lock-keywords | 5359 | `(,python-font-lock-keywords |
| 5329 | nil nil nil nil | 5360 | nil nil nil nil |
| 5330 | (font-lock-syntactic-face-function | 5361 | (font-lock-syntactic-face-function |
| 5331 | . python-font-lock-syntactic-face-function))) | 5362 | . python-font-lock-syntactic-face-function))) |