annotate lisp/ehelp.el @ 51151:fe11e703042b

Summary: MIME support added for e-mail processing that skips encoded regions. Allow user to skip saving Fcc messages with large attachments. Fixed region skipping bug with multi-line comments - e.g. tex $ regions spanning multiple lines. Added support for postscript and uuencoded regions. Redundant dictionary file names purged. Dictionary definition field name changed from "Character Set" to "Coding System". Fixed bug in reloading dictionaries. Modified headers to reflect new version. XEmacs menu now adds customize item. (ispell-check-version): No longer an aliased function. Returns library path if not called interactively. Variable `temporary-file-directory' protected if not loaded. (check-ispell-version): Now the alias for `ispell-check-version'. (ispell-message-fcc-skip): New variable that determines if and when to query about saving Fcc copy of message if an attachment is large. (ispell-skip-html): Declared buffer-local. (ispell-local-dictionary-alist): Docstring expanded. Tag name changed from "Character Set" to "Coding System". (ispell-dictionary-alist-1): Removed redundant command-line option to load brasileiro, british, and castellano dictionary files. (ispell-dictionary-alist-2): Removed redundant command-line option to load czech dictionary file. (ispell-dictionary-alist-3): Moved francais-tex here. (ispell-dictionary-alist-4): Removed german and german8 dictionaries. The deutsch ones are the correct definitions. `nederlands' and `nederlands8' dictionaries moved here. (ispell-dictionary-alist-5): `polish' and `portugues' dictionaries moved here. Removed redundant command-line option to `norsk' and `portugues'. (ispell-dictionary-alist-6): Removed redundant command-line option to load `russian' and `slovak' dictionary files. (ispell-dictionary-alist): Tag name changed from "Character Set" to "Coding System". (ispell-version): Updated to 3.6. (ispell-library-directory): Calls non-deprecated function. (ispell-valid-dictionary-list): New function returning all valid dictionaries on machine. (ispell-checking-message): Documentation string improved. (ispell-skip-region-alist): Added uuencoded and postscript region skipping. Improved http/e-mail/file regexp to not match `/.\w'. (ispell-html-skip-alists): New variable for html region support. (ispell-send-string): Removed redundant xemacs check. (ispell-word): Fix spelling error in documentation string, added extent information to support highlighting in ispell-minor-mode. (ispell-command-loop): Disable horizontal scrollbar in XEmacs choices buffer. (ispell-show-choices): Directly select `choices-window'. (ispell-help): Use default buffer size for electric help. (ispell-adjusted-window-height): Correct for xemacs detection. (ispell-start-process): Don't double specify dictionary file name. (ispell-init-process): Set `ispell-library-path' each call. (ispell-change-dictionary): Now only completes valid dictionaries. (ispell-region): Add support for MIME region skipping and Fcc message query for large attachments. (ispell-begin-skip-region-regexp): Add documentation string. Added message support and cleaned up code for generic and html regions. (ispell-begin-skip-region): Function is now requires alist argument. (ispell-begin-tex-skip-regexp): Added comments and support improved html and message regions. (ispell-skip-region-list): New function for MIME and region skipping. (ispell-tex-arg-end): Add documentation string. (ispell-ignore-fcc): New function to query saving Fcc message. (ispell-skip-region): Calculate alist for key match dynamically, html skipping pushed to alists. (ispell-get-line): Add support for multi-line comment regions. (ispell): Check that variables to continue spelling are bound. (ispell-message-text-end): Postscript and uuencoded regions now supported as MIME regions, rather than as end-of-message region. (ispell-mime-multipartp): New function supporting MIME. (ispell-mime-skip-part): New function supporting MIME. (ispell-message): Add MIME support. (ispell-buffer-local-parsing): Variable `ispell-skip-html' now local. (ispell-buffer-local-dict): Fixed bug for detecting and reloading new dictionary.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 22 May 2003 21:34:00 +0000
parents 37645a051842
children 96f6726bae4d d7ddb3e565de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
1 ;;; ehelp.el --- bindings for electric-help mode
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
2
36892
ca2938d86ae9 (electric-help-mode-hook): Add defcustom.
Gerd Moellmann <gerd@gnu.org>
parents: 36240
diff changeset
3 ;; Copyright (C) 1986, 1995, 2000, 2001 Free Software Foundation, Inc.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
4
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
5 ;; Maintainer: FSF
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
6 ;; Keywords: help, extensions
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
7
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
9
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
13 ;; any later version.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
14
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13381
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13381
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13381
diff changeset
23 ;; Boston, MA 02111-1307, USA.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
24
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2027
diff changeset
25 ;;; Commentary:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2027
diff changeset
26
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2027
diff changeset
27 ;; This package provides a pre-packaged `Electric Help Mode' for
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2027
diff changeset
28 ;; browsing on-line help screens. There is one entry point,
12601
ca43eab4d2a6 (electric-helpify): Autoload with-electric-help, electric-helpify.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
29 ;; `with-electric-help'; all you have to give it is a no-argument
4479
9fab557f1e16 Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 3440
diff changeset
30 ;; function that generates the actual text of the help into the current
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2027
diff changeset
31 ;; buffer.
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2027
diff changeset
32
12721
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
33 ;; To make this the default, you must do
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
34 ;; (require 'ehelp)
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
35 ;; (define-key global-map "\C-h" 'ehelp-command)
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
36 ;; (define-key global-map [help] 'ehelp-command)
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
37 ;; (define-key global-map [f1] 'ehelp-command)
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
38
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
39 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
40
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
41 (require 'electric)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
42 (defvar electric-help-map ()
200
74504bd76aaa *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 160
diff changeset
43 "Keymap defining commands available in `electric-help-mode'.")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
44
14474
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
45 (defvar electric-help-form-to-execute nil)
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
46
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
47 (defgroup electric-help ()
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
48 "Electric help facility."
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
49 :version "21.1"
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
50 :group 'help)
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
51
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
52 (defcustom electric-help-shrink-window t
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
53 "If set, adjust help window sizes to buffer sizes when displaying help."
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
54 :type 'boolean
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
55 :group 'electric-help)
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
56
36892
ca2938d86ae9 (electric-help-mode-hook): Add defcustom.
Gerd Moellmann <gerd@gnu.org>
parents: 36240
diff changeset
57 (defcustom electric-help-mode-hook nil
ca2938d86ae9 (electric-help-mode-hook): Add defcustom.
Gerd Moellmann <gerd@gnu.org>
parents: 36240
diff changeset
58 "Hook run by `with-electric-help' after initializing the buffer."
ca2938d86ae9 (electric-help-mode-hook): Add defcustom.
Gerd Moellmann <gerd@gnu.org>
parents: 36240
diff changeset
59 :type 'hook
ca2938d86ae9 (electric-help-mode-hook): Add defcustom.
Gerd Moellmann <gerd@gnu.org>
parents: 36240
diff changeset
60 :group 'electric-help)
ca2938d86ae9 (electric-help-mode-hook): Add defcustom.
Gerd Moellmann <gerd@gnu.org>
parents: 36240
diff changeset
61
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
62 (put 'electric-help-undefined 'suppress-keymap t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
63 (if electric-help-map
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
64 ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
65 (let ((map (make-keymap)))
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
66 ;; allow all non-self-inserting keys - search, scroll, etc, but
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
67 ;; let M-x and C-x exit ehelp mode and retain buffer:
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
68 (suppress-keymap map)
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
69 (define-key map "\C-u" 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
70 (define-key map [?\C-0] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
71 (define-key map [?\C-1] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
72 (define-key map [?\C-2] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
73 (define-key map [?\C-3] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
74 (define-key map [?\C-4] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
75 (define-key map [?\C-5] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
76 (define-key map [?\C-6] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
77 (define-key map [?\C-7] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
78 (define-key map [?\C-8] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
79 (define-key map [?\C-9] 'electric-help-undefined)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
80 (define-key map (char-to-string help-char) 'electric-help-help)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
81 (define-key map "?" 'electric-help-help)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
82 (define-key map " " 'scroll-up)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
83 (define-key map "\^?" 'scroll-down)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
84 (define-key map "." 'beginning-of-buffer)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
85 (define-key map "<" 'beginning-of-buffer)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
86 (define-key map ">" 'end-of-buffer)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
87 ;(define-key map "\C-g" 'electric-help-exit)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
88 (define-key map "q" 'electric-help-exit)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
89 (define-key map "Q" 'electric-help-exit)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
90 ;;a better key than this?
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
91 (define-key map "r" 'electric-help-retain)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
92 (define-key map "R" 'electric-help-retain)
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
93 (define-key map "\ex" 'electric-help-execute-extended)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
94 (define-key map "\C-x" 'electric-help-ctrl-x-prefix)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
95
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
96 (setq electric-help-map map)))
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
97
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
98 (defun electric-help-mode ()
200
74504bd76aaa *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 160
diff changeset
99 "`with-electric-help' temporarily places its buffer in this mode.
74504bd76aaa *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 160
diff changeset
100 \(On exit from `with-electric-help', the buffer is put in `default-major-mode'.)"
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
101 (setq buffer-read-only t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
102 (setq mode-name "Help")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
103 (setq major-mode 'help)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
104 (setq mode-line-buffer-identification '(" Help: %b"))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
105 (use-local-map electric-help-map)
14943
2c44547d2364 (electric-help-mode): Use add-hook mouse-leave-buffer-hook.
Richard M. Stallman <rms@gnu.org>
parents: 14781
diff changeset
106 (add-hook 'mouse-leave-buffer-hook 'electric-help-retain)
14474
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
107 (view-mode -1)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
108 ;; this is done below in with-electric-help
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
109 ;(run-hooks 'electric-help-mode-hook)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
110 )
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
111
12601
ca43eab4d2a6 (electric-helpify): Autoload with-electric-help, electric-helpify.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
112 ;;;###autoload
13381
0cbe99851fab (with-electric-help): Add missing argument MINHEIGHT.
Erik Naggum <erik@naggum.no>
parents: 13261
diff changeset
113 (defun with-electric-help (thunk &optional buffer noerase minheight)
12721
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
114 "Pop up an \"electric\" help buffer.
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
115 The arguments are THUNK &optional BUFFER NOERASE MINHEIGHT.
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
116 THUNK is a function of no arguments which is called to initialize the
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
117 contents of BUFFER. BUFFER defaults to `*Help*'. BUFFER will be
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
118 erased before THUNK is called unless NOERASE is non-nil. THUNK will
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
119 be called while BUFFER is current and with `standard-output' bound to
12721
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
120 the buffer specified by BUFFER.
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
121
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
122 If THUNK returns nil, we display BUFFER starting at the top, and
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
123 shrink the window to fit. If THUNK returns non-nil, we don't do those things.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
124
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
125 After THUNK has been called, this function \"electrically\" pops up a window
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
126 in which BUFFER is displayed and allows the user to scroll through that buffer
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
127 in electric-help-mode. The window's height will be at least MINHEIGHT if
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
128 this value is non-nil.
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
129
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
130 If THUNK returns nil, we display BUFFER starting at the top, and
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
131 shrink the window to fit if `electric-help-shrink-window' is non-nil.
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
132 If THUNK returns non-nil, we don't do those things.
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
133
36240
5432010ffe02 (with-electric-help): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 31792
diff changeset
134 When the user exits (with `electric-help-exit', or otherwise), the help
5432010ffe02 (with-electric-help): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 31792
diff changeset
135 buffer's window disappears (i.e., we use `save-window-excursion'), and
12601
ca43eab4d2a6 (electric-helpify): Autoload with-electric-help, electric-helpify.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
136 BUFFER is put into `default-major-mode' (or `fundamental-mode') when we exit."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
137 (setq buffer (get-buffer-create (or buffer "*Help*")))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
138 (let ((one (one-window-p t))
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
139 (config (current-window-configuration))
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
140 (bury nil)
14474
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
141 (electric-help-form-to-execute nil))
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
142 (unwind-protect
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
143 (save-excursion
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
144 (when one
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
145 (goto-char (window-start (selected-window))))
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
146 (let ((pop-up-windows t))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
147 (pop-to-buffer buffer))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
148 (save-excursion
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
149 (set-buffer buffer)
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
150 (when (and minheight (< (window-height) minheight))
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
151 (enlarge-window (- minheight (window-height))))
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
152 (electric-help-mode)
14781
b4879ed5b5c3 (with-electric-help): Make buffer read-only as last thing.
Richard M. Stallman <rms@gnu.org>
parents: 14474
diff changeset
153 (setq buffer-read-only nil)
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
154 (unless noerase
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
155 (erase-buffer)))
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
156 (let ((standard-output buffer))
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
157 (unless (funcall thunk)
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
158 (set-buffer buffer)
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
159 (set-buffer-modified-p nil)
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
160 (goto-char (point-min))
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
161 (when (and one electric-help-shrink-window)
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
162 (shrink-window-if-larger-than-buffer))))
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
163 (set-buffer buffer)
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
164 (run-hooks 'electric-help-mode-hook)
14781
b4879ed5b5c3 (with-electric-help): Make buffer read-only as last thing.
Richard M. Stallman <rms@gnu.org>
parents: 14474
diff changeset
165 (setq buffer-read-only t)
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
166 (if (eq (car-safe (electric-help-command-loop)) 'retain)
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
167 (setq config (current-window-configuration))
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
168 (setq bury t))
17255
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
169 ;; Remove the hook.
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
170 (when (memq 'electric-help-retain mouse-leave-buffer-hook)
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
171 (remove-hook 'mouse-leave-buffer-hook 'electric-help-retain)))
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
172 (message "")
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
173 (set-buffer buffer)
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
174 (setq buffer-read-only nil)
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
175
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
176 ;; We should really get a usable *Help* buffer when retaining
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
177 ;; the electric one with `r'. The problem is that a simple
36240
5432010ffe02 (with-electric-help): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 31792
diff changeset
178 ;; call to help-mode won't cut it; at least RET is bound wrong
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
179 ;; afterwards. It's also not clear that `help-mode' is always
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
180 ;; the right thing, maybe we should add an optional parameter.
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
181 (condition-case ()
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
182 (funcall (or default-major-mode 'fundamental-mode))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
183 (error nil))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 36892
diff changeset
184
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
185 (set-window-configuration config)
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
186 (when bury
36240
5432010ffe02 (with-electric-help): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 31792
diff changeset
187 ;;>> Perhaps this shouldn't be done,
31792
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
188 ;; so that when we say "Press space to bury" we mean it
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
189 (replace-buffer-in-windows buffer)
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
190 ;; must do this outside of save-window-excursion
bad7093b5361 (electric-help): New defgroup.
Gerd Moellmann <gerd@gnu.org>
parents: 17255
diff changeset
191 (bury-buffer buffer))
14474
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
192 (eval electric-help-form-to-execute))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
193
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
194 (defun electric-help-command-loop ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
195 (catch 'exit
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
196 (if (pos-visible-in-window-p (point-max))
14311
381c7a6d21f6 (electric-help-command-loop): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
197 (progn (message "%s" (substitute-command-keys "<<< Press Space to bury the help buffer, Press \\[electric-help-retain] to retain it >>>"))
3440
bccf04c8a5b6 (electric-help-command-loop): Use equal to compare
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
198 (if (equal (setq unread-command-events (list (read-event)))
bccf04c8a5b6 (electric-help-command-loop): Use equal to compare
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
199 '(?\ ))
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1608
diff changeset
200 (progn (setq unread-command-events nil)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
201 (throw 'exit t)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
202 (let (up down both neither
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
203 (standard (and (eq (key-binding " ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
204 'scroll-up)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
205 (eq (key-binding "\^?")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
206 'scroll-down)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
207 (eq (key-binding "q")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
208 'electric-help-exit)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
209 (eq (key-binding "r")
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
210 'electric-help-retain))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
211 (Electric-command-loop
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
212 'exit
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
213 (function (lambda ()
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 36892
diff changeset
214 (sit-for 0) ;necessary if last command was end-of-buffer or
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 36892
diff changeset
215 ;beginning-of-buffer - otherwise pos-visible-in-window-p
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
216 ;will yield a wrong result.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
217 (let ((min (pos-visible-in-window-p (point-min)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
218 (max (pos-visible-in-window-p (point-max))))
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
219 (cond (isearch-mode 'noprompt)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
220 ((and min max)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
221 (cond (standard "Press q to exit, r to retain ")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
222 (neither)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
223 (t (setq neither (substitute-command-keys "Press \\[electric-help-exit] to exit, \\[electric-help-retain] to retain ")))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
224 (min
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
225 (cond (standard "Press SPC to scroll, q to exit, r to retain ")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
226 (up)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
227 (t (setq up (substitute-command-keys "Press \\[scroll-up] to scroll, \\[electric-help-exit] to exit, \\[electric-help-retain] to retain ")))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
228 (max
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
229 (cond (standard "Press DEL to scroll back, q to exit, r to retain ")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
230 (down)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
231 (t (setq down (substitute-command-keys "Press \\[scroll-down] to scroll back, \\[electric-help-exit] to exit, \\[electric-help-retain] to retain ")))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
232 (t
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
233 (cond (standard "Press SPC to scroll, DEL to scroll back, q to exit, r to retain ")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
234 (both)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
235 (t (setq both (substitute-command-keys "Press \\[scroll-up] to scroll, \\[scroll-down] to scroll back, \\[electric-help-exit] to exit, \\[electric-help-retain] to retain ")))))))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
236 t))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
237
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
238
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
239
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
240 ;(defun electric-help-scroll-up (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
241 ; ">>>Doc"
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
242 ; (interactive "P")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
243 ; (if (and (null arg) (pos-visible-in-window-p (point-max)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
244 ; (electric-help-exit)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
245 ; (scroll-up arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
246
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
247 (defun electric-help-exit ()
17255
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
248 "Exit `electric-help', restoring the previous window/buffer configuration.
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
249 \(The *Help* buffer will be buried.)"
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
250 (interactive)
17255
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
251 ;; Make sure that we don't throw twice, even if two events cause
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
252 ;; calling this function:
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
253 (if (memq 'electric-help-retain mouse-leave-buffer-hook)
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
254 (progn
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
255 (remove-hook 'mouse-leave-buffer-hook 'electric-help-retain)
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
256 (throw 'exit t))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
257
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
258 (defun electric-help-retain ()
200
74504bd76aaa *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 160
diff changeset
259 "Exit `electric-help', retaining the current window/buffer configuration.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
260 \(The *Help* buffer will not be selected, but \\[switch-to-buffer-other-window] RET
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
261 will select it.)"
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
262 (interactive)
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
263 ;; Make sure that we don't throw twice, even if two events cause
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
264 ;; calling this function:
14943
2c44547d2364 (electric-help-mode): Use add-hook mouse-leave-buffer-hook.
Richard M. Stallman <rms@gnu.org>
parents: 14781
diff changeset
265 (if (memq 'electric-help-retain mouse-leave-buffer-hook)
2c44547d2364 (electric-help-mode): Use add-hook mouse-leave-buffer-hook.
Richard M. Stallman <rms@gnu.org>
parents: 14781
diff changeset
266 (progn
2c44547d2364 (electric-help-mode): Use add-hook mouse-leave-buffer-hook.
Richard M. Stallman <rms@gnu.org>
parents: 14781
diff changeset
267 (remove-hook 'mouse-leave-buffer-hook 'electric-help-retain)
2c44547d2364 (electric-help-mode): Use add-hook mouse-leave-buffer-hook.
Richard M. Stallman <rms@gnu.org>
parents: 14781
diff changeset
268 (throw 'exit '(retain)))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
269
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
270
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
271 (defun electric-help-undefined ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
272 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
273 (error "%s is undefined -- Press %s to exit"
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
274 (mapconcat 'single-key-description (this-command-keys) " ")
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
275 (if (eq (key-binding "q") 'electric-help-exit)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
276 "q"
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
277 (substitute-command-keys "\\[electric-help-exit]"))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
278
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
279
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
280 ;>>> this needs to be hairified (recursive help, anybody?)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
281 (defun electric-help-help ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
282 (interactive)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
283 (if (and (eq (key-binding "q") 'electric-help-exit)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
284 (eq (key-binding " ") 'scroll-up)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
285 (eq (key-binding "\^?") 'scroll-down)
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
286 (eq (key-binding "r") 'electric-help-retain))
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
287 (message "SPC scrolls up, DEL scrolls down, q exits burying help buffer, r exits")
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
288 (message "%s" (substitute-command-keys "\\[scroll-up] scrolls up, \\[scroll-down] scrolls down, \\[electric-help-exit] exits burying help buffer, \\[electric-help-retain] exits")))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
289 (sit-for 2))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
290
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
291
12601
ca43eab4d2a6 (electric-helpify): Autoload with-electric-help, electric-helpify.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
292 ;;;###autoload
15310
f1e444468043 (electric-helpify): Allow NAME to be given as arg.
Richard M. Stallman <rms@gnu.org>
parents: 14943
diff changeset
293 (defun electric-helpify (fun &optional name)
f1e444468043 (electric-helpify): Allow NAME to be given as arg.
Richard M. Stallman <rms@gnu.org>
parents: 14943
diff changeset
294 (let ((name (or name "*Help*")))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
295 (if (save-window-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
296 ;; kludge-o-rama
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
297 (let* ((p (symbol-function 'print-help-return-message))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
298 (b (get-buffer name))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
299 (m (buffer-modified-p b)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
300 (and b (not (get-buffer-window b))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
301 (setq b nil))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
302 (unwind-protect
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
303 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
304 (message "%s..." (capitalize (symbol-name fun)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
305 ;; with-output-to-temp-buffer marks the buffer as unmodified.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
306 ;; kludging excessively and relying on that as some sort
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
307 ;; of indication leads to the following abomination...
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
308 ;;>> This would be doable without such icky kludges if either
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
309 ;;>> (a) there were a function to read the interactive
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
310 ;;>> args for a command and return a list of those args.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
311 ;;>> (To which one would then just apply the command)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
312 ;;>> (The only problem with this is that interactive-p
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
313 ;;>> would break, but that is such a misfeature in
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
314 ;;>> any case that I don't care)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
315 ;;>> It is easy to do this for emacs-lisp functions;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
316 ;;>> the only problem is getting the interactive spec
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
317 ;;>> for subrs
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
318 ;;>> (b) there were a function which returned a
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
319 ;;>> modification-tick for a buffer. One could tell
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
320 ;;>> whether a buffer had changed by whether the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
321 ;;>> modification-tick were different.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
322 ;;>> (Presumably there would have to be a way to either
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
323 ;;>> restore the tick to some previous value, or to
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
324 ;;>> suspend updating of the tick in order to allow
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
325 ;;>> things like momentary-string-display)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
326 (and b
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
327 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
328 (set-buffer b)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
329 (set-buffer-modified-p t)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
330 (fset 'print-help-return-message 'ignore)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
331 (call-interactively fun)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
332 (and (get-buffer name)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
333 (get-buffer-window (get-buffer name))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
334 (or (not b)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
335 (not (eq b (get-buffer name)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
336 (not (buffer-modified-p b)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
337 (fset 'print-help-return-message p)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
338 (and b (buffer-name b)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
339 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
340 (set-buffer b)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
341 (set-buffer-modified-p m))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
342 (with-electric-help 'ignore name t))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
343
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
344
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
345
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 36892
diff changeset
346 ;; This is to be bound to M-x in ehelp mode. Retains ehelp buffer and then
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
347 ;; continues with execute-extended-command.
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
348 (defun electric-help-execute-extended (prefixarg)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
349 (interactive "p")
14474
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
350 (setq electric-help-form-to-execute '(execute-extended-command nil))
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
351 (electric-help-retain))
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
352
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
353 ;; This is to be buond to C-x in ehelp mode. Retains ehelp buffer and then
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
354 ;; continues with ctrl-x prefix.
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
355 (defun electric-help-ctrl-x-prefix (prefixarg)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
356 (interactive "p")
14474
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
357 (setq electric-help-form-to-execute '(progn (message nil) (setq unread-command-char ?\C-x)))
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
358 (electric-help-retain))
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
359
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
360
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
361 (defun electric-describe-key ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
362 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
363 (electric-helpify 'describe-key))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
364
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
365 (defun electric-describe-mode ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
366 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
367 (electric-helpify 'describe-mode))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
368
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
369 (defun electric-view-lossage ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
370 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
371 (electric-helpify 'view-lossage))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
372
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
373 ;(defun electric-help-for-help ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
374 ; "See help-for-help"
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
375 ; (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
376 ; )
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
377
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
378 (defun electric-describe-function ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
379 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
380 (electric-helpify 'describe-function))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
381
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
382 (defun electric-describe-variable ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
383 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
384 (electric-helpify 'describe-variable))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
385
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
386 (defun electric-describe-bindings ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
387 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
388 (electric-helpify 'describe-bindings))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
389
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
390 (defun electric-describe-syntax ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
391 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
392 (electric-helpify 'describe-syntax))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
393
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
394 (defun electric-command-apropos ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
395 (interactive)
15310
f1e444468043 (electric-helpify): Allow NAME to be given as arg.
Richard M. Stallman <rms@gnu.org>
parents: 14943
diff changeset
396 (electric-helpify 'command-apropos "*Apropos*"))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
397
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
398 ;(define-key help-map "a" 'electric-command-apropos)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
399
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
400 (defun electric-apropos ()
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
401 (interactive)
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
402 (electric-helpify 'apropos))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
403
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
404
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
405 ;;;; ehelp-map
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
406
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
407 (defvar ehelp-map ())
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
408 (if ehelp-map
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
409 nil
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 36892
diff changeset
410 (let ((map (copy-keymap help-map)))
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
411 (substitute-key-definition 'apropos 'electric-apropos map)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
412 (substitute-key-definition 'command-apropos 'electric-command-apropos map)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
413 (substitute-key-definition 'describe-key 'electric-describe-key map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
414 (substitute-key-definition 'describe-mode 'electric-describe-mode map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
415 (substitute-key-definition 'view-lossage 'electric-view-lossage map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
416 (substitute-key-definition 'describe-function 'electric-describe-function map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
417 (substitute-key-definition 'describe-variable 'electric-describe-variable map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
418 (substitute-key-definition 'describe-bindings 'electric-describe-bindings map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
419 (substitute-key-definition 'describe-syntax 'electric-describe-syntax map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
420
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
421 (setq ehelp-map map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
422 (fset 'ehelp-command map)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
423
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 36892
diff changeset
424 (provide 'ehelp)
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 200
diff changeset
425
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
426 ;;; ehelp.el ends here