Annotation of 43BSD/contrib/emacs/lisp/ebuff-menu.el, revision 1.1

1.1     ! root        1: ; buggestions to mly@mit-mc
        !             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 Richard M. Stallman.
        !             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: 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 is killed.
        !            37: 
        !            38: Otherwise, one may use \\[next-line] and \\[previous-line] to move around in the buffer list window
        !            39: and select a buffer by typing Space when the cursor is on the
        !            40: appropriate line of the buffer-list window.
        !            41: Other commands are much like those of buffer-menu-mode.
        !            42: 
        !            43: Calls value of  electric-buffer-menu-mode-hook  on entry if non-nil.
        !            44: Calls value of  after-electric-buffer-menu  on exit (select) if non-nil.
        !            45: 
        !            46: \\{Electric-buffer-menu-mode-map}" 
        !            47:   (interactive "P")
        !            48:   (let ((Helper-return-blurb "return to buffer editing")
        !            49:        (Helper-major-mode 'electric-buffer-menu-mode)
        !            50:        (Helper-mode-name "Electric Buffer Menu")
        !            51:        (goal-column)
        !            52:        (select)
        !            53:        (buffer))
        !            54:     (save-window-excursion
        !            55:       (save-window-excursion (list-buffers arg))
        !            56:       (setq buffer (window-buffer (Electric-pop-up-window "*Buffer List*")))
        !            57:       (unwind-protect
        !            58:          (progn
        !            59:            (set-buffer buffer)
        !            60:            (electric-buffer-menu-mode)
        !            61:            (setq select
        !            62:                  (catch 'electric-buffer-menu-select
        !            63:                    (let ((first (progn (goto-char (point-min))
        !            64:                                        (forward-line 2)
        !            65:                                        (point)))
        !            66:                          (last (progn (goto-char (point-max))
        !            67:                                       (forward-line -1)
        !            68:                                       (point))))
        !            69:                      (goto-char first)
        !            70:                      (Electric-command-loop 'electric-buffer-menu-select
        !            71:                                             nil
        !            72:                                             t
        !            73:                                             'Electric-buffer-menu-looper
        !            74:                                             (cons first last))))))
        !            75:        (set-buffer buffer)
        !            76:        (Buffer-menu-mode)
        !            77:        (or select (bury-buffer buffer))
        !            78:        (message "")))
        !            79:     (if select
        !            80:        (progn (set-buffer buffer)
        !            81:               (set-mark select)        ; Buffer-menu-execute changes things.
        !            82:               (Buffer-menu-execute)
        !            83:               (goto-char (mark))
        !            84:               (Buffer-menu-select)
        !            85:               (and (boundp 'after-electric-buffer-menu)
        !            86:                    after-electric-buffer-menu
        !            87:                    (funcall after-electric-buffer-menu))))))
        !            88: 
        !            89: (defun Electric-buffer-menu-looper (state conditions)
        !            90:   (cond ((and conditions
        !            91:              (not (memq (car conditions)
        !            92:                         '(buffer-read-only
        !            93:                           end-of-buffer beginning-of-buffer))))
        !            94:         (signal (car conditions) (cdr conditions)))
        !            95:        ((< (point) (car state))
        !            96:         (Electric-buffer-menu-beginning))
        !            97:        ((> (point) (cdr state))
        !            98:         (Electric-buffer-menu-end))))
        !            99: 
        !           100: (defun electric-buffer-menu-mode ()
        !           101:   "Major mode for editing a list of buffers.
        !           102: Each line describes one of the buffers in Emacs.
        !           103: Letters do not insert themselves; instead, they are commands.
        !           104: C-g or C-c C-c -- exit buffer menu, returning to previous window and buffer
        !           105:   configuration.  If the very first character typed is a space, it
        !           106:   also has this effect.
        !           107: Space -- select buffer of line point is on.
        !           108:   Also show buffers marked with m in other windows,
        !           109:   kills buffers marked with k, and saves those marked with s.
        !           110: m -- mark buffer to be displayed.
        !           111: ~ -- clear modified-flag on that buffer.
        !           112: s -- mark that buffer to be saved.
        !           113: d or k or C-d or C-k -- mark that buffer to be killed.
        !           114: u -- remove all kinds of marks from current line.
        !           115: v -- view buffer, returning when done.
        !           116: Delete -- back up a line and remove marks.
        !           117: \\{Electric-buffer-menu-mode-map}
        !           118: Entry to this mode via command \\[electric-buffer-list] calls the value of
        !           119: electric-buffer-menu-mode-hook if it is non-nil.  The value of
        !           120: after-electric-buffer-menu is called on exit (when a selection is made)
        !           121: if it is non-nil."
        !           122:   (kill-all-local-variables)
        !           123:   (use-local-map Electric-buffer-menu-mode-map)
        !           124:   (setq mode-line-format "-- Electric Buffer List   %M   %[%]----%3p-%-")
        !           125:   (setq truncate-lines t)
        !           126:   (setq buffer-read-only t)
        !           127:   (setq major-mode 'electric-buffer-menu-mode)
        !           128:   (setq mode-name "Electric Buffer Menu")
        !           129:   (run-hooks 'electric-buffer-menu-mode-hook))
        !           130: 
        !           131: ;; generally the same as Buffer-menu-mode-map (except we don't indirect)
        !           132: (put 'Electric-buffer-menu-undefined 'suppress-keymap t)
        !           133: (if Electric-buffer-menu-mode-map
        !           134:     nil
        !           135:   (let ((map (make-keymap)))
        !           136:     (fillarray map 'Electric-buffer-menu-undefined)
        !           137:     (define-key map "\e" (make-keymap))
        !           138:     (fillarray (lookup-key map "\e") 'Electric-buffer-menu-undefined)
        !           139:     (define-key map "\C-z" 'suspend-emacs)
        !           140:     (define-key map "v" 'Electric-buffer-menu-mode-view-buffer)
        !           141:     (define-key map "\C-h" 'Helper-help)
        !           142:     (define-key map "?" 'Helper-describe-bindings)
        !           143:     (define-key map "\C-c" nil)
        !           144:     (define-key map "\C-c\C-c" 'Electric-buffer-menu-quit)
        !           145:     (define-key map "\C-]" 'Electric-buffer-menu-quit)
        !           146:     (define-key map "q" 'Electric-buffer-menu-quit)
        !           147:     (define-key map " " 'Electric-buffer-menu-select)  
        !           148:     (define-key map "\C-l" 'recenter)
        !           149:     (define-key map "s" 'Buffer-menu-save)
        !           150:     (define-key map "d" 'Buffer-menu-kill)
        !           151:     (define-key map "k" 'Buffer-menu-kill)
        !           152:     (define-key map "\C-d" 'Buffer-menu-kill)
        !           153:     (define-key map "\C-k" 'Buffer-menu-kill)
        !           154:     (define-key map "\177" 'Buffer-menu-backup-unmark)
        !           155:     (define-key map "~" 'Buffer-menu-not-modified)
        !           156:     (define-key map "u" 'Buffer-menu-unmark)
        !           157:     (let ((i ?0))
        !           158:       (while (<= i ?9)
        !           159:        (define-key map (char-to-string i) 'digit-argument)
        !           160:        (define-key map (concat "\e" (char-to-string i)) 'digit-argument)
        !           161:        (setq i (1+ i))))
        !           162:     (define-key map "-" 'negative-argument)
        !           163:     (define-key map "\e-" 'negative-argument)
        !           164:     (define-key map "m" 'Buffer-menu-mark)
        !           165:     (define-key map "\C-u" 'universal-argument)
        !           166:     (define-key map "\C-p" 'previous-line)
        !           167:     (define-key map "\C-n" 'next-line)
        !           168:     (define-key map "\C-v" 'scroll-up)
        !           169:     (define-key map "\ev" 'scroll-down)
        !           170:     (define-key map "\e\C-v" 'scroll-other-window)
        !           171:     (define-key map "\e>" 'Electric-buffer-menu-end)
        !           172:     (define-key map "\e<" 'Electric-buffer-menu-beginning)
        !           173:     (setq Electric-buffer-menu-mode-map map)))
        !           174:  
        !           175: (defun Electric-buffer-menu-exit ()
        !           176:   (interactive)
        !           177:   (setq unread-command-char last-input-char)
        !           178:   ;; for robustness
        !           179:   (condition-case ()
        !           180:       (throw 'electric-buffer-menu-select nil)
        !           181:     (error (Buffer-menu-mode)
        !           182:           (other-buffer))))
        !           183: 
        !           184: (defun Electric-buffer-menu-select ()
        !           185:   "Leave Electric Buffer Menu, selecting buffers and executing changes.
        !           186: Saves buffers marked `S'.  Kills buffers marked `K'.
        !           187: Selects buffer at point and displays buffers marked `>' in other
        !           188: windows."
        !           189:   (interactive)
        !           190:   (throw 'electric-buffer-menu-select (point)))
        !           191: 
        !           192: (defun Electric-buffer-menu-quit ()
        !           193:   "Leave Electric Buffer Menu, restoring previous window configuration.
        !           194: Does not execute select, save, or kill commands."
        !           195:   (interactive)
        !           196:   (throw 'electric-buffer-menu-select nil))
        !           197: 
        !           198: (defun Electric-buffer-menu-undefined ()
        !           199:   (interactive)
        !           200:   (ding)
        !           201:   (message (if (and (eq (key-binding "\C-c\C-c") 'Electric-buffer-menu-quit)
        !           202:                    (eq (key-binding " ") 'Electric-buffer-menu-select)
        !           203:                    (eq (key-binding "\C-h") 'Helper-help)
        !           204:                    (eq (key-binding "?") 'Helper-describe-bindings))
        !           205:               "Type C-c C-c to exit, Space to select, C-h for help, ? for commands"
        !           206:             (substitute-command-keys "\
        !           207: Type \\[Electric-buffer-menu-quit] to exit, \
        !           208: \\[Electric-buffer-menu-select] to select, \
        !           209: \\[Helper-help] for help, \\[Helper-describe-bindings] for commands.")))
        !           210:   (sit-for 4))
        !           211: 
        !           212: (defun Electric-buffer-menu-beginning ()
        !           213:   "Move to the first buffer description in Electric Buffer Menu."
        !           214:   (interactive)
        !           215:   (goto-char (point-min))
        !           216:   (forward-line 2))
        !           217: 
        !           218: (defun Electric-buffer-menu-end ()
        !           219:   "Move to the last buffer description in Electric Buffer Menu."
        !           220:   (interactive)
        !           221:   (goto-char (point-max))
        !           222:   (forward-line -1)
        !           223:   (if (not (pos-visible-in-window-p (point-max)))
        !           224:       (recenter (1- (/ (window-height (selected-window)) 2)))))
        !           225: 
        !           226: (defun Electric-buffer-menu-mode-view-buffer ()
        !           227:   "View buffer on current line in Electric Buffer Menu.
        !           228: Returns to Electric Buffer Menu when done."
        !           229:   (interactive)
        !           230:   (let ((bufnam (Buffer-menu-buffer nil)))
        !           231:     (if bufnam
        !           232:        (view-buffer bufnam)
        !           233:       (ding)
        !           234:       (message "Buffer %s does not exist!" bufnam)
        !           235:       (sit-for 4))))
        !           236: 
        !           237: 
        !           238: 
        !           239: 

unix.superglobalmegacorp.com

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