diff options
| author | Po Lu | 2023-07-21 07:58:30 +0800 |
|---|---|---|
| committer | Po Lu | 2023-07-21 07:58:30 +0800 |
| commit | 0ff70f12a5e29a0e90637bd063e1725f0e4e4ab2 (patch) | |
| tree | baa2271c1a50b38983456bd1d9250a1e3cc0a1a1 | |
| parent | 916ef5748992216710f01d91c330e52042b279f1 (diff) | |
| parent | c55e67081e9873a32b6e665e44f3e5a9c301255f (diff) | |
| download | emacs-0ff70f12a5e29a0e90637bd063e1725f0e4e4ab2.tar.gz emacs-0ff70f12a5e29a0e90637bd063e1725f0e4e4ab2.zip | |
Merge remote-tracking branch 'origin/master' into feature/android
| -rw-r--r-- | etc/NEWS | 4 | ||||
| -rw-r--r-- | lisp/cedet/semantic/decorate/include.el | 2 | ||||
| -rw-r--r-- | lisp/cus-edit.el | 71 | ||||
| -rw-r--r-- | lisp/doc-view.el | 16 | ||||
| -rw-r--r-- | lisp/net/shr.el | 9 | ||||
| -rw-r--r-- | lisp/nxml/nxml-mode.el | 14 | ||||
| -rw-r--r-- | lisp/progmodes/cc-defs.el | 29 | ||||
| -rw-r--r-- | lisp/progmodes/cc-langs.el | 29 | ||||
| -rw-r--r-- | lisp/progmodes/make-mode.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/python.el | 59 | ||||
| -rw-r--r-- | lisp/time.el | 3 | ||||
| -rw-r--r-- | lisp/wid-edit.el | 2 |
12 files changed, 163 insertions, 77 deletions
| @@ -441,6 +441,10 @@ instead of: | |||
| 441 | and another_expression): | 441 | and another_expression): |
| 442 | do_something() | 442 | do_something() |
| 443 | 443 | ||
| 444 | *** New user option 'python-interpreter-args'. | ||
| 445 | This allows the user to specify command line arguments to the non | ||
| 446 | interactive Python interpreter specified by 'python-interpreter'. | ||
| 447 | |||
| 444 | ** use-package | 448 | ** use-package |
| 445 | 449 | ||
| 446 | +++ | 450 | +++ |
diff --git a/lisp/cedet/semantic/decorate/include.el b/lisp/cedet/semantic/decorate/include.el index c83de66ef0c..96bf8cec3b2 100644 --- a/lisp/cedet/semantic/decorate/include.el +++ b/lisp/cedet/semantic/decorate/include.el | |||
| @@ -48,7 +48,7 @@ | |||
| 48 | ;;; Includes that are in a happy state! | 48 | ;;; Includes that are in a happy state! |
| 49 | ;; | 49 | ;; |
| 50 | (defface semantic-decoration-on-includes | 50 | (defface semantic-decoration-on-includes |
| 51 | nil | 51 | '((t (:inherit default))) |
| 52 | "Overlay Face used on includes that are not in some other state. | 52 | "Overlay Face used on includes that are not in some other state. |
| 53 | Used by the decoration style: `semantic-decoration-on-includes'." | 53 | Used by the decoration style: `semantic-decoration-on-includes'." |
| 54 | :group 'semantic-faces) | 54 | :group 'semantic-faces) |
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index c4328d60093..f5143bdb53f 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el | |||
| @@ -2330,6 +2330,7 @@ and `face'." | |||
| 2330 | (from (marker-position (widget-get widget :from))) | 2330 | (from (marker-position (widget-get widget :from))) |
| 2331 | (to (marker-position (widget-get widget :to)))) | 2331 | (to (marker-position (widget-get widget :to)))) |
| 2332 | (save-excursion | 2332 | (save-excursion |
| 2333 | (custom-comment-preserve widget) | ||
| 2333 | (widget-value-set widget (widget-value widget)) | 2334 | (widget-value-set widget (widget-value widget)) |
| 2334 | (custom-redraw-magic widget)) | 2335 | (custom-redraw-magic widget)) |
| 2335 | (when (and (>= pos from) (<= pos to)) | 2336 | (when (and (>= pos from) (<= pos to)) |
| @@ -2509,7 +2510,9 @@ If INITIAL-STRING is non-nil, use that rather than \"Parent groups:\"." | |||
| 2509 | (let* ((null-comment (equal "" (widget-value widget)))) | 2510 | (let* ((null-comment (equal "" (widget-value widget)))) |
| 2510 | (if (or (widget-get (widget-get widget :parent) :comment-shown) | 2511 | (if (or (widget-get (widget-get widget :parent) :comment-shown) |
| 2511 | (not null-comment)) | 2512 | (not null-comment)) |
| 2512 | (widget-default-create widget) | 2513 | (progn |
| 2514 | (widget-default-create widget) | ||
| 2515 | (widget-put (widget-get widget :parent) :comment-shown t)) | ||
| 2513 | ;; `widget-default-delete' expects markers in these slots -- | 2516 | ;; `widget-default-delete' expects markers in these slots -- |
| 2514 | ;; maybe it shouldn't. | 2517 | ;; maybe it shouldn't. |
| 2515 | (widget-put widget :from (point-marker)) | 2518 | (widget-put widget :from (point-marker)) |
| @@ -2542,6 +2545,14 @@ If INITIAL-STRING is non-nil, use that rather than \"Parent groups:\"." | |||
| 2542 | (and (equal "" val) | 2545 | (and (equal "" val) |
| 2543 | (not (widget-get widget :comment-shown))))) | 2546 | (not (widget-get widget :comment-shown))))) |
| 2544 | 2547 | ||
| 2548 | ;; This is useful when we want to redraw a widget, but we want to preserve | ||
| 2549 | ;; edits made by the user in the comment widget. (See Bug#64649) | ||
| 2550 | (defun custom-comment-preserve (widget) | ||
| 2551 | "Preserve the comment that belongs to WIDGET." | ||
| 2552 | (when (widget-get widget :comment-shown) | ||
| 2553 | (let ((comment-widget (widget-get widget :comment-widget))) | ||
| 2554 | (widget-put comment-widget :value (widget-value comment-widget))))) | ||
| 2555 | |||
| 2545 | ;;; The `custom-variable' Widget. | 2556 | ;;; The `custom-variable' Widget. |
| 2546 | 2557 | ||
| 2547 | (defface custom-variable-obsolete | 2558 | (defface custom-variable-obsolete |
| @@ -2821,12 +2832,16 @@ try matching its doc string against `custom-guess-doc-alist'." | |||
| 2821 | 2832 | ||
| 2822 | ;; The comment field | 2833 | ;; The comment field |
| 2823 | (unless (eq state 'hidden) | 2834 | (unless (eq state 'hidden) |
| 2824 | (let* ((comment (get symbol 'variable-comment)) | 2835 | (let ((comment-widget |
| 2825 | (comment-widget | 2836 | (widget-create-child-and-convert |
| 2826 | (widget-create-child-and-convert | 2837 | widget 'custom-comment |
| 2827 | widget 'custom-comment | 2838 | :parent widget |
| 2828 | :parent widget | 2839 | :value (or |
| 2829 | :value (or comment "")))) | 2840 | (and |
| 2841 | (widget-get widget :comment-shown) | ||
| 2842 | (widget-value (widget-get widget :comment-widget))) | ||
| 2843 | (get symbol 'variable-comment) | ||
| 2844 | "")))) | ||
| 2830 | (widget-put widget :comment-widget comment-widget) | 2845 | (widget-put widget :comment-widget comment-widget) |
| 2831 | ;; Don't push it !!! Custom assumes that the first child is the | 2846 | ;; Don't push it !!! Custom assumes that the first child is the |
| 2832 | ;; value one. | 2847 | ;; value one. |
| @@ -3725,7 +3740,8 @@ WIDGET should be a `custom-face' widget." | |||
| 3725 | `((t ,(widget-value child))) | 3740 | `((t ,(widget-value child))) |
| 3726 | (widget-value child))))) | 3741 | (widget-value child))))) |
| 3727 | 3742 | ||
| 3728 | (defun custom-face-get-current-spec (face) | 3743 | (defun custom-face-get-current-spec-unfiltered (face) |
| 3744 | "Return the current spec for face FACE, without filtering it." | ||
| 3729 | (let ((spec (or (get face 'customized-face) | 3745 | (let ((spec (or (get face 'customized-face) |
| 3730 | (get face 'saved-face) | 3746 | (get face 'saved-face) |
| 3731 | (get face 'face-defface-spec) | 3747 | (get face 'face-defface-spec) |
| @@ -3736,7 +3752,11 @@ WIDGET should be a `custom-face' widget." | |||
| 3736 | ;; edit it as the user has specified it. | 3752 | ;; edit it as the user has specified it. |
| 3737 | (if (not (face-spec-match-p face spec (selected-frame))) | 3753 | (if (not (face-spec-match-p face spec (selected-frame))) |
| 3738 | (setq spec `((t ,(face-attr-construct face (selected-frame)))))) | 3754 | (setq spec `((t ,(face-attr-construct face (selected-frame)))))) |
| 3739 | (custom-pre-filter-face-spec spec))) | 3755 | spec)) |
| 3756 | |||
| 3757 | (defun custom-face-get-current-spec (face) | ||
| 3758 | "Return the current spec for face FACE, filtering it." | ||
| 3759 | (custom-pre-filter-face-spec (custom-face-get-current-spec-unfiltered face))) | ||
| 3740 | 3760 | ||
| 3741 | (defun custom-toggle-hide-face (visibility-widget &rest _ignore) | 3761 | (defun custom-toggle-hide-face (visibility-widget &rest _ignore) |
| 3742 | "Toggle the visibility of a `custom-face' parent widget. | 3762 | "Toggle the visibility of a `custom-face' parent widget. |
| @@ -3839,12 +3859,16 @@ the present value is saved to its :shown-value property instead." | |||
| 3839 | widget :visibility-widget 'custom-visibility) | 3859 | widget :visibility-widget 'custom-visibility) |
| 3840 | ;; The comment field | 3860 | ;; The comment field |
| 3841 | (unless hiddenp | 3861 | (unless hiddenp |
| 3842 | (let* ((comment (get symbol 'face-comment)) | 3862 | (let ((comment-widget |
| 3843 | (comment-widget | 3863 | (widget-create-child-and-convert |
| 3844 | (widget-create-child-and-convert | 3864 | widget 'custom-comment |
| 3845 | widget 'custom-comment | 3865 | :parent widget |
| 3846 | :parent widget | 3866 | :value (or |
| 3847 | :value (or comment "")))) | 3867 | (and |
| 3868 | (widget-get widget :comment-shown) | ||
| 3869 | (widget-value (widget-get widget :comment-widget))) | ||
| 3870 | (get symbol 'face-comment) | ||
| 3871 | "")))) | ||
| 3848 | (widget-put widget :comment-widget comment-widget) | 3872 | (widget-put widget :comment-widget comment-widget) |
| 3849 | (push comment-widget children)))) | 3873 | (push comment-widget children)))) |
| 3850 | 3874 | ||
| @@ -3856,8 +3880,8 @@ the present value is saved to its :shown-value property instead." | |||
| 3856 | (unless (widget-get widget :custom-form) | 3880 | (unless (widget-get widget :custom-form) |
| 3857 | (widget-put widget :custom-form custom-face-default-form)) | 3881 | (widget-put widget :custom-form custom-face-default-form)) |
| 3858 | 3882 | ||
| 3859 | (let* ((spec (or (widget-get widget :shown-value) | 3883 | (let* ((shown-value (widget-get widget :shown-value)) |
| 3860 | (custom-face-get-current-spec symbol))) | 3884 | (spec (or shown-value (custom-face-get-current-spec symbol))) |
| 3861 | (form (widget-get widget :custom-form)) | 3885 | (form (widget-get widget :custom-form)) |
| 3862 | (indent (widget-get widget :indent)) | 3886 | (indent (widget-get widget :indent)) |
| 3863 | face-alist face-entry spec-default spec-match editor) | 3887 | face-alist face-entry spec-default spec-match editor) |
| @@ -3898,7 +3922,7 @@ the present value is saved to its :shown-value property instead." | |||
| 3898 | widget 'sexp :value spec)))) | 3922 | widget 'sexp :value spec)))) |
| 3899 | (push editor children) | 3923 | (push editor children) |
| 3900 | (widget-put widget :children children) | 3924 | (widget-put widget :children children) |
| 3901 | (custom-face-state-set widget)))))) | 3925 | (custom-face-state-set widget (not shown-value))))))) |
| 3902 | 3926 | ||
| 3903 | (defun cus--face-link (widget _format) | 3927 | (defun cus--face-link (widget _format) |
| 3904 | (widget-create-child-and-convert | 3928 | (widget-create-child-and-convert |
| @@ -4018,13 +4042,18 @@ This is one of `set', `saved', `changed', `themed', or `rogue'." | |||
| 4018 | 'changed | 4042 | 'changed |
| 4019 | state))) | 4043 | state))) |
| 4020 | 4044 | ||
| 4021 | (defun custom-face-state-set (widget) | 4045 | (defun custom-face-state-set (widget &optional no-filter) |
| 4022 | "Set the state of WIDGET, a custom-face widget. | 4046 | "Set the state of WIDGET, a custom-face widget. |
| 4023 | If the user edited the widget, set the state to modified. If not, the new | 4047 | If the user edited the widget, set the state to modified. If not, the new |
| 4024 | state is one of the return values of `custom-face-state'." | 4048 | state is one of the return values of `custom-face-state'. |
| 4049 | Optional argument NO-FILTER means to check against an unfiltered spec." | ||
| 4025 | (let ((face (widget-value widget))) | 4050 | (let ((face (widget-value widget))) |
| 4026 | (widget-put widget :custom-state | 4051 | (widget-put widget :custom-state |
| 4027 | (if (face-spec-match-p face (custom-face-widget-to-spec widget)) | 4052 | (if (face-spec-match-p |
| 4053 | face | ||
| 4054 | (if no-filter | ||
| 4055 | (custom-face-get-current-spec-unfiltered face) | ||
| 4056 | (custom-face-widget-to-spec widget))) | ||
| 4028 | (custom-face-state face) | 4057 | (custom-face-state face) |
| 4029 | 'modified)))) | 4058 | 'modified)))) |
| 4030 | 4059 | ||
diff --git a/lisp/doc-view.el b/lisp/doc-view.el index c381d5d34a0..b7f7a862af8 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el | |||
| @@ -147,6 +147,8 @@ | |||
| 147 | (require 'filenotify) | 147 | (require 'filenotify) |
| 148 | (eval-when-compile (require 'subr-x)) | 148 | (eval-when-compile (require 'subr-x)) |
| 149 | 149 | ||
| 150 | (autoload 'imenu-unavailable-error "imenu") | ||
| 151 | |||
| 150 | ;;;; Customization Options | 152 | ;;;; Customization Options |
| 151 | 153 | ||
| 152 | (defgroup doc-view nil | 154 | (defgroup doc-view nil |
| @@ -214,7 +216,7 @@ are available (see Info node `(emacs)Document View')." | |||
| 214 | :type 'boolean | 216 | :type 'boolean |
| 215 | :version "30.1") | 217 | :version "30.1") |
| 216 | 218 | ||
| 217 | (defcustom doc-view-imenu-enabled (and (executable-find "mutool") t) | 219 | (defcustom doc-view-imenu-enabled (executable-find "mutool") |
| 218 | "Whether to generate an imenu outline when \"mutool\" is available." | 220 | "Whether to generate an imenu outline when \"mutool\" is available." |
| 219 | :type 'boolean | 221 | :type 'boolean |
| 220 | :version "29.1") | 222 | :version "29.1") |
| @@ -1958,9 +1960,10 @@ structure is extracted by `doc-view--imenu-subtree'." | |||
| 1958 | (let ((fn (or file-name (buffer-file-name)))) | 1960 | (let ((fn (or file-name (buffer-file-name)))) |
| 1959 | (when fn | 1961 | (when fn |
| 1960 | (let ((outline nil) | 1962 | (let ((outline nil) |
| 1961 | (fn (shell-quote-argument (expand-file-name fn)))) | 1963 | (fn (expand-file-name fn))) |
| 1962 | (with-temp-buffer | 1964 | (with-temp-buffer |
| 1963 | (insert (shell-command-to-string (format "mutool show %s outline" fn))) | 1965 | (unless (= 0 (call-process "mutool" nil (current-buffer) nil "show" fn "outline")) |
| 1966 | (imenu-unavailable-error "Unable to create imenu index using `mutool'")) | ||
| 1964 | (goto-char (point-min)) | 1967 | (goto-char (point-min)) |
| 1965 | (while (re-search-forward doc-view--outline-rx nil t) | 1968 | (while (re-search-forward doc-view--outline-rx nil t) |
| 1966 | (push `((level . ,(length (match-string 1))) | 1969 | (push `((level . ,(length (match-string 1))) |
| @@ -2009,7 +2012,7 @@ GOTO-PAGE-FN other than `doc-view-goto-page'." | |||
| 2009 | 2012 | ||
| 2010 | (defun doc-view-imenu-setup () | 2013 | (defun doc-view-imenu-setup () |
| 2011 | "Set up local state in the current buffer for imenu, if needed." | 2014 | "Set up local state in the current buffer for imenu, if needed." |
| 2012 | (when (and doc-view-imenu-enabled (executable-find "mutool")) | 2015 | (when doc-view-imenu-enabled |
| 2013 | (setq-local imenu-create-index-function #'doc-view-imenu-index | 2016 | (setq-local imenu-create-index-function #'doc-view-imenu-index |
| 2014 | imenu-submenus-on-top nil | 2017 | imenu-submenus-on-top nil |
| 2015 | imenu-sort-function nil | 2018 | imenu-sort-function nil |
| @@ -2284,7 +2287,10 @@ toggle between displaying the document or editing it as text. | |||
| 2284 | (setq mode-name "DocView" | 2287 | (setq mode-name "DocView" |
| 2285 | buffer-read-only t | 2288 | buffer-read-only t |
| 2286 | major-mode 'doc-view-mode) | 2289 | major-mode 'doc-view-mode) |
| 2287 | (doc-view-imenu-setup) | 2290 | (condition-case imenu-error |
| 2291 | (doc-view-imenu-setup) | ||
| 2292 | (imenu-unavailable (message "imenu support unavailable: %s" | ||
| 2293 | (cadr imenu-error)))) | ||
| 2288 | (doc-view-initiate-display) | 2294 | (doc-view-initiate-display) |
| 2289 | ;; Replace the tool bar map with `doc-view-tool-bar-map'. | 2295 | ;; Replace the tool bar map with `doc-view-tool-bar-map'. |
| 2290 | (setq-local tool-bar-map doc-view-tool-bar-map) | 2296 | (setq-local tool-bar-map doc-view-tool-bar-map) |
diff --git a/lisp/net/shr.el b/lisp/net/shr.el index 9b19a1b3980..b5bb7b42650 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el | |||
| @@ -216,15 +216,18 @@ temporarily blinks with this face." | |||
| 216 | "Face for <h3> elements." | 216 | "Face for <h3> elements." |
| 217 | :version "28.1") | 217 | :version "28.1") |
| 218 | 218 | ||
| 219 | (defface shr-h4 nil | 219 | (defface shr-h4 |
| 220 | '((t (:inherit default))) | ||
| 220 | "Face for <h4> elements." | 221 | "Face for <h4> elements." |
| 221 | :version "28.1") | 222 | :version "28.1") |
| 222 | 223 | ||
| 223 | (defface shr-h5 nil | 224 | (defface shr-h5 |
| 225 | '((t (:inherit default))) | ||
| 224 | "Face for <h5> elements." | 226 | "Face for <h5> elements." |
| 225 | :version "28.1") | 227 | :version "28.1") |
| 226 | 228 | ||
| 227 | (defface shr-h6 nil | 229 | (defface shr-h6 |
| 230 | '((t (:inherit default))) | ||
| 228 | "Face for <h6> elements." | 231 | "Face for <h6> elements." |
| 229 | :version "28.1") | 232 | :version "28.1") |
| 230 | 233 | ||
diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el index 3869d0327fd..67d136b5a66 100644 --- a/lisp/nxml/nxml-mode.el +++ b/lisp/nxml/nxml-mode.el | |||
| @@ -151,17 +151,17 @@ This is not used directly, but only via inheritance by other faces." | |||
| 151 | This is not used directly, but only via inheritance by other faces." | 151 | This is not used directly, but only via inheritance by other faces." |
| 152 | :group 'nxml-faces) | 152 | :group 'nxml-faces) |
| 153 | 153 | ||
| 154 | (defface nxml-text | ||
| 155 | '((t (:inherit default))) | ||
| 156 | "Face used to highlight text." | ||
| 157 | :group 'nxml-faces) | ||
| 158 | |||
| 154 | (defface nxml-delimiter | 159 | (defface nxml-delimiter |
| 155 | nil | 160 | '((t (:inherit nxml-text))) |
| 156 | "Face used to highlight delimiters. | 161 | "Face used to highlight delimiters. |
| 157 | This is not used directly, but only via inheritance by other faces." | 162 | This is not used directly, but only via inheritance by other faces." |
| 158 | :group 'nxml-faces) | 163 | :group 'nxml-faces) |
| 159 | 164 | ||
| 160 | (defface nxml-text | ||
| 161 | nil | ||
| 162 | "Face used to highlight text." | ||
| 163 | :group 'nxml-faces) | ||
| 164 | |||
| 165 | (defface nxml-processing-instruction-delimiter | 165 | (defface nxml-processing-instruction-delimiter |
| 166 | '((t (:inherit nxml-delimiter))) | 166 | '((t (:inherit nxml-delimiter))) |
| 167 | "Face used for the delimiters of processing instructions, i.e., <? and ?>." | 167 | "Face used for the delimiters of processing instructions, i.e., <? and ?>." |
| @@ -230,7 +230,7 @@ This includes the `x' in hex references." | |||
| 230 | :group 'nxml-faces) | 230 | :group 'nxml-faces) |
| 231 | 231 | ||
| 232 | (defface nxml-element-colon | 232 | (defface nxml-element-colon |
| 233 | nil | 233 | '((t (:inherit nxml-delimiter))) |
| 234 | "Face used for the colon in element names." | 234 | "Face used for the colon in element names." |
| 235 | :group 'nxml-faces) | 235 | :group 'nxml-faces) |
| 236 | 236 | ||
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el index 1d7f90ed428..2cbe9ca7e92 100644 --- a/lisp/progmodes/cc-defs.el +++ b/lisp/progmodes/cc-defs.el | |||
| @@ -425,11 +425,14 @@ to it is returned. This function does not modify the point or the mark." | |||
| 425 | (defvar lookup-syntax-properties) ;XEmacs. | 425 | (defvar lookup-syntax-properties) ;XEmacs. |
| 426 | 426 | ||
| 427 | (defmacro c-is-escaped (pos) | 427 | (defmacro c-is-escaped (pos) |
| 428 | ;; Are there an odd number of backslashes before POS? | 428 | ;; Is the character following POS escaped? |
| 429 | (declare (debug t)) | 429 | (declare (debug t)) |
| 430 | `(save-excursion | 430 | `(save-excursion |
| 431 | (goto-char ,pos) | 431 | (goto-char ,pos) |
| 432 | (not (zerop (logand (skip-chars-backward "\\\\") 1))))) | 432 | (if (and c-escaped-newline-takes-precedence |
| 433 | (memq (char-after) '(?\n ?\r))) | ||
| 434 | (eq (char-before) ?\\) | ||
| 435 | (not (zerop (logand (skip-chars-backward "\\\\") 1)))))) | ||
| 433 | 436 | ||
| 434 | (defmacro c-will-be-escaped (pos beg end) | 437 | (defmacro c-will-be-escaped (pos beg end) |
| 435 | ;; Will the character after POS be escaped after the removal of (BEG END)? | 438 | ;; Will the character after POS be escaped after the removal of (BEG END)? |
| @@ -437,13 +440,23 @@ to it is returned. This function does not modify the point or the mark." | |||
| 437 | (declare (debug t)) | 440 | (declare (debug t)) |
| 438 | `(save-excursion | 441 | `(save-excursion |
| 439 | (let ((-end- ,end) | 442 | (let ((-end- ,end) |
| 443 | (-pos- ,pos) | ||
| 440 | count) | 444 | count) |
| 441 | (goto-char ,pos) | 445 | (if (and c-escaped-newline-takes-precedence |
| 442 | (setq count (skip-chars-backward "\\\\" -end-)) | 446 | (memq (char-after -pos-) '(?\n ?\r))) |
| 443 | (when (eq (point) -end-) | 447 | (eq (char-before (if (eq -pos- -end-) |
| 444 | (goto-char ,beg) | 448 | ,beg |
| 445 | (setq count (+ count (skip-chars-backward "\\\\")))) | 449 | -pos-)) |
| 446 | (not (zerop (logand count 1)))))) | 450 | ?\\) |
| 451 | (goto-char -pos-) | ||
| 452 | (setq count | ||
| 453 | (if (> -pos- -end-) | ||
| 454 | (skip-chars-backward "\\\\" -end-) | ||
| 455 | 0)) | ||
| 456 | (when (eq (point) -end-) | ||
| 457 | (goto-char ,beg) | ||
| 458 | (setq count (+ count (skip-chars-backward "\\\\")))) | ||
| 459 | (not (zerop (logand count 1))))))) | ||
| 447 | 460 | ||
| 448 | (defmacro c-will-be-unescaped (beg) | 461 | (defmacro c-will-be-unescaped (beg) |
| 449 | ;; Would the character after BEG be unescaped? | 462 | ;; Would the character after BEG be unescaped? |
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index 3d0ad9984fa..ef7f27dc435 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el | |||
| @@ -1071,14 +1071,6 @@ Currently (2022-09) just C++ Mode uses this." | |||
| 1071 | ;; matched. | 1071 | ;; matched. |
| 1072 | t nil) | 1072 | t nil) |
| 1073 | 1073 | ||
| 1074 | (c-lang-defconst c-string-escaped-newlines | ||
| 1075 | "Set if the language support backslash escaped newlines inside string | ||
| 1076 | literals." | ||
| 1077 | t nil | ||
| 1078 | (c c++ objc pike) t) | ||
| 1079 | (c-lang-defvar c-string-escaped-newlines | ||
| 1080 | (c-lang-const c-string-escaped-newlines)) | ||
| 1081 | |||
| 1082 | (c-lang-defconst c-multiline-string-start-char | 1074 | (c-lang-defconst c-multiline-string-start-char |
| 1083 | "Set if the language supports multiline string literals without escaped | 1075 | "Set if the language supports multiline string literals without escaped |
| 1084 | newlines. If t, all string literals are multiline. If a character, | 1076 | newlines. If t, all string literals are multiline. If a character, |
| @@ -1095,6 +1087,18 @@ further directions." | |||
| 1095 | (c-lang-defvar c-multiline-string-start-char | 1087 | (c-lang-defvar c-multiline-string-start-char |
| 1096 | (c-lang-const c-multiline-string-start-char)) | 1088 | (c-lang-const c-multiline-string-start-char)) |
| 1097 | 1089 | ||
| 1090 | (c-lang-defconst c-escaped-newline-takes-precedence | ||
| 1091 | "Set if the language resolves escaped newlines first. | ||
| 1092 | This makes a difference in a string like \"...\\\\\n\". When | ||
| 1093 | this variable is nil, the first backslash escapes the second, | ||
| 1094 | leaving an unterminated string. When it's non-nil, the string is | ||
| 1095 | continued onto the next line, and the first backslash escapes | ||
| 1096 | whatever begins that next line." | ||
| 1097 | t nil | ||
| 1098 | (c c++ objc pike) t) | ||
| 1099 | (c-lang-defvar c-escaped-newline-takes-precedence | ||
| 1100 | (c-lang-const c-escaped-newline-takes-precedence)) | ||
| 1101 | |||
| 1098 | (c-lang-defconst c-string-innards-re-alist | 1102 | (c-lang-defconst c-string-innards-re-alist |
| 1099 | ;; An alist of regexps matching the innards of a string, the key being the | 1103 | ;; An alist of regexps matching the innards of a string, the key being the |
| 1100 | ;; string's delimiter. | 1104 | ;; string's delimiter. |
| @@ -1105,9 +1109,12 @@ further directions." | |||
| 1105 | t (mapcar (lambda (delim) | 1109 | t (mapcar (lambda (delim) |
| 1106 | (cons | 1110 | (cons |
| 1107 | delim | 1111 | delim |
| 1108 | (concat "\\(\\\\\\(.\\|\n\\)\\|[^\\\n\r" | 1112 | (concat |
| 1109 | (string delim) | 1113 | (if (c-lang-const c-escaped-newline-takes-precedence) |
| 1110 | "]\\)*"))) | 1114 | "\\(\\\\\\(\\\\?\n\\|.\\)\\|[^\\\n\r" |
| 1115 | "\\(\\\\\\(\n\\|.\\)\\|[^\\\n\r") | ||
| 1116 | (string delim) | ||
| 1117 | "]\\)*"))) | ||
| 1111 | (and | 1118 | (and |
| 1112 | (or (null (c-lang-const c-multiline-string-start-char)) | 1119 | (or (null (c-lang-const c-multiline-string-start-char)) |
| 1113 | (c-characterp (c-lang-const c-multiline-string-start-char))) | 1120 | (c-characterp (c-lang-const c-multiline-string-start-char))) |
diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el index 5ea03b9e852..308ba69cb9a 100644 --- a/lisp/progmodes/make-mode.el +++ b/lisp/progmodes/make-mode.el | |||
| @@ -105,7 +105,7 @@ | |||
| 105 | :version "22.1") | 105 | :version "22.1") |
| 106 | 106 | ||
| 107 | (defface makefile-shell | 107 | (defface makefile-shell |
| 108 | () | 108 | '((t (:inherit default))) |
| 109 | ;;'((((class color) (min-colors 88) (background light)) (:background "seashell1")) | 109 | ;;'((((class color) (min-colors 88) (background light)) (:background "seashell1")) |
| 110 | ;; (((class color) (min-colors 88) (background dark)) (:background "seashell4"))) | 110 | ;; (((class color) (min-colors 88) (background dark)) (:background "seashell4"))) |
| 111 | "Face to use for additionally highlighting Shell commands in Font-Lock mode." | 111 | "Face to use for additionally highlighting Shell commands in Font-Lock mode." |
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index a23339a2180..52e5a36f4b0 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el | |||
| @@ -297,11 +297,18 @@ | |||
| 297 | 297 | ||
| 298 | (defcustom python-interpreter "python" | 298 | (defcustom python-interpreter "python" |
| 299 | "Python interpreter for noninteractive use. | 299 | "Python interpreter for noninteractive use. |
| 300 | To customize the Python shell, modify `python-shell-interpreter' | 300 | Some Python interpreters also require changes to |
| 301 | instead." | 301 | `python-interpreter-args'. |
| 302 | |||
| 303 | To customize the Python interpreter for interactive use, modify | ||
| 304 | `python-shell-interpreter' instead." | ||
| 302 | :version "29.1" | 305 | :version "29.1" |
| 303 | :type 'string) | 306 | :type 'string) |
| 304 | 307 | ||
| 308 | (defcustom python-interpreter-args "" | ||
| 309 | "Arguments for the Python interpreter for noninteractive use." | ||
| 310 | :version "30.1" | ||
| 311 | :type 'string) | ||
| 305 | 312 | ||
| 306 | 313 | ||
| 307 | ;;; Bindings | 314 | ;;; Bindings |
| @@ -2558,7 +2565,7 @@ position, else returns nil." | |||
| 2558 | (cond ((executable-find "python3") "python3") | 2565 | (cond ((executable-find "python3") "python3") |
| 2559 | ((executable-find "python") "python") | 2566 | ((executable-find "python") "python") |
| 2560 | (t "python3")) | 2567 | (t "python3")) |
| 2561 | "Default Python interpreter for shell. | 2568 | "Python interpreter for interactive use. |
| 2562 | 2569 | ||
| 2563 | Some Python interpreters also require changes to | 2570 | Some Python interpreters also require changes to |
| 2564 | `python-shell-interpreter-args'. In particular, setting | 2571 | `python-shell-interpreter-args'. In particular, setting |
| @@ -2573,11 +2580,12 @@ Some Python interpreters also require changes to | |||
| 2573 | :safe 'stringp) | 2580 | :safe 'stringp) |
| 2574 | 2581 | ||
| 2575 | (defcustom python-shell-interpreter-args "-i" | 2582 | (defcustom python-shell-interpreter-args "-i" |
| 2576 | "Default arguments for the Python interpreter." | 2583 | "Arguments for the Python interpreter for interactive use." |
| 2577 | :type 'string) | 2584 | :type 'string) |
| 2578 | 2585 | ||
| 2579 | (defcustom python-shell-interpreter-interactive-arg "-i" | 2586 | (defcustom python-shell-interpreter-interactive-arg "-i" |
| 2580 | "Interpreter argument to force it to run interactively." | 2587 | "Interpreter argument to force it to run interactively. |
| 2588 | This is used only for prompt detection." | ||
| 2581 | :type 'string | 2589 | :type 'string |
| 2582 | :version "24.4") | 2590 | :version "24.4") |
| 2583 | 2591 | ||
| @@ -6505,18 +6513,25 @@ recursively." | |||
| 6505 | (let* ((temp (current-buffer)) | 6513 | (let* ((temp (current-buffer)) |
| 6506 | (status (if (bufferp source) | 6514 | (status (if (bufferp source) |
| 6507 | (with-current-buffer source | 6515 | (with-current-buffer source |
| 6508 | (call-process-region (point-min) (point-max) | 6516 | (apply #'call-process-region |
| 6509 | python-interpreter | 6517 | (point-min) (point-max) |
| 6510 | nil (list temp nil) nil | 6518 | python-interpreter |
| 6511 | "-c" python--list-imports | 6519 | nil (list temp nil) nil |
| 6512 | (or name ""))) | 6520 | (append |
| 6521 | (split-string-shell-command | ||
| 6522 | python-interpreter-args) | ||
| 6523 | `("-c" ,python--list-imports) | ||
| 6524 | (list (or name ""))))) | ||
| 6513 | (with-current-buffer buffer | 6525 | (with-current-buffer buffer |
| 6514 | (apply #'call-process | 6526 | (apply #'call-process |
| 6515 | python-interpreter | 6527 | python-interpreter |
| 6516 | nil (list temp nil) nil | 6528 | nil (list temp nil) nil |
| 6517 | "-c" python--list-imports | 6529 | (append |
| 6518 | (or name "") | 6530 | (split-string-shell-command |
| 6519 | (mapcar #'file-local-name source))))) | 6531 | python-interpreter-args) |
| 6532 | `("-c" ,python--list-imports) | ||
| 6533 | (list (or name "")) | ||
| 6534 | (mapcar #'file-local-name source)))))) | ||
| 6520 | lines) | 6535 | lines) |
| 6521 | (python--list-imports-check-status status) | 6536 | (python--list-imports-check-status status) |
| 6522 | (goto-char (point-min)) | 6537 | (goto-char (point-min)) |
| @@ -6559,7 +6574,11 @@ Return non-nil if the buffer was actually modified." | |||
| 6559 | (point-min) (point-max) | 6574 | (point-min) (point-max) |
| 6560 | python-interpreter | 6575 | python-interpreter |
| 6561 | nil (list temp nil) nil | 6576 | nil (list temp nil) nil |
| 6562 | "-m" "isort" "-" args)) | 6577 | (append |
| 6578 | (split-string-shell-command | ||
| 6579 | python-interpreter-args) | ||
| 6580 | '("-m" "isort" "-") | ||
| 6581 | args))) | ||
| 6563 | (tick (buffer-chars-modified-tick))) | 6582 | (tick (buffer-chars-modified-tick))) |
| 6564 | (unless (eq 0 status) | 6583 | (unless (eq 0 status) |
| 6565 | (error "%s exited with status %s (maybe isort is missing?)" | 6584 | (error "%s exited with status %s (maybe isort is missing?)" |
| @@ -6629,10 +6648,14 @@ asking." | |||
| 6629 | (with-temp-buffer | 6648 | (with-temp-buffer |
| 6630 | (let ((temp (current-buffer))) | 6649 | (let ((temp (current-buffer))) |
| 6631 | (with-current-buffer buffer | 6650 | (with-current-buffer buffer |
| 6632 | (call-process-region (point-min) (point-max) | 6651 | (apply #'call-process-region |
| 6633 | python-interpreter | 6652 | (point-min) (point-max) |
| 6634 | nil temp nil | 6653 | python-interpreter |
| 6635 | "-m" "pyflakes")) | 6654 | nil temp nil |
| 6655 | (append | ||
| 6656 | (split-string-shell-command | ||
| 6657 | python-interpreter-args) | ||
| 6658 | '("-m" "pyflakes")))) | ||
| 6636 | (goto-char (point-min)) | 6659 | (goto-char (point-min)) |
| 6637 | (when (looking-at-p ".* No module named pyflakes$") | 6660 | (when (looking-at-p ".* No module named pyflakes$") |
| 6638 | (error "%s couldn't find pyflakes" python-interpreter)) | 6661 | (error "%s couldn't find pyflakes" python-interpreter)) |
diff --git a/lisp/time.el b/lisp/time.el index 522bec46ac6..3b87859a87c 100644 --- a/lisp/time.el +++ b/lisp/time.el | |||
| @@ -139,7 +139,8 @@ make the mail indicator stand out on a color display." | |||
| 139 | :version "22.1" | 139 | :version "22.1" |
| 140 | :type '(choice (const :tag "None" nil) face)) | 140 | :type '(choice (const :tag "None" nil) face)) |
| 141 | 141 | ||
| 142 | (defface display-time-date-and-time nil | 142 | (defface display-time-date-and-time |
| 143 | '((t (:inherit mode-line))) | ||
| 143 | "Face for `display-time-format'." | 144 | "Face for `display-time-format'." |
| 144 | :group 'mode-line-faces | 145 | :group 'mode-line-faces |
| 145 | :version "30.1") | 146 | :version "30.1") |
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index fa801cab51b..ac4549609a3 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el | |||
| @@ -289,7 +289,7 @@ in the key vector, as in the argument of `define-key'." | |||
| 289 | (let ((items (mapc (lambda (x) | 289 | (let ((items (mapc (lambda (x) |
| 290 | (when (consp x) | 290 | (when (consp x) |
| 291 | (dotimes (i (1- (length x))) | 291 | (dotimes (i (1- (length x))) |
| 292 | (when (char-or-string-p (nth i x)) | 292 | (when (stringp (nth i x)) |
| 293 | (setcar (nthcdr i x) | 293 | (setcar (nthcdr i x) |
| 294 | (substitute-command-keys | 294 | (substitute-command-keys |
| 295 | (car (nthcdr i x)))))))) | 295 | (car (nthcdr i x)))))))) |