Mercurial > emacs
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)))))) |