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."