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