Annotation of GNUtools/emacs/lisp/helper.el, revision 1.1

1.1     ! root        1: ;; helper - utility help package for modes which want to provide help
        !             2: ;; without relinquishing control, e.g. `electric' modes.
        !             3: 
        !             4: ;; Copyright (C) 1985 Free Software Foundation, Inc.
        !             5: ;; Principal author K. Shane Hartman
        !             6: 
        !             7: ;; This file is part of GNU Emacs.
        !             8: 
        !             9: ;; GNU Emacs is free software; you can redistribute it and/or modify
        !            10: ;; it under the terms of the GNU General Public License as published by
        !            11: ;; the Free Software Foundation; either version 1, or (at your option)
        !            12: ;; any later version.
        !            13: 
        !            14: ;; GNU Emacs is distributed in the hope that it will be useful,
        !            15: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            16: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            17: ;; GNU General Public License for more details.
        !            18: 
        !            19: ;; You should have received a copy of the GNU General Public License
        !            20: ;; along with GNU Emacs; see the file COPYING.  If not, write to
        !            21: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
        !            22: 
        !            23: 
        !            24: (provide 'helper)                      ; hey, here's a helping hand.
        !            25: 
        !            26: ;; Bind this to a string for <blank> in "... Other keys <blank>".
        !            27: ;; Helper-help uses this to construct help string when scrolling.
        !            28: ;; Defaults to "return"
        !            29: (defvar Helper-return-blurb nil)
        !            30: 
        !            31: ;; Keymap implementation doesn't work too well for non-standard loops.
        !            32: ;; But define it anyway for those who can use it.  Non-standard loops
        !            33: ;; will probably have to use Helper-help.  You can't autoload the
        !            34: ;; keymap either.
        !            35: 
        !            36: 
        !            37: (defvar Helper-help-map nil)
        !            38: (if Helper-help-map
        !            39:     nil
        !            40:   (setq Helper-help-map (make-keymap))
        !            41:   ;(fillarray Helper-help-map 'undefined)
        !            42:   (define-key Helper-help-map "m" 'Helper-describe-mode)
        !            43:   (define-key Helper-help-map "b" 'Helper-describe-bindings)
        !            44:   (define-key Helper-help-map "c" 'Helper-describe-key-briefly)
        !            45:   (define-key Helper-help-map "k" 'Helper-describe-key)
        !            46:   ;(define-key Helper-help-map "f" 'Helper-describe-function)
        !            47:   ;(define-key Helper-help-map "v" 'Helper-describe-variable)
        !            48:   (define-key Helper-help-map "?" 'Helper-help-options)
        !            49:   (define-key Helper-help-map (char-to-string help-char) 'Helper-help-options)
        !            50:   (fset 'Helper-help-map Helper-help-map))
        !            51: 
        !            52: (defun Helper-help-scroller ()
        !            53:   (let ((blurb (or (and (boundp 'Helper-return-blurb)
        !            54:                        Helper-return-blurb)
        !            55:                   "return")))
        !            56:     (save-window-excursion
        !            57:       (goto-char (window-start (selected-window)))
        !            58:       (if (get-buffer-window "*Help*")
        !            59:          (pop-to-buffer "*Help*")
        !            60:        (switch-to-buffer "*Help*"))
        !            61:       (goto-char (point-min))
        !            62:       (let ((continue t) state)
        !            63:        (while continue
        !            64:          (setq state (+ (* 2 (if (pos-visible-in-window-p (point-max)) 1 0))
        !            65:                         (if (pos-visible-in-window-p (point-min)) 1 0)))
        !            66:          (message
        !            67:            (nth state
        !            68:                 '("Space forward, Delete back. Other keys %s"
        !            69:                   "Space scrolls forward. Other keys %s"
        !            70:                   "Delete scrolls back. Other keys %s"
        !            71:                   "Type anything to %s"))
        !            72:            blurb)
        !            73:          (setq continue (read-char))
        !            74:          (cond ((and (memq continue '(?\ ?\C-v)) (< state 2))
        !            75:                 (scroll-up))
        !            76:                ((= continue ?\C-l)
        !            77:                 (recenter))
        !            78:                ((and (= continue ?\177) (zerop (% state 2)))
        !            79:                 (scroll-down))
        !            80:                (t (setq continue nil))))))))
        !            81: 
        !            82: (defun Helper-help-options ()
        !            83:   "Describe help options."
        !            84:   (interactive)
        !            85:   (message "c (key briefly), m (mode), k (key), b (bindings)")
        !            86:   ;(message "c (key briefly), m (mode), k (key), v (variable), f (function)")
        !            87:   (sit-for 4))
        !            88: 
        !            89: (defun Helper-describe-key-briefly (key)
        !            90:   "Briefly describe binding of KEYS."
        !            91:   (interactive "kDescribe key briefly: ")
        !            92:   (describe-key-briefly key)
        !            93:   (sit-for 4))
        !            94: 
        !            95: (defun Helper-describe-key (key)
        !            96:   "Describe binding of KEYS."
        !            97:   (interactive "kDescribe key: ")
        !            98:   (save-window-excursion (describe-key key))
        !            99:   (Helper-help-scroller))
        !           100: 
        !           101: (defun Helper-describe-function ()
        !           102:   "Describe a function.  Name read interactively."
        !           103:   (interactive)
        !           104:   (save-window-excursion (call-interactively 'describe-function))
        !           105:   (Helper-help-scroller))
        !           106: 
        !           107: (defun Helper-describe-variable ()
        !           108:   "Describe a variable.  Name read interactively."
        !           109:   (interactive)
        !           110:   (save-window-excursion (call-interactively 'describe-variable))
        !           111:   (Helper-help-scroller))
        !           112: 
        !           113: (defun Helper-describe-mode ()
        !           114:   "Describe the current mode."
        !           115:   (interactive)
        !           116:   (let ((name mode-name)
        !           117:        (documentation (documentation major-mode)))
        !           118:     (save-excursion
        !           119:       (set-buffer (get-buffer-create "*Help*"))
        !           120:       (erase-buffer)
        !           121:       (insert name " Mode\n" documentation)))
        !           122:   (Helper-help-scroller))
        !           123: 
        !           124: (defun Helper-describe-bindings ()
        !           125:   "Describe local key bindings of current mode."
        !           126:   (interactive)
        !           127:   (message "Making binding list...")
        !           128:   (save-window-excursion (describe-bindings))
        !           129:   (Helper-help-scroller))
        !           130: 
        !           131: (defun Helper-help ()
        !           132:   "Provide help for current mode."
        !           133:   (interactive)
        !           134:   (let ((continue t) c)
        !           135:     (while continue
        !           136:       (message "Help (Type ? for further options)")
        !           137:       (setq c (char-to-string (downcase (read-char))))
        !           138:       (setq c (lookup-key Helper-help-map c))
        !           139:       (cond ((eq c 'Helper-help-options)
        !           140:             (Helper-help-options))
        !           141:            ((commandp c)
        !           142:             (call-interactively c)
        !           143:             (setq continue nil))
        !           144:            (t
        !           145:             (ding)
        !           146:             (setq continue nil))))))
        !           147: 

unix.superglobalmegacorp.com

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