[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/android 0ff70f12a5e: Merge remote-tracking branch 'origin/master
|
From: |
Po Lu |
|
Subject: |
feature/android 0ff70f12a5e: Merge remote-tracking branch 'origin/master' into feature/android |
|
Date: |
Thu, 20 Jul 2023 19:59:38 -0400 (EDT) |
branch: feature/android
commit 0ff70f12a5e29a0e90637bd063e1725f0e4e4ab2
Merge: 916ef574899 c55e67081e9
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Merge remote-tracking branch 'origin/master' into feature/android
---
etc/NEWS | 4 ++
lisp/cedet/semantic/decorate/include.el | 2 +-
lisp/cus-edit.el | 71 +++++++++++++++++++++++----------
lisp/doc-view.el | 16 +++++---
lisp/net/shr.el | 9 +++--
lisp/nxml/nxml-mode.el | 14 +++----
lisp/progmodes/cc-defs.el | 29 ++++++++++----
lisp/progmodes/cc-langs.el | 29 +++++++++-----
lisp/progmodes/make-mode.el | 2 +-
lisp/progmodes/python.el | 59 ++++++++++++++++++---------
lisp/time.el | 3 +-
lisp/wid-edit.el | 2 +-
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:
and another_expression):
do_something()
+*** New user option 'python-interpreter-args'.
+This allows the user to specify command line arguments to the non
+interactive Python interpreter specified by 'python-interpreter'.
+
** use-package
+++
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 @@
;;; Includes that are in a happy state!
;;
(defface semantic-decoration-on-includes
- nil
+ '((t (:inherit default)))
"Overlay Face used on includes that are not in some other state.
Used by the decoration style: `semantic-decoration-on-includes'."
: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'."
(from (marker-position (widget-get widget :from)))
(to (marker-position (widget-get widget :to))))
(save-excursion
+ (custom-comment-preserve widget)
(widget-value-set widget (widget-value widget))
(custom-redraw-magic widget))
(when (and (>= pos from) (<= pos to))
@@ -2509,7 +2510,9 @@ If INITIAL-STRING is non-nil, use that rather than
\"Parent groups:\"."
(let* ((null-comment (equal "" (widget-value widget))))
(if (or (widget-get (widget-get widget :parent) :comment-shown)
(not null-comment))
- (widget-default-create widget)
+ (progn
+ (widget-default-create widget)
+ (widget-put (widget-get widget :parent) :comment-shown t))
;; `widget-default-delete' expects markers in these slots --
;; maybe it shouldn't.
(widget-put widget :from (point-marker))
@@ -2542,6 +2545,14 @@ If INITIAL-STRING is non-nil, use that rather than
\"Parent groups:\"."
(and (equal "" val)
(not (widget-get widget :comment-shown)))))
+;; This is useful when we want to redraw a widget, but we want to preserve
+;; edits made by the user in the comment widget. (See Bug#64649)
+(defun custom-comment-preserve (widget)
+ "Preserve the comment that belongs to WIDGET."
+ (when (widget-get widget :comment-shown)
+ (let ((comment-widget (widget-get widget :comment-widget)))
+ (widget-put comment-widget :value (widget-value comment-widget)))))
+
;;; The `custom-variable' Widget.
(defface custom-variable-obsolete
@@ -2821,12 +2832,16 @@ try matching its doc string against
`custom-guess-doc-alist'."
;; The comment field
(unless (eq state 'hidden)
- (let* ((comment (get symbol 'variable-comment))
- (comment-widget
- (widget-create-child-and-convert
- widget 'custom-comment
- :parent widget
- :value (or comment ""))))
+ (let ((comment-widget
+ (widget-create-child-and-convert
+ widget 'custom-comment
+ :parent widget
+ :value (or
+ (and
+ (widget-get widget :comment-shown)
+ (widget-value (widget-get widget :comment-widget)))
+ (get symbol 'variable-comment)
+ ""))))
(widget-put widget :comment-widget comment-widget)
;; Don't push it !!! Custom assumes that the first child is the
;; value one.
@@ -3725,7 +3740,8 @@ WIDGET should be a `custom-face' widget."
`((t ,(widget-value child)))
(widget-value child)))))
-(defun custom-face-get-current-spec (face)
+(defun custom-face-get-current-spec-unfiltered (face)
+ "Return the current spec for face FACE, without filtering it."
(let ((spec (or (get face 'customized-face)
(get face 'saved-face)
(get face 'face-defface-spec)
@@ -3736,7 +3752,11 @@ WIDGET should be a `custom-face' widget."
;; edit it as the user has specified it.
(if (not (face-spec-match-p face spec (selected-frame)))
(setq spec `((t ,(face-attr-construct face (selected-frame))))))
- (custom-pre-filter-face-spec spec)))
+ spec))
+
+(defun custom-face-get-current-spec (face)
+ "Return the current spec for face FACE, filtering it."
+ (custom-pre-filter-face-spec (custom-face-get-current-spec-unfiltered face)))
(defun custom-toggle-hide-face (visibility-widget &rest _ignore)
"Toggle the visibility of a `custom-face' parent widget.
@@ -3839,12 +3859,16 @@ the present value is saved to its :shown-value property
instead."
widget :visibility-widget 'custom-visibility)
;; The comment field
(unless hiddenp
- (let* ((comment (get symbol 'face-comment))
- (comment-widget
- (widget-create-child-and-convert
- widget 'custom-comment
- :parent widget
- :value (or comment ""))))
+ (let ((comment-widget
+ (widget-create-child-and-convert
+ widget 'custom-comment
+ :parent widget
+ :value (or
+ (and
+ (widget-get widget :comment-shown)
+ (widget-value (widget-get widget :comment-widget)))
+ (get symbol 'face-comment)
+ ""))))
(widget-put widget :comment-widget comment-widget)
(push comment-widget children))))
@@ -3856,8 +3880,8 @@ the present value is saved to its :shown-value property
instead."
(unless (widget-get widget :custom-form)
(widget-put widget :custom-form custom-face-default-form))
- (let* ((spec (or (widget-get widget :shown-value)
- (custom-face-get-current-spec symbol)))
+ (let* ((shown-value (widget-get widget :shown-value))
+ (spec (or shown-value (custom-face-get-current-spec symbol)))
(form (widget-get widget :custom-form))
(indent (widget-get widget :indent))
face-alist face-entry spec-default spec-match editor)
@@ -3898,7 +3922,7 @@ the present value is saved to its :shown-value property
instead."
widget 'sexp :value spec))))
(push editor children)
(widget-put widget :children children)
- (custom-face-state-set widget))))))
+ (custom-face-state-set widget (not shown-value)))))))
(defun cus--face-link (widget _format)
(widget-create-child-and-convert
@@ -4018,13 +4042,18 @@ This is one of `set', `saved', `changed', `themed', or
`rogue'."
'changed
state)))
-(defun custom-face-state-set (widget)
+(defun custom-face-state-set (widget &optional no-filter)
"Set the state of WIDGET, a custom-face widget.
If the user edited the widget, set the state to modified. If not, the new
-state is one of the return values of `custom-face-state'."
+state is one of the return values of `custom-face-state'.
+Optional argument NO-FILTER means to check against an unfiltered spec."
(let ((face (widget-value widget)))
(widget-put widget :custom-state
- (if (face-spec-match-p face (custom-face-widget-to-spec
widget))
+ (if (face-spec-match-p
+ face
+ (if no-filter
+ (custom-face-get-current-spec-unfiltered face)
+ (custom-face-widget-to-spec widget)))
(custom-face-state face)
'modified))))
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 @@
(require 'filenotify)
(eval-when-compile (require 'subr-x))
+(autoload 'imenu-unavailable-error "imenu")
+
;;;; Customization Options
(defgroup doc-view nil
@@ -214,7 +216,7 @@ are available (see Info node `(emacs)Document View')."
:type 'boolean
:version "30.1")
-(defcustom doc-view-imenu-enabled (and (executable-find "mutool") t)
+(defcustom doc-view-imenu-enabled (executable-find "mutool")
"Whether to generate an imenu outline when \"mutool\" is available."
:type 'boolean
:version "29.1")
@@ -1958,9 +1960,10 @@ structure is extracted by `doc-view--imenu-subtree'."
(let ((fn (or file-name (buffer-file-name))))
(when fn
(let ((outline nil)
- (fn (shell-quote-argument (expand-file-name fn))))
+ (fn (expand-file-name fn)))
(with-temp-buffer
- (insert (shell-command-to-string (format "mutool show %s outline"
fn)))
+ (unless (= 0 (call-process "mutool" nil (current-buffer) nil "show"
fn "outline"))
+ (imenu-unavailable-error "Unable to create imenu index using
`mutool'"))
(goto-char (point-min))
(while (re-search-forward doc-view--outline-rx nil t)
(push `((level . ,(length (match-string 1)))
@@ -2009,7 +2012,7 @@ GOTO-PAGE-FN other than `doc-view-goto-page'."
(defun doc-view-imenu-setup ()
"Set up local state in the current buffer for imenu, if needed."
- (when (and doc-view-imenu-enabled (executable-find "mutool"))
+ (when doc-view-imenu-enabled
(setq-local imenu-create-index-function #'doc-view-imenu-index
imenu-submenus-on-top nil
imenu-sort-function nil
@@ -2284,7 +2287,10 @@ toggle between displaying the document or editing it as
text.
(setq mode-name "DocView"
buffer-read-only t
major-mode 'doc-view-mode)
- (doc-view-imenu-setup)
+ (condition-case imenu-error
+ (doc-view-imenu-setup)
+ (imenu-unavailable (message "imenu support unavailable: %s"
+ (cadr imenu-error))))
(doc-view-initiate-display)
;; Replace the tool bar map with `doc-view-tool-bar-map'.
(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."
"Face for <h3> elements."
:version "28.1")
-(defface shr-h4 nil
+(defface shr-h4
+ '((t (:inherit default)))
"Face for <h4> elements."
:version "28.1")
-(defface shr-h5 nil
+(defface shr-h5
+ '((t (:inherit default)))
"Face for <h5> elements."
:version "28.1")
-(defface shr-h6 nil
+(defface shr-h6
+ '((t (:inherit default)))
"Face for <h6> elements."
:version "28.1")
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."
This is not used directly, but only via inheritance by other faces."
:group 'nxml-faces)
+(defface nxml-text
+ '((t (:inherit default)))
+ "Face used to highlight text."
+ :group 'nxml-faces)
+
(defface nxml-delimiter
- nil
+ '((t (:inherit nxml-text)))
"Face used to highlight delimiters.
This is not used directly, but only via inheritance by other faces."
:group 'nxml-faces)
-(defface nxml-text
- nil
- "Face used to highlight text."
- :group 'nxml-faces)
-
(defface nxml-processing-instruction-delimiter
'((t (:inherit nxml-delimiter)))
"Face used for the delimiters of processing instructions, i.e., <? and ?>."
@@ -230,7 +230,7 @@ This includes the `x' in hex references."
:group 'nxml-faces)
(defface nxml-element-colon
- nil
+ '((t (:inherit nxml-delimiter)))
"Face used for the colon in element names."
:group 'nxml-faces)
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."
(defvar lookup-syntax-properties) ;XEmacs.
(defmacro c-is-escaped (pos)
- ;; Are there an odd number of backslashes before POS?
+ ;; Is the character following POS escaped?
(declare (debug t))
`(save-excursion
(goto-char ,pos)
- (not (zerop (logand (skip-chars-backward "\\\\") 1)))))
+ (if (and c-escaped-newline-takes-precedence
+ (memq (char-after) '(?\n ?\r)))
+ (eq (char-before) ?\\)
+ (not (zerop (logand (skip-chars-backward "\\\\") 1))))))
(defmacro c-will-be-escaped (pos beg end)
;; 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."
(declare (debug t))
`(save-excursion
(let ((-end- ,end)
+ (-pos- ,pos)
count)
- (goto-char ,pos)
- (setq count (skip-chars-backward "\\\\" -end-))
- (when (eq (point) -end-)
- (goto-char ,beg)
- (setq count (+ count (skip-chars-backward "\\\\"))))
- (not (zerop (logand count 1))))))
+ (if (and c-escaped-newline-takes-precedence
+ (memq (char-after -pos-) '(?\n ?\r)))
+ (eq (char-before (if (eq -pos- -end-)
+ ,beg
+ -pos-))
+ ?\\)
+ (goto-char -pos-)
+ (setq count
+ (if (> -pos- -end-)
+ (skip-chars-backward "\\\\" -end-)
+ 0))
+ (when (eq (point) -end-)
+ (goto-char ,beg)
+ (setq count (+ count (skip-chars-backward "\\\\"))))
+ (not (zerop (logand count 1)))))))
(defmacro c-will-be-unescaped (beg)
;; 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."
;; matched.
t nil)
-(c-lang-defconst c-string-escaped-newlines
- "Set if the language support backslash escaped newlines inside string
-literals."
- t nil
- (c c++ objc pike) t)
-(c-lang-defvar c-string-escaped-newlines
- (c-lang-const c-string-escaped-newlines))
-
(c-lang-defconst c-multiline-string-start-char
"Set if the language supports multiline string literals without escaped
newlines. If t, all string literals are multiline. If a character,
@@ -1095,6 +1087,18 @@ further directions."
(c-lang-defvar c-multiline-string-start-char
(c-lang-const c-multiline-string-start-char))
+(c-lang-defconst c-escaped-newline-takes-precedence
+ "Set if the language resolves escaped newlines first.
+This makes a difference in a string like \"...\\\\\n\". When
+this variable is nil, the first backslash escapes the second,
+leaving an unterminated string. When it's non-nil, the string is
+continued onto the next line, and the first backslash escapes
+whatever begins that next line."
+ t nil
+ (c c++ objc pike) t)
+(c-lang-defvar c-escaped-newline-takes-precedence
+ (c-lang-const c-escaped-newline-takes-precedence))
+
(c-lang-defconst c-string-innards-re-alist
;; An alist of regexps matching the innards of a string, the key being the
;; string's delimiter.
@@ -1105,9 +1109,12 @@ further directions."
t (mapcar (lambda (delim)
(cons
delim
- (concat "\\(\\\\\\(.\\|\n\\)\\|[^\\\n\r"
- (string delim)
- "]\\)*")))
+ (concat
+ (if (c-lang-const c-escaped-newline-takes-precedence)
+ "\\(\\\\\\(\\\\?\n\\|.\\)\\|[^\\\n\r"
+ "\\(\\\\\\(\n\\|.\\)\\|[^\\\n\r")
+ (string delim)
+ "]\\)*")))
(and
(or (null (c-lang-const c-multiline-string-start-char))
(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 @@
:version "22.1")
(defface makefile-shell
- ()
+ '((t (:inherit default)))
;;'((((class color) (min-colors 88) (background light)) (:background
"seashell1"))
;; (((class color) (min-colors 88) (background dark)) (:background
"seashell4")))
"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 @@
(defcustom python-interpreter "python"
"Python interpreter for noninteractive use.
-To customize the Python shell, modify `python-shell-interpreter'
-instead."
+Some Python interpreters also require changes to
+`python-interpreter-args'.
+
+To customize the Python interpreter for interactive use, modify
+`python-shell-interpreter' instead."
:version "29.1"
:type 'string)
+(defcustom python-interpreter-args ""
+ "Arguments for the Python interpreter for noninteractive use."
+ :version "30.1"
+ :type 'string)
;;; Bindings
@@ -2558,7 +2565,7 @@ position, else returns nil."
(cond ((executable-find "python3") "python3")
((executable-find "python") "python")
(t "python3"))
- "Default Python interpreter for shell.
+ "Python interpreter for interactive use.
Some Python interpreters also require changes to
`python-shell-interpreter-args'. In particular, setting
@@ -2573,11 +2580,12 @@ Some Python interpreters also require changes to
:safe 'stringp)
(defcustom python-shell-interpreter-args "-i"
- "Default arguments for the Python interpreter."
+ "Arguments for the Python interpreter for interactive use."
:type 'string)
(defcustom python-shell-interpreter-interactive-arg "-i"
- "Interpreter argument to force it to run interactively."
+ "Interpreter argument to force it to run interactively.
+This is used only for prompt detection."
:type 'string
:version "24.4")
@@ -6505,18 +6513,25 @@ recursively."
(let* ((temp (current-buffer))
(status (if (bufferp source)
(with-current-buffer source
- (call-process-region (point-min) (point-max)
- python-interpreter
- nil (list temp nil) nil
- "-c" python--list-imports
- (or name "")))
+ (apply #'call-process-region
+ (point-min) (point-max)
+ python-interpreter
+ nil (list temp nil) nil
+ (append
+ (split-string-shell-command
+ python-interpreter-args)
+ `("-c" ,python--list-imports)
+ (list (or name "")))))
(with-current-buffer buffer
(apply #'call-process
python-interpreter
nil (list temp nil) nil
- "-c" python--list-imports
- (or name "")
- (mapcar #'file-local-name source)))))
+ (append
+ (split-string-shell-command
+ python-interpreter-args)
+ `("-c" ,python--list-imports)
+ (list (or name ""))
+ (mapcar #'file-local-name source))))))
lines)
(python--list-imports-check-status status)
(goto-char (point-min))
@@ -6559,7 +6574,11 @@ Return non-nil if the buffer was actually modified."
(point-min) (point-max)
python-interpreter
nil (list temp nil) nil
- "-m" "isort" "-" args))
+ (append
+ (split-string-shell-command
+ python-interpreter-args)
+ '("-m" "isort" "-")
+ args)))
(tick (buffer-chars-modified-tick)))
(unless (eq 0 status)
(error "%s exited with status %s (maybe isort is missing?)"
@@ -6629,10 +6648,14 @@ asking."
(with-temp-buffer
(let ((temp (current-buffer)))
(with-current-buffer buffer
- (call-process-region (point-min) (point-max)
- python-interpreter
- nil temp nil
- "-m" "pyflakes"))
+ (apply #'call-process-region
+ (point-min) (point-max)
+ python-interpreter
+ nil temp nil
+ (append
+ (split-string-shell-command
+ python-interpreter-args)
+ '("-m" "pyflakes"))))
(goto-char (point-min))
(when (looking-at-p ".* No module named pyflakes$")
(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."
:version "22.1"
:type '(choice (const :tag "None" nil) face))
-(defface display-time-date-and-time nil
+(defface display-time-date-and-time
+ '((t (:inherit mode-line)))
"Face for `display-time-format'."
:group 'mode-line-faces
: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'."
(let ((items (mapc (lambda (x)
(when (consp x)
(dotimes (i (1- (length x)))
- (when (char-or-string-p (nth i x))
+ (when (stringp (nth i x))
(setcar (nthcdr i x)
(substitute-command-keys
(car (nthcdr i x))))))))