comparison lisp/menu-bar.el @ 8316:abf26f5c67e4

(menu-bar-update-buffers): If Buffers item is gone, don't bring it back.
author Richard M. Stallman <rms@gnu.org>
date Sun, 24 Jul 1994 05:34:16 +0000
parents e772982a087b
children 2c77abdc0111
comparison
equal deleted inserted replaced
8315:8921d0012bd5 8316:abf26f5c67e4
284 (make-frame-visible last-command-event) 284 (make-frame-visible last-command-event)
285 (raise-frame last-command-event) 285 (raise-frame last-command-event)
286 (select-frame last-command-event)) 286 (select-frame last-command-event))
287 287
288 (defun menu-bar-update-buffers () 288 (defun menu-bar-update-buffers ()
289 (if (frame-or-buffer-changed-p) 289 ;; If user discards the Buffers item, play along.
290 (let ((buffers (buffer-list)) 290 (and (lookup-key global-map [menu-bar buffer])
291 (frames (frame-list)) 291 (frame-or-buffer-changed-p)
292 buffers-menu frames-menu) 292 (let ((buffers (buffer-list))
293 ;; If requested, list only the N most recently selected buffers. 293 (frames (frame-list))
294 (if (and (integerp buffers-menu-max-size) 294 buffers-menu frames-menu)
295 (> buffers-menu-max-size 1)) 295 ;; If requested, list only the N most recently selected buffers.
296 (if (> (length buffers) buffers-menu-max-size) 296 (if (and (integerp buffers-menu-max-size)
297 (setcdr (nthcdr buffers-menu-max-size buffers) nil))) 297 (> buffers-menu-max-size 1))
298 298 (if (> (length buffers) buffers-menu-max-size)
299 ;; Make the menu of buffers proper. 299 (setcdr (nthcdr buffers-menu-max-size buffers) nil)))
300 (setq buffers-menu 300
301 (cons "Select Buffer" 301 ;; Make the menu of buffers proper.
302 (let ((tail buffers) 302 (setq buffers-menu
303 (maxbuf 0) 303 (cons "Select Buffer"
304 (maxlen 0) 304 (let ((tail buffers)
305 alist 305 (maxbuf 0)
306 head) 306 (maxlen 0)
307 (while tail 307 alist
308 (or (eq ?\ (aref (buffer-name (car tail)) 0)) 308 head)
309 (setq maxbuf 309 (while tail
310 (max maxbuf 310 (or (eq ?\ (aref (buffer-name (car tail)) 0))
311 (length (buffer-name (car tail)))))) 311 (setq maxbuf
312 (setq tail (cdr tail))) 312 (max maxbuf
313 (setq tail buffers) 313 (length (buffer-name (car tail))))))
314 (while tail 314 (setq tail (cdr tail)))
315 (let ((elt (car tail))) 315 (setq tail buffers)
316 (or (eq ?\ (aref (buffer-name elt) 0)) 316 (while tail
317 (setq alist (cons 317 (let ((elt (car tail)))
318 (cons 318 (or (eq ?\ (aref (buffer-name elt) 0))
319 (format 319 (setq alist (cons
320 (format "%%%ds %%s%%s %%s" 320 (cons
321 maxbuf) 321 (format
322 (buffer-name elt) 322 (format "%%%ds %%s%%s %%s"
323 (if (buffer-modified-p elt) 323 maxbuf)
324 "*" " ") 324 (buffer-name elt)
325 (save-excursion 325 (if (buffer-modified-p elt)
326 (set-buffer elt) 326 "*" " ")
327 (if buffer-read-only "%" " ")) 327 (save-excursion
328 (or (buffer-file-name elt) 328 (set-buffer elt)
329 (save-excursion 329 (if buffer-read-only "%" " "))
330 (set-buffer elt) 330 (or (buffer-file-name elt)
331 list-buffers-directory) 331 (save-excursion
332 "")) 332 (set-buffer elt)
333 elt) 333 list-buffers-directory)
334 alist))) 334 ""))
335 (and alist (> (length (car (car alist))) maxlen) 335 elt)
336 (setq maxlen (length (car (car alist)))))) 336 alist)))
337 (setq tail (cdr tail))) 337 (and alist (> (length (car (car alist))) maxlen)
338 (setq alist (nreverse alist)) 338 (setq maxlen (length (car (car alist))))))
339 (nconc (mapcar '(lambda (pair) 339 (setq tail (cdr tail)))
340 ;; This is somewhat risque, to use 340 (setq alist (nreverse alist))
341 ;; the buffer name itself as the event 341 (nconc (mapcar '(lambda (pair)
342 ;; type to define, but it works. 342 ;; This is somewhat risque, to use
343 ;; It would not work to use the buffer 343 ;; the buffer name itself as the event
344 ;; since a buffer as an event has its 344 ;; type to define, but it works.
345 ;; own meaning. 345 ;; It would not work to use the buffer
346 (nconc (list (buffer-name (cdr pair)) 346 ;; since a buffer as an event has its
347 (car pair) 347 ;; own meaning.
348 (cons nil nil)) 348 (nconc (list (buffer-name (cdr pair))
349 'menu-bar-select-buffer)) 349 (car pair)
350 alist) 350 (cons nil nil))
351 (list 351 'menu-bar-select-buffer))
352 (cons 352 alist)
353 'list-buffers 353 (list
354 (cons 354 (cons
355 (concat (make-string (max (- (/ maxlen 2) 8) 0) 355 'list-buffers
356 ?\ ) 356 (cons
357 "List All Buffers") 357 (concat (make-string (max (- (/ maxlen 2) 8) 0)
358 'list-buffers))))))) 358 ?\ )
359 359 "List All Buffers")
360 360 'list-buffers)))))))
361 ;; Make a Frames menu if we have more than one frame. 361
362 (if (cdr frames) 362
363 (setq frames-menu 363 ;; Make a Frames menu if we have more than one frame.
364 (cons "Select Frame" 364 (if (cdr frames)
365 (mapcar '(lambda (frame) 365 (setq frames-menu
366 (nconc (list frame 366 (cons "Select Frame"
367 (cdr (assq 'name 367 (mapcar '(lambda (frame)
368 (frame-parameters frame))) 368 (nconc (list frame
369 (cons nil nil)) 369 (cdr (assq 'name
370 'menu-bar-select-frame)) 370 (frame-parameters frame)))
371 frames)))) 371 (cons nil nil))
372 (if buffers-menu 372 'menu-bar-select-frame))
373 (setq buffers-menu (cons 'keymap buffers-menu))) 373 frames))))
374 (if frames-menu 374 (if buffers-menu
375 (setq frames-menu (cons 'keymap frames-menu))) 375 (setq buffers-menu (cons 'keymap buffers-menu)))
376 (define-key global-map [menu-bar buffer] 376 (if frames-menu
377 (cons "Buffers" 377 (setq frames-menu (cons 'keymap frames-menu)))
378 (if (and buffers-menu frames-menu) 378 (define-key global-map [menu-bar buffer]
379 (list 'keymap "Buffers and Frames" 379 (cons "Buffers"
380 (cons 'buffers (cons "Buffers" buffers-menu)) 380 (if (and buffers-menu frames-menu)
381 (cons 'frames (cons "Frames" frames-menu))) 381 (list 'keymap "Buffers and Frames"
382 (or buffers-menu frames-menu 'undefined))))))) 382 (cons 'buffers (cons "Buffers" buffers-menu))
383 (cons 'frames (cons "Frames" frames-menu)))
384 (or buffers-menu frames-menu 'undefined)))))))
383 385
384 (add-hook 'menu-bar-update-hook 'menu-bar-update-buffers) 386 (add-hook 'menu-bar-update-hook 'menu-bar-update-buffers)
385 387
386 ;; this version is too slow 388 ;; this version is too slow
387 ;;;(defun format-buffers-menu-line (buffer) 389 ;;;(defun format-buffers-menu-line (buffer)