comparison lisp/menu-bar.el @ 92745:871ad7e118ff

(menu-bar-update-buffers-maxbuf): Remove. (menu-bar-select-buffer): Remove. (menu-bar-select-frame): Make non-interactive and take a frame arg. (menu-bar-update-buffers): Don't use buffer-names or frame names as events.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Tue, 11 Mar 2008 17:44:39 +0000
parents 42d2ac4260eb
children 98f0d29f01c5
comparison
equal deleted inserted replaced
92744:52faf3a2d5c7 92745:871ad7e118ff
1535 :type 'boolean 1535 :type 'boolean
1536 :group 'menu) 1536 :group 'menu)
1537 1537
1538 (defvar list-buffers-directory nil) 1538 (defvar list-buffers-directory nil)
1539 1539
1540 (defvar menu-bar-update-buffers-maxbuf) 1540 (defun menu-bar-select-frame (frame)
1541 1541 (make-frame-visible frame)
1542 (defun menu-bar-select-buffer () 1542 (raise-frame frame)
1543 (interactive) 1543 (select-frame frame))
1544 (switch-to-buffer last-command-event))
1545
1546 (defun menu-bar-select-frame ()
1547 (interactive)
1548 (let (frame)
1549 (dolist (f (frame-list))
1550 (when (equal last-command-event (frame-parameter f 'name))
1551 (setq frame f)))
1552 ;; FRAME can be nil when user specifies the selected frame.
1553 (setq frame (or frame (selected-frame)))
1554 (make-frame-visible frame)
1555 (raise-frame frame)
1556 (select-frame frame)))
1557 1544
1558 (defun menu-bar-update-buffers-1 (elt) 1545 (defun menu-bar-update-buffers-1 (elt)
1559 (let* ((buf (car elt)) 1546 (let* ((buf (car elt))
1560 (file 1547 (file
1561 (and (if (eq buffers-menu-show-directories 'unless-uniquify) 1548 (and (if (eq buffers-menu-show-directories 'unless-uniquify)
1595 (if (> (length buffers) buffers-menu-max-size) 1582 (if (> (length buffers) buffers-menu-max-size)
1596 (setcdr (nthcdr buffers-menu-max-size buffers) nil))) 1583 (setcdr (nthcdr buffers-menu-max-size buffers) nil)))
1597 1584
1598 ;; Make the menu of buffers proper. 1585 ;; Make the menu of buffers proper.
1599 (setq buffers-menu 1586 (setq buffers-menu
1600 (let* ((buffer-list 1587 (let (alist)
1601 (mapcar 'list buffers))
1602 (menu-bar-update-buffers-maxbuf 0)
1603 alist)
1604 ;; Put into each element of buffer-list 1588 ;; Put into each element of buffer-list
1605 ;; the name for actual display, 1589 ;; the name for actual display,
1606 ;; perhaps truncated in the middle. 1590 ;; perhaps truncated in the middle.
1607 (dolist (buf buffer-list) 1591 (dolist (buf buffers)
1608 (let ((name (buffer-name (car buf)))) 1592 (let ((name (buffer-name buf)))
1609 (setcdr buf 1593 (unless (eq ?\s (aref name 0))
1610 (if (> (length name) 27) 1594 (push (menu-bar-update-buffers-1
1611 (concat (substring name 0 12) 1595 (cons buf
1612 "..." 1596 (if (> (length name) 27)
1613 (substring name -12)) 1597 (concat (substring name 0 12)
1614 name)))) 1598 "..."
1615 ;; Compute the maximum length of any name. 1599 (substring name -12))
1616 (dolist (buf buffer-list) 1600 name)))
1617 (unless (eq ?\s (aref (cdr buf) 0)) 1601 alist))))
1618 (setq menu-bar-update-buffers-maxbuf 1602 ;; Now make the actual list of items.
1619 (max menu-bar-update-buffers-maxbuf 1603 (let ((buffers-vec (make-vector (length alist) nil))
1620 (length (cdr buf)))))) 1604 (i (length alist)))
1621 ;; Set ALIST to an alist of the form 1605 (dolist (pair alist)
1622 ;; ITEM-STRING . BUFFER 1606 (setq i (1- i))
1623 (dolist (buf buffer-list) 1607 (aset buffers-vec i
1624 (unless (eq ?\s (aref (cdr buf) 0)) 1608 (nconc (list (car pair)
1625 (push (menu-bar-update-buffers-1 buf) alist)))
1626 ;; Now make the actual list of items, and add
1627 ;; some miscellaneous buffer commands to the end.
1628 (mapcar (lambda (pair)
1629 ;; This is somewhat risque, to use
1630 ;; the buffer name itself as the event
1631 ;; type to define, but it works.
1632 ;; It would not work to use the buffer
1633 ;; since a buffer as an event has its
1634 ;; own meaning.
1635 (nconc (list (buffer-name (cdr pair))
1636 (car pair)
1637 (cons nil nil)) 1609 (cons nil nil))
1638 'menu-bar-select-buffer)) 1610 `(lambda ()
1639 (nreverse alist)))) 1611 (interactive)
1612 (switch-to-buffer ,(cdr pair))))))
1613 (list buffers-vec))))
1640 1614
1641 ;; Make a Frames menu if we have more than one frame. 1615 ;; Make a Frames menu if we have more than one frame.
1642 (when (cdr frames) 1616 (when (cdr frames)
1643 (let ((frames-menu 1617 (let* ((frames-vec (make-vector (length frames) nil))
1644 (cons 'keymap 1618 (frames-menu
1645 (cons "Select Frame" 1619 (cons 'keymap
1646 (mapcar 1620 (list "Select Frame" frames-vec)))
1647 (lambda (frame) 1621 (i 0))
1648 (nconc 1622 (dolist (frame frames)
1649 (list (frame-parameter frame 'name) 1623 (aset frames-vec i
1650 (frame-parameter frame 'name) 1624 (nconc
1651 (cons nil nil)) 1625 (list
1652 'menu-bar-select-frame)) 1626 (frame-parameter frame 'name)
1653 frames))))) 1627 (cons nil nil))
1628 `(lambda ()
1629 (interactive) (menu-bar-select-frame ,frame))))
1630 (setq i (1+ i)))
1654 ;; Put it after the normal buffers 1631 ;; Put it after the normal buffers
1655 (setq buffers-menu 1632 (setq buffers-menu
1656 (nconc buffers-menu 1633 (nconc buffers-menu
1657 `((frames-separator "--") 1634 `((frames-separator "--")
1658 (frames menu-item "Frames" ,frames-menu)))))) 1635 (frames menu-item "Frames" ,frames-menu))))))