Function: use-package-split-when

use-package-split-when is a byte-compiled function defined in use-package-core.el.gz.

Signature

(use-package-split-when PRED XS)

Documentation

Repeatedly split a list according to PRED.

Split XS every time PRED returns t. Keep the delimiters, and arrange the result in an alist. For example:

  (use-package-split-when #'keywordp '(:a 1 :b 2 3 4 :c 5))
  ;; => '((:a 1) (:b 2 3 4) (:c 5))

  (use-package-split-when (lambda (x) (> x 2)) '(10 1 3 2 4 -1 8 9))
  ;; => '((10 1) (3 2) (4 -1) (8) (9))

Source Code

;; Defined in /usr/src/emacs/lisp/use-package/use-package-core.el.gz
(defun use-package-split-when (pred xs)
  "Repeatedly split a list according to PRED.
Split XS every time PRED returns t.  Keep the delimiters, and
arrange the result in an alist.  For example:

  (use-package-split-when #\\='keywordp \\='(:a 1 :b 2 3 4 :c 5))
  ;; => \\='((:a 1) (:b 2 3 4) (:c 5))

  (use-package-split-when (lambda (x) (> x 2)) \\='(10 1 3 2 4 -1 8 9))
  ;; => \\='((10 1) (3 2) (4 -1) (8) (9))"
  (unless (seq-empty-p xs)
    (pcase-let* ((`(,first . ,rest) (if (funcall pred (car xs))
                                        (cons (car xs) (cdr xs))
                                      (use-package-split-list pred xs)))
                 (`(,val . ,recur) (use-package-split-list pred rest)))
      (cons (cons first val)
            (use-package-split-when pred recur)))))