aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPo Lu2023-07-21 07:58:30 +0800
committerPo Lu2023-07-21 07:58:30 +0800
commit0ff70f12a5e29a0e90637bd063e1725f0e4e4ab2 (patch)
treebaa2271c1a50b38983456bd1d9250a1e3cc0a1a1
parent916ef5748992216710f01d91c330e52042b279f1 (diff)
parentc55e67081e9873a32b6e665e44f3e5a9c301255f (diff)
downloademacs-0ff70f12a5e29a0e90637bd063e1725f0e4e4ab2.tar.gz
emacs-0ff70f12a5e29a0e90637bd063e1725f0e4e4ab2.zip
Merge remote-tracking branch 'origin/master' into feature/android
-rw-r--r--etc/NEWS4
-rw-r--r--lisp/cedet/semantic/decorate/include.el2
-rw-r--r--lisp/cus-edit.el71
-rw-r--r--lisp/doc-view.el16
-rw-r--r--lisp/net/shr.el9
-rw-r--r--lisp/nxml/nxml-mode.el14
-rw-r--r--lisp/progmodes/cc-defs.el29
-rw-r--r--lisp/progmodes/cc-langs.el29
-rw-r--r--lisp/progmodes/make-mode.el2
-rw-r--r--lisp/progmodes/python.el59
-rw-r--r--lisp/time.el3
-rw-r--r--lisp/wid-edit.el2
12 files changed, 163 insertions, 77 deletions
diff --git a/etc/NEWS b/etc/NEWS
index b59624e0df8..0793bac0e9c 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -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'.
445This allows the user to specify command line arguments to the non
446interactive 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.
53Used by the decoration style: `semantic-decoration-on-includes'." 53Used 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.
4023If the user edited the widget, set the state to modified. If not, the new 4047If the user edited the widget, set the state to modified. If not, the new
4024state is one of the return values of `custom-face-state'." 4048state is one of the return values of `custom-face-state'.
4049Optional 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."
151This is not used directly, but only via inheritance by other faces." 151This 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.
157This is not used directly, but only via inheritance by other faces." 162This 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
1076literals."
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
1084newlines. If t, all string literals are multiline. If a character, 1076newlines. 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.
1092This makes a difference in a string like \"...\\\\\n\". When
1093this variable is nil, the first backslash escapes the second,
1094leaving an unterminated string. When it's non-nil, the string is
1095continued onto the next line, and the first backslash escapes
1096whatever 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.
300To customize the Python shell, modify `python-shell-interpreter' 300Some Python interpreters also require changes to
301instead." 301`python-interpreter-args'.
302
303To 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
2563Some Python interpreters also require changes to 2570Some 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.
2588This 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))))))))