Function: mode-line--minor-modes

mode-line--minor-modes is a byte-compiled function defined in bindings.el.gz.

Signature

(mode-line--minor-modes)

Documentation

Compute mode line constructs for minor mode lighters.

Source Code

;; Defined in /usr/src/emacs/lisp/bindings.el.gz
(defun mode-line--minor-modes ()
  "Compute mode line constructs for minor mode lighters."
  (let (visible hidden)
    (cond
     ((not mode-line-collapse-minor-modes)
      (setq visible minor-mode-alist
            hidden nil))
     ((eq 'not (car-safe mode-line-collapse-minor-modes))
      (let ((modes (cdr mode-line-collapse-minor-modes)))
        (dolist (item minor-mode-alist)
          (if (memq (car item) modes)
              (push item visible)
            (push item hidden)))
        (setq visible (nreverse visible)
              hidden (nreverse hidden))))
     ((listp mode-line-collapse-minor-modes)
      (let ((modes mode-line-collapse-minor-modes))
        (dolist (item minor-mode-alist)
          (if (memq (car item) modes)
              (push item hidden)
            (push item visible)))
        (setq visible (nreverse visible)
              hidden (nreverse hidden))))
     (t (setq visible nil
              hidden minor-mode-alist)))
    (list ""
          `(:propertize ("" ,visible)
                        mouse-face mode-line-highlight
                        help-echo "Minor mode\n\
mouse-1: Display minor mode menu\n\
mouse-2: Show help for minor mode\n\
mouse-3: Toggle minor modes"
                        local-map ,mode-line-minor-mode-keymap)
          (unless (string= "" (format-mode-line `("" ,hidden)))
            (let* ((menu
                    ;; FIXME: This is to defer the computation of the
                    ;; menu, but may not play well with touchscreen.
                    (lambda (e)
                      (interactive "@e")
                      (if-let* ((m (mode-line--make-lighter-menu hidden)))
                          (popup-menu m e)
                        (message "No menu available"))))
                   (keymap
                    (define-keymap
                      :parent mode-line-minor-mode-keymap
                      "<mode-line> <down-mouse-1>" menu
                      "<mode-line> <mouse-2>" #'describe-mode)))
              `(:propertize mode-line-collapse-minor-modes-to
                            mouse-face mode-line-highlight
                            help-echo "Hidden minor modes\n\
mouse-1: Display hidden minor modes\n\
mouse-2: Show help for enabled minor modes\n\
mouse-3: Toggle minor modes"
                            local-map ,keymap))))))