Annotation of 43BSDReno/contrib/emacs-18.55/lisp/ebuff-menu.el, revision 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.