Function: widget-editable-list-insert-before

widget-editable-list-insert-before is a byte-compiled function defined in wid-edit.el.gz.

Signature

(widget-editable-list-insert-before WIDGET BEFORE)

Documentation

Insert a new widget as a child of WIDGET.

If there is a recently deleted child, the new widget is that deleted child. Otherwise, the new widget is the default child of WIDGET.

The new widget gets inserted at the position of the BEFORE child.

Source Code

;; Defined in /usr/src/emacs/lisp/wid-edit.el.gz
(defun widget-editable-list-insert-before (widget before)
  "Insert a new widget as a child of WIDGET.

If there is a recently deleted child, the new widget is that deleted child.
Otherwise, the new widget is the default child of WIDGET.

The new widget gets inserted at the position of the BEFORE child."
  (save-excursion
    (let ((children (widget-get widget :children))
          (last-deleted (when-let ((lst (widget-get widget :last-deleted)))
                          (prog1
                              (pop lst)
                            (widget-put widget :last-deleted lst)))))
      (widget--allow-insertion
       (cond (before
	      (goto-char (widget-get before :entry-from)))
	     (t
	      (goto-char (widget-get widget :value-pos))))
       (let ((child (widget-editable-list-entry-create
                     widget (and last-deleted
                                 (widget-apply last-deleted
                                               :value-to-external
                                               (widget-get last-deleted :value)))
                     last-deleted)))
	 (when (< (widget-get child :entry-from) (widget-get widget :from))
	   (set-marker (widget-get widget :from)
		       (widget-get child :entry-from)))
	 (if (eq (car children) before)
	     (widget-put widget :children (cons child children))
	   (while (not (eq (car (cdr children)) before))
	     (setq children (cdr children)))
	   (setcdr children (cons child (cdr children))))))))
  (widget-setup)
  (widget-apply widget :notify widget))