Merge remote-tracking branch 'origin/master' into feature/android

This commit is contained in:
Po Lu 2023-07-19 08:23:06 +08:00
commit 5a3de76532

View file

@ -223,22 +223,44 @@ items `Turn Off' and `Help'."
(list (completing-read
"Minor mode indicator: "
(describe-minor-mode-completion-table-for-indicator))))
;; If INDICATOR is a string object and `mode-line-compact' might be
;; enabled, look for the word at its position and use that instead.
(when (and (consp indicator)
window
(with-selected-window window
mode-line-compact))
(with-temp-buffer
(insert (car indicator))
(goto-char (cdr indicator))
(if-let ((thing (thing-at-point 'word)))
(setq indicator thing)
(setq indicator (car indicator)))))
;; If INDICATOR is a string object, WINDOW is set, and
;; `mode-line-compact' might be enabled, find a string in
;; `minor-mode-alist' that is present within the INDICATOR and whose
;; extents within INDICATOR contain the position of the object
;; within the string.
(when window
(catch 'found
(with-selected-window window
(let ((alist minor-mode-alist) string position)
(when (and (consp indicator) mode-line-compact)
(with-temp-buffer
(insert (car indicator))
(dolist (menu alist)
;; If this is a valid minor mode menu entry,
(when (and (consp menu)
(setq string (format-mode-line (cadr menu)
nil window))
(> (length string) 0))
;; Start searching for an appearance of (cdr menu).
(goto-char (point-min))
(while (search-forward string nil 0)
;; If the position of the string object is
;; contained within, set indicator to the minor
;; mode in question.
(setq position (1+ (cdr indicator)))
(and (>= position (match-beginning 0))
(<= position (match-end 0))
(setq indicator (car menu))
(throw 'found nil)))))))))))
;; If INDICATOR is still a cons, use its car.
(when (consp indicator)
(setq indicator (car indicator)))
(let* ((minor-mode (lookup-minor-mode-from-indicator indicator))
(let* ((minor-mode (if (symbolp indicator)
;; indicator being set to a symbol means that
;; the loop above has already found a
;; matching minor mode.
indicator
(lookup-minor-mode-from-indicator indicator)))
(mm-fun (or (get minor-mode :minor-mode-function) minor-mode)))
(unless minor-mode (error "Cannot find minor mode for `%s'" indicator))
(let* ((map (cdr-safe (assq minor-mode minor-mode-map-alist)))