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

unix.superglobalmegacorp.com

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