Annotation of GNUtools/emacs/lisp/ebuff-menu.el, revision 1.1.1.1

1.1       root        1: ; buggestions to [email protected]
                      2: 
                      3: ;; who says one can't have typeout windows in gnu emacs?
                      4: ;; like ^r select buffer from its emacs lunar or tmacs libraries.
                      5: 
                      6: ;; Copyright (C) 1985, 1986 Free Software Foundation, Inc.
                      7: 
                      8: ;; This file is part of GNU Emacs.
                      9: 
                     10: ;; GNU Emacs is free software; you can redistribute it and/or modify
                     11: ;; it under the terms of the GNU General Public License as published by
                     12: ;; the Free Software Foundation; either version 1, or (at your option)
                     13: ;; any later version.
                     14: 
                     15: ;; GNU Emacs is distributed in the hope that it will be useful,
                     16: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
                     17: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     18: ;; GNU General Public License for more details.
                     19: 
                     20: ;; You should have received a copy of the GNU General Public License
                     21: ;; along with GNU Emacs; see the file COPYING.  If not, write to
                     22: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
                     23: 
                     24: 
                     25: (require 'electric)
                     26: 
                     27: ;; this depends on the format of list-buffers (from src/buffer.c) and
                     28: ;; on stuff in lisp/buff-menu.el
                     29: 
                     30: (defvar electric-buffer-menu-mode-map nil)
                     31: (defun electric-buffer-list (arg)
                     32:   "Vaguely like ITS lunar select buffer;
                     33: combining typeoutoid buffer listing with menuoid buffer selection.
                     34: 
                     35: This pops up a buffer describing the set of emacs buffers.
                     36: If the very next character typed is a space then the buffer list
                     37:  window disappears.
                     38: 
                     39: Otherwise, one may move around in the buffer list window, marking
                     40:  buffers to be selected, saved or deleted.
                     41: 
                     42: To exit and select a new buffer, type Space when the cursor is on the
                     43:  appropriate line of the buffer-list window.
                     44: 
                     45: Other commands are much like those of buffer-menu-mode.
                     46: 
                     47: Calls value of  electric-buffer-menu-mode-hook  on entry if non-nil.
                     48: 
                     49: \\{electric-buffer-menu-mode-map}" 
                     50:   (interactive "P")
                     51:   (let (select buffer)
                     52:     (save-window-excursion
                     53:       (save-window-excursion (list-buffers arg))
                     54:       (setq buffer (window-buffer (Electric-pop-up-window "*Buffer List*")))
                     55:       (unwind-protect
                     56:          (progn
                     57:            (set-buffer buffer)
                     58:            (Electric-buffer-menu-mode)
                     59:            (setq select
                     60:                  (catch 'electric-buffer-menu-select
                     61:                    (message "<<< Press Space to bury the buffer list >>>")
                     62:                    (if (= (setq unread-command-char (read-char)) ?\ )
                     63:                        (progn (setq unread-command-char -1)
                     64:                               (throw 'electric-buffer-menu-select nil)))
                     65:                    (let ((first (progn (goto-char (point-min))
                     66:                                        (forward-line 2)
                     67:                                        (point)))
                     68:                          (last (progn (goto-char (point-max))
                     69:                                       (forward-line -1)
                     70:                                       (point)))
                     71:                          (goal-column 0))
                     72:                      (goto-char first)
                     73:                      (Electric-command-loop 'electric-buffer-menu-select
                     74:                                             nil
                     75:                                             t
                     76:                                             'electric-buffer-menu-looper
                     77:                                             (cons first last))))))
                     78:        (set-buffer buffer)
                     79:        (Buffer-menu-mode)
                     80:        (bury-buffer buffer)
                     81:        (message "")))
                     82:     (if select
                     83:        (progn (set-buffer buffer)
                     84:               (let ((opoint (point-marker)))
                     85:                 (Buffer-menu-execute)
                     86:                 (goto-char (point-min))
                     87:                 (if (prog1 (search-forward "\n>" nil t)
                     88:                       (goto-char opoint) (set-marker opoint nil))
                     89:                     (Buffer-menu-select)
                     90:                     (switch-to-buffer (Buffer-menu-buffer t))))))))
                     91: 
                     92: (defun electric-buffer-menu-looper (state condition)
                     93:   (cond ((and condition
                     94:              (not (memq (car condition) '(buffer-read-only
                     95:                                           end-of-buffer
                     96:                                           beginning-of-buffer))))
                     97:         (signal (car condition) (cdr condition)))
                     98:        ((< (point) (car state))
                     99:         (goto-char (point-min))
                    100:         (forward-line 2))
                    101:        ((> (point) (cdr state))
                    102:         (goto-char (point-max))
                    103:         (forward-line -1)
                    104:         (if (pos-visible-in-window-p (point-max))
                    105:             (recenter -1)))))
                    106: 
                    107: (put 'Electric-buffer-menu-mode 'mode-class 'special)
                    108: (defun Electric-buffer-menu-mode ()
                    109:   "Major mode for editing a list of buffers.
                    110: Each line describes one of the buffers in Emacs.
                    111: Letters do not insert themselves; instead, they are commands.
                    112: \\{electric-buffer-menu-mode-map}
                    113: 
                    114: C-g or C-c C-c -- exit buffer menu, returning to previous window and buffer
                    115:   configuration.  If the very first character typed is a space, it
                    116:   also has this effect.
                    117: Space -- select buffer of line point is on.
                    118:   Also show buffers marked with m in other windows,
                    119:   deletes buffers marked with \"D\", and saves those marked with \"S\".
                    120: m -- mark buffer to be displayed.
                    121: ~ -- clear modified-flag on that buffer.
                    122: s -- mark that buffer to be saved.
                    123: d or C-d -- mark that buffer to be deleted.
                    124: u -- remove all kinds of marks from current line.
                    125: v -- view buffer, returning when done.
                    126: Delete -- back up a line and remove marks.
                    127: 
                    128: 
                    129: Entry to this mode via command \\[electric-buffer-list] calls the value of
                    130: electric-buffer-menu-mode-hook if it is non-nil."
                    131:   (kill-all-local-variables)
                    132:   (use-local-map electric-buffer-menu-mode-map)
                    133:   (setq mode-name "Electric Buffer Menu")
                    134:   (setq mode-line-buffer-identification "Electric Buffer List")
                    135:   (if (memq 'mode-name mode-line-format)
                    136:       (progn (setq mode-line-format (copy-sequence mode-line-format))
                    137:             (setcar (memq 'mode-name mode-line-format) "Buffers")))
                    138:   (make-local-variable 'Helper-return-blurb)
                    139:   (setq Helper-return-blurb "return to buffer editing")
                    140:   (setq truncate-lines t)
                    141:   (setq buffer-read-only t)
                    142:   (setq major-mode 'Electric-buffer-menu-mode)
                    143:   (goto-char (point-min))
                    144:   (if (search-forward "\n." nil t) (forward-char -1))
                    145:   (run-hooks 'electric-buffer-menu-mode-hook))
                    146: 
                    147: ;; generally the same as Buffer-menu-mode-map
                    148: ;;  (except we don't indirect to global-map)
                    149: (put 'Electric-buffer-menu-undefined 'suppress-keymap t)
                    150: (if electric-buffer-menu-mode-map
                    151:     nil
                    152:   (let ((map (make-keymap)))
                    153:     (fillarray map 'Electric-buffer-menu-undefined)
                    154:     (define-key map "\e" (make-keymap))
                    155:     (fillarray (lookup-key map "\e") 'Electric-buffer-menu-undefined)
                    156:     (define-key map "\C-z" 'suspend-emacs)
                    157:     (define-key map "v" 'Electric-buffer-menu-mode-view-buffer)
                    158:     (define-key map "\C-h" 'Helper-help)
                    159:     (define-key map "?" 'Helper-describe-bindings)
                    160:     (define-key map "\C-c" nil)
                    161:     (define-key map "\C-c\C-c" 'Electric-buffer-menu-quit)
                    162:     (define-key map "\C-]" 'Electric-buffer-menu-quit)
                    163:     (define-key map "q" 'Electric-buffer-menu-quit)
                    164:     (define-key map " " 'Electric-buffer-menu-select)  
                    165:     (define-key map "\C-l" 'recenter)
                    166:     (define-key map "s" 'Buffer-menu-save)
                    167:     (define-key map "d" 'Buffer-menu-delete)
                    168:     (define-key map "k" 'Buffer-menu-delete)
                    169:     (define-key map "\C-d" 'Buffer-menu-delete-backwards)
                    170:     ;(define-key map "\C-k" 'Buffer-menu-delete)
                    171:     (define-key map "\177" 'Buffer-menu-backup-unmark)
                    172:     (define-key map "~" 'Buffer-menu-not-modified)
                    173:     (define-key map "u" 'Buffer-menu-unmark)
                    174:     (let ((i ?0))
                    175:       (while (<= i ?9)
                    176:        (define-key map (char-to-string i) 'digit-argument)
                    177:        (define-key map (concat "\e" (char-to-string i)) 'digit-argument)
                    178:        (setq i (1+ i))))
                    179:     (define-key map "-" 'negative-argument)
                    180:     (define-key map "\e-" 'negative-argument)
                    181:     (define-key map "m" 'Buffer-menu-mark)
                    182:     (define-key map "\C-u" 'universal-argument)
                    183:     (define-key map "\C-p" 'previous-line)
                    184:     (define-key map "\C-n" 'next-line)
                    185:     (define-key map "p" 'previous-line)
                    186:     (define-key map "n" 'next-line)
                    187:     (define-key map "\C-v" 'scroll-up)
                    188:     (define-key map "\ev" 'scroll-down)
                    189:     (define-key map "\e\C-v" 'scroll-other-window)
                    190:     (define-key map "\e>" 'end-of-buffer)
                    191:     (define-key map "\e<" 'beginning-of-buffer)
                    192:     (setq electric-buffer-menu-mode-map map)))
                    193:  
                    194: (defun Electric-buffer-menu-exit ()
                    195:   (interactive)
                    196:   (setq unread-command-char last-input-char)
                    197:   ;; for robustness
                    198:   (condition-case ()
                    199:       (throw 'electric-buffer-menu-select nil)
                    200:     (error (Buffer-menu-mode)
                    201:           (other-buffer))))
                    202: 
                    203: (defun Electric-buffer-menu-select ()
                    204:   "Leave Electric Buffer Menu, selecting buffers and executing changes.
                    205: Saves buffers marked \"S\".  Deletes buffers marked \"K\".
                    206: Selects buffer at point and displays buffers marked \">\" in other
                    207: windows."
                    208:   (interactive)
                    209:   (throw 'electric-buffer-menu-select (point)))
                    210: 
                    211: (defun Electric-buffer-menu-quit ()
                    212:   "Leave Electric Buffer Menu, restoring previous window configuration.
                    213: Does not execute select, save, or delete commands."
                    214:   (interactive)
                    215:   (throw 'electric-buffer-menu-select nil))
                    216: 
                    217: (defun Electric-buffer-menu-undefined ()
                    218:   (interactive)
                    219:   (ding)
                    220:   (message (if (and (eq (key-binding "\C-c\C-c") 'Electric-buffer-menu-quit)
                    221:                    (eq (key-binding " ") 'Electric-buffer-menu-select)
                    222:                    (eq (key-binding "\C-h") 'Helper-help)
                    223:                    (eq (key-binding "?") 'Helper-describe-bindings))
                    224:               "Type C-c C-c to exit, Space to select, C-h for help, ? for commands"
                    225:             (substitute-command-keys "\
                    226: Type \\[Electric-buffer-menu-quit] to exit, \
                    227: \\[Electric-buffer-menu-select] to select, \
                    228: \\[Helper-help] for help, \\[Helper-describe-bindings] for commands.")))
                    229:   (sit-for 4))
                    230: 
                    231: (defun Electric-buffer-menu-mode-view-buffer ()
                    232:   "View buffer on current line in Electric Buffer Menu.
                    233: Returns to Electric Buffer Menu when done."
                    234:   (interactive)
                    235:   (let ((bufnam (Buffer-menu-buffer nil)))
                    236:     (if bufnam
                    237:        (view-buffer bufnam)
                    238:       (ding)
                    239:       (message "Buffer %s does not exist!" bufnam)
                    240:       (sit-for 4))))
                    241: 
                    242: 
                    243: 
                    244: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.