Function: filesets-wrap-submenu

filesets-wrap-submenu is a byte-compiled function defined in filesets.el.gz.

Signature

(filesets-wrap-submenu SUBMENU-BODY)

Documentation

Split long submenus.

Source Code

;; Defined in /usr/src/emacs/lisp/filesets.el.gz
;      (vconcat `[,name] (subseq submenu 1)))))

(defun filesets-wrap-submenu (submenu-body)
  "Split long submenus."
  (let ((bl (length submenu-body)))
    (if (or (= filesets-max-submenu-length 0)
	    (<= bl filesets-max-submenu-length))
	submenu-body
      (let* ((result  nil)
	     (factor (ceiling (/ (float bl)
				 filesets-max-submenu-length))))
	(cl-do ((data  submenu-body (cdr data))
                (n     1            (+ n 1))
                (count 0            (+ count factor)))
	    ((or (> count bl)
		 (null data)))
	  ;; (let ((sl (subseq submenu-body count
	  (let ((sl (seq-subseq submenu-body count
				(let ((x (+ count factor)))
				  (if (>= bl x)
				      x
				    nil)))))
	    (when sl
	      ;; FIXME: O(n²) performance bug because of repeated `append':
              ;; use `mapcan'?
	      (setq result
		    (append
		     result
		     (if (= (length sl) 1)
			 (if filesets-menu-shortcuts-flag
			     (list (filesets-remake-shortcut n (car sl)))
			   sl)
		       `((,(concat
			    (filesets-get-shortcut n)
			    (let ((rv ""))
			      (cl-do ((x sl (cdr x)))
				  ((null x))
				(let ((y (concat (elt (car x) 0)
						 (if (null (cdr x))
						     ""
						   ", "))))
				  ;; FIXME: O(n²) performance bug because of
				  ;; repeated `concat': use `mapconcat'?
				  (setq rv
					(concat
					 rv
					 (if filesets-menu-shortcuts-flag
					     (substring y 2)
					   y)))))
			      (if (> (length rv)
				     filesets-max-entry-length)
				  (concat
				   (substring rv 0 filesets-max-entry-length)
				   " ...")
				rv)))
			  ,@sl))))))))
	result))))