Mercurial > emacs
comparison lisp/simple.el @ 67602:3fbbf35e6d87
2005-12-16 Lrentey Kroly <lorentey@elte.hu>
* bindings.el (last-buffer): Move to simple.el.
* simple.el (last-buffer): Move here.
(get-next-valid-buffer): New function.
(next-buffer): Use frame-local buffer list, maintain buried buffer list.
(prev-buffer): Ditto. Rename to `previous-buffer'.
* menu-bar.el (menu-bar-update-buffers): Update references to `prev-buffer'.
* bindings.el (global-map): Ditto.
author | Károly Lőrentey <lorentey@elte.hu> |
---|---|
date | Fri, 16 Dec 2005 11:35:25 +0000 |
parents | 0d03cdfa9108 |
children | 0d6832f365fb |
comparison
equal
deleted
inserted
replaced
67601:0644a2b72e8c | 67602:3fbbf35e6d87 |
---|---|
50 | 50 |
51 (defgroup paren-matching nil | 51 (defgroup paren-matching nil |
52 "Highlight (un)matching of parens and expressions." | 52 "Highlight (un)matching of parens and expressions." |
53 :group 'matching) | 53 :group 'matching) |
54 | 54 |
55 (defun get-next-valid-buffer (list &optional buffer visible-ok frame) "\ | |
56 Search LIST for a valid buffer to display in FRAME. | |
57 Return nil when all buffers in LIST are undesirable for display, | |
58 otherwise return the first suitable buffer in LIST. | |
59 | |
60 Buffers not visible in windows are preferred to visible buffers, | |
61 unless VISIBLE-OK is non-nil. | |
62 If the optional argument FRAME is nil, it defaults to the selected frame. | |
63 If BUFFER is non-nil, ignore occurances of that buffer in LIST." | |
64 ;; This logic is more or less copied from other-buffer. | |
65 (setq frame (or frame (selected-frame))) | |
66 (let ((pred (frame-parameter frame 'buffer-predicate)) | |
67 found buf) | |
68 (while (and (not found) list) | |
69 (setq buf (car list)) | |
70 (if (and (not (eq buffer buf)) | |
71 (buffer-live-p buf) | |
72 (or (null pred) (funcall pred buf)) | |
73 (not (eq (aref (buffer-name buf) 0) ?\s)) | |
74 (or visible-ok (null (get-buffer-window buf 'visible)))) | |
75 (setq found buf) | |
76 (setq list (cdr list)))) | |
77 (car list))) | |
78 | |
79 (defun last-buffer (&optional buffer visible-ok frame) "\ | |
80 Return the last non-hidden displayable buffer in the buffer list. | |
81 If BUFFER is non-nil, last-buffer will ignore that buffer. | |
82 Buffers not visible in windows are preferred to visible buffers, | |
83 unless optional argument VISIBLE-OK is non-nil. | |
84 If the optional third argument FRAME is non-nil, use that frame's | |
85 buffer list instead of the selected frame's buffer list. | |
86 If no other buffer exists, the buffer `*scratch*' is returned." | |
87 (setq frame (or frame (selected-frame))) | |
88 (or (get-next-valid-buffer (frame-parameter frame 'buried-buffer-list) | |
89 buffer visible-ok frame) | |
90 (get-next-valid-buffer (nreverse (buffer-list frame)) | |
91 buffer visible-ok frame) | |
92 (progn | |
93 (set-buffer-major-mode (get-buffer-create "*scratch*")) | |
94 (get-buffer "*scratch*")))) | |
95 | |
55 (defun next-buffer () | 96 (defun next-buffer () |
56 "Switch to the next buffer in cyclic order." | 97 "Switch to the next buffer in cyclic order." |
57 (interactive) | 98 (interactive) |
58 (let ((buffer (current-buffer))) | 99 (let ((buffer (current-buffer)) |
59 (switch-to-buffer (other-buffer buffer)) | 100 (bbl (frame-parameter nil 'buried-buffer-list))) |
60 (bury-buffer buffer))) | 101 (switch-to-buffer (other-buffer buffer t)) |
61 | 102 (bury-buffer buffer) |
62 (defun prev-buffer () | 103 (set-frame-parameter nil 'buried-buffer-list |
104 (cons buffer (delq buffer bbl))))) | |
105 | |
106 (defun previous-buffer () | |
63 "Switch to the previous buffer in cyclic order." | 107 "Switch to the previous buffer in cyclic order." |
64 (interactive) | 108 (interactive) |
65 (let ((list (nreverse (buffer-list))) | 109 (let ((buffer (last-buffer (current-buffer) t)) |
66 found) | 110 (bbl (frame-parameter nil 'buried-buffer-list))) |
67 (while (and (not found) list) | 111 (switch-to-buffer buffer) |
68 (let ((buffer (car list))) | 112 ;; Clean up buried-buffer-list up to and including the chosen buffer. |
69 (if (and (not (get-buffer-window buffer)) | 113 (while (and bbl (not (eq (car bbl) buffer))) |
70 (not (string-match "\\` " (buffer-name buffer)))) | 114 (setq bbl (cdr bbl))) |
71 (setq found buffer))) | 115 (set-frame-parameter nil 'buried-buffer-list bbl))) |
72 (setq list (cdr list))) | 116 |
73 (switch-to-buffer found))) | |
74 | 117 |
75 ;;; next-error support framework | 118 ;;; next-error support framework |
76 | 119 |
77 (defgroup next-error nil | 120 (defgroup next-error nil |
78 "`next-error' support framework." | 121 "`next-error' support framework." |