Function: menu-bar-update-buffers
menu-bar-update-buffers is a byte-compiled function defined in
menu-bar.el.gz.
Signature
(menu-bar-update-buffers &optional FORCE)
Documentation
If user discards the Buffers item, play along.
Source Code
;; Defined in /usr/src/emacs/lisp/menu-bar.el.gz
(defun menu-bar-update-buffers (&optional force)
"If user discards the Buffers item, play along."
(and (lookup-key (current-global-map) [menu-bar buffer])
(or force (frame-or-buffer-changed-p))
(let ((buffers (buffer-list))
frames buffers-menu)
;; Ignore the initial frame if present. It can happen if
;; Emacs was started as a daemon. (bug#53740)
(dolist (frame (frame-list))
(unless (equal (terminal-name (frame-terminal frame))
"initial_terminal")
(push frame frames)))
;; Make the menu of buffers proper.
(setq buffers-menu
(let ((i 0)
(limit (and (integerp buffers-menu-max-size)
(> buffers-menu-max-size 1)
buffers-menu-max-size))
alist)
;; Put into each element of buffer-list
;; the name for actual display,
;; perhaps truncated in the middle.
(while buffers
(let* ((buf (pop buffers))
(name (buffer-name buf)))
(unless (eq ?\s (aref name 0))
(push (menu-bar-update-buffers-1
(cons buf
(if (and (integerp buffers-menu-buffer-name-length)
(> (length name) buffers-menu-buffer-name-length))
(concat
(substring
name 0 (/ buffers-menu-buffer-name-length 2))
"..."
(substring
name (- (/ buffers-menu-buffer-name-length 2))))
name)
))
alist)
;; If requested, list only the N most recently
;; selected buffers.
(when (eql limit (setq i (1+ i)))
(setq buffers nil)))))
(list (menu-bar-buffer-vector alist))))
;; Make a Frames menu if we have more than one frame.
(when (cdr frames)
(let* ((frames-vec (make-vector (length frames) nil))
(frames-menu
(cons 'keymap
(list "Select Frame" frames-vec)))
(i 0))
(dolist (frame frames)
(aset frames-vec i
(cons
(frame-parameter frame 'name)
(lambda ()
(interactive) (menu-bar-select-frame frame))))
(setq i (1+ i)))
;; Put it after the normal buffers
(setq buffers-menu
(nconc buffers-menu
`((frames-separator "--")
(frames menu-item "Frames" ,frames-menu))))))
;; Add in some normal commands at the end of the menu.
(setq buffers-menu
(nconc buffers-menu menu-bar-buffers-menu-command-entries))
;; We used to "(define-key (current-global-map) [menu-bar buffer]"
;; but that did not do the right thing when the [menu-bar buffer]
;; entry above had been moved (e.g. to a parent keymap).
(setcdr global-buffers-menu-map (cons "Buffers" buffers-menu)))))