annotate lisp/ehelp.el @ 26059:2a7f35e0072b

(Fminibuffer_complete_and_exit): Supply value for new ESCAPE_FROM_EDGE parameter to Ffield_beginning. (Fminibuffer_complete_word): Use Ffield_beginning to find the prompt end. (Fminibuffer_complete_and_exit): Test for an empty input string by seeing where the field begins, instead of looking at text-properties. (read_minibuf): Don't save minibuffer prompt length on minibuf_save_list. Don't initialize minibuffer prompt length. Wrap prompt text-properties around the entire prompt. Add 'prompt text-property to prompt. Get final value with Ffield_string instead of make_buffer_string. (read_minibuf_unwind): Don't restore minibuffer prompt length from minibuf_save_list. (do_completion): Get minibuffer input with Ffield_string instead of Fbuffer_string. Erase minibuffer input with Ferase_field instead of erase_buffer. (Fminibuffer_complete_and_exit): Likewise. Test whether buffer is empty by looking for the 'prompt text property at the end. Set prompt length by looking for the end of the prompt text property, and save prompt length for later use (since there is no longer a buffer variable to get it from). (Fminibuffer_prompt_width, Fminibuffer_prompt_end): Functions removed. (syms_of_minibuf): Remove initializations of Sminibuffer_prompt_width and Sminibuffer_prompt_end.
author Gerd Moellmann <gerd@gnu.org>
date Sun, 17 Oct 1999 12:55:49 +0000
parents 30b7f4899d66
children bad7093b5361
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
11234
4d2a2fe1d8d7 Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 10740
diff changeset
3 ;; Copyright (C) 1986, 1995 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
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
47 (put 'electric-help-undefined 'suppress-keymap t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
48 (if electric-help-map
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
49 ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
50 (let ((map (make-keymap)))
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
51 ;; allow all non-self-inserting keys - search, scroll, etc, but
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
52 ;; 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
53 (suppress-keymap map)
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
54 (define-key map "\C-u" 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
55 (define-key map [?\C-0] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
56 (define-key map [?\C-1] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
57 (define-key map [?\C-2] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
58 (define-key map [?\C-3] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
59 (define-key map [?\C-4] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
60 (define-key map [?\C-5] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
61 (define-key map [?\C-6] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
62 (define-key map [?\C-7] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
63 (define-key map [?\C-8] 'electric-help-undefined)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
64 (define-key map [?\C-9] 'electric-help-undefined)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
65 (define-key map (char-to-string help-char) 'electric-help-help)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
66 (define-key map "?" 'electric-help-help)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
67 (define-key map " " 'scroll-up)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
68 (define-key map "\^?" 'scroll-down)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
69 (define-key map "." 'beginning-of-buffer)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
70 (define-key map "<" 'beginning-of-buffer)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
71 (define-key map ">" 'end-of-buffer)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
72 ;(define-key map "\C-g" 'electric-help-exit)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
73 (define-key map "q" 'electric-help-exit)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
74 (define-key map "Q" 'electric-help-exit)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
75 ;;a better key than this?
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
76 (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
77 (define-key map "R" 'electric-help-retain)
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
78 (define-key map "\ex" 'electric-help-execute-extended)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
79 (define-key map "\C-x" 'electric-help-ctrl-x-prefix)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
80
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
81 (setq electric-help-map map)))
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
82
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
83 (defun electric-help-mode ()
200
74504bd76aaa *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 160
diff changeset
84 "`with-electric-help' temporarily places its buffer in this mode.
74504bd76aaa *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 160
diff changeset
85 \(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
86 (setq buffer-read-only t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
87 (setq mode-name "Help")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
88 (setq major-mode 'help)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
89 (setq mode-line-buffer-identification '(" Help: %b"))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
90 (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
91 (add-hook 'mouse-leave-buffer-hook 'electric-help-retain)
14474
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
92 (view-mode -1)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
93 ;; this is done below in with-electric-help
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
94 ;(run-hooks 'electric-help-mode-hook)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
95 )
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
96
12601
ca43eab4d2a6 (electric-helpify): Autoload with-electric-help, electric-helpify.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
97 ;;;###autoload
13381
0cbe99851fab (with-electric-help): Add missing argument MINHEIGHT.
Erik Naggum <erik@naggum.no>
parents: 13261
diff changeset
98 (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
99 "Pop up an \"electric\" help buffer.
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
100 The arguments are THUNK &optional BUFFER NOERASE MINHEIGHT.
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
101 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
102 contents of BUFFER. BUFFER defaults to `*Help*'. BUFFER will be
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
103 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
104 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
105 the buffer specified by BUFFER.
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
106
363b0c8f817d (with-electric-help): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12601
diff changeset
107 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
108 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
109
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
110 After THUNK has been called, this function \"electrically\" pops up a window
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
111 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
112 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
113 this value is non-nil.
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
114
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
115 If THUNK returns nil, we display BUFFER starting at the top, and
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
116 shrink the window to fit. If THUNK returns non-nil, we don't do those
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
117 things.
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
118
200
74504bd76aaa *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 160
diff changeset
119 When the user exits (with `electric-help-exit', or otherwise) the help
74504bd76aaa *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 160
diff changeset
120 buffer's window disappears (i.e., we use `save-window-excursion')
12601
ca43eab4d2a6 (electric-helpify): Autoload with-electric-help, electric-helpify.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
121 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
122 (setq buffer (get-buffer-create (or buffer "*Help*")))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
123 (let ((one (one-window-p t))
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
124 (config (current-window-configuration))
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
125 (bury nil)
14474
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
126 (electric-help-form-to-execute nil))
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
127 (unwind-protect
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
128 (save-excursion
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
129 (if one (goto-char (window-start (selected-window))))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
130 (let ((pop-up-windows t))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
131 (pop-to-buffer buffer))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
132 (save-excursion
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
133 (set-buffer buffer)
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
134 (if (and minheight (< (window-height) minheight))
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
135 (enlarge-window (- minheight (window-height))))
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
136 (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
137 (setq buffer-read-only nil)
14474
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
138 (or noerase
14781
b4879ed5b5c3 (with-electric-help): Make buffer read-only as last thing.
Richard M. Stallman <rms@gnu.org>
parents: 14474
diff changeset
139 (erase-buffer)))
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
140 (let ((standard-output buffer))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
141 (if (not (funcall thunk))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
142 (progn
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
143 (set-buffer buffer)
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
144 (set-buffer-modified-p nil)
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
145 (goto-char (point-min))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
146 (if one (shrink-window-if-larger-than-buffer (selected-window))))))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
147 (set-buffer buffer)
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
148 (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
149 (setq buffer-read-only t)
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
150 (if (eq (car-safe (electric-help-command-loop))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
151 'retain)
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
152 (setq config (current-window-configuration))
17255
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
153 (setq bury t))
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
154 ;; Remove the hook.
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
155 (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
156 (remove-hook 'mouse-leave-buffer-hook 'electric-help-retain)))
160
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
157 (message "")
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
158 (set-buffer buffer)
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
159 (setq buffer-read-only nil)
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
160 (condition-case ()
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
161 (funcall (or default-major-mode 'fundamental-mode))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
162 (error nil))
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
163 (set-window-configuration config)
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
164 (if bury
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
165 (progn
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
166 ;;>> Perhaps this shouldn't be done.
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
167 ;; so that when we say "Press space to bury" we mean it
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
168 (replace-buffer-in-windows buffer)
84efc09a36b4 *** empty log message ***
root <root>
parents: 36
diff changeset
169 ;; must do this outside of save-window-excursion
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
170 (bury-buffer buffer)))
14474
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
171 (eval electric-help-form-to-execute))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
172
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
173 (defun electric-help-command-loop ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
174 (catch 'exit
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
175 (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
176 (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
177 (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
178 '(?\ ))
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1608
diff changeset
179 (progn (setq unread-command-events nil)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
180 (throw 'exit t)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
181 (let (up down both neither
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
182 (standard (and (eq (key-binding " ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
183 'scroll-up)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
184 (eq (key-binding "\^?")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
185 'scroll-down)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
186 (eq (key-binding "q")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
187 'electric-help-exit)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
188 (eq (key-binding "r")
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
189 'electric-help-retain))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
190 (Electric-command-loop
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
191 'exit
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
192 (function (lambda ()
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
193 (sit-for 0) ;necessary if last command was end-of-buffer or
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
194 ;beginning-of-buffer - otherwise pos-visible-in-window-p
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
195 ;will yield a wrong result.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
196 (let ((min (pos-visible-in-window-p (point-min)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
197 (max (pos-visible-in-window-p (point-max))))
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
198 (cond (isearch-mode 'noprompt)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
199 ((and min max)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
200 (cond (standard "Press q to exit, r to retain ")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
201 (neither)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
202 (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
203 (min
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
204 (cond (standard "Press SPC to scroll, q to exit, r to retain ")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
205 (up)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
206 (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
207 (max
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
208 (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
209 (down)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
210 (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
211 (t
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
212 (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
213 (both)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
214 (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
215 t))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
216
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
217
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
218
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
219 ;(defun electric-help-scroll-up (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
220 ; ">>>Doc"
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
221 ; (interactive "P")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
222 ; (if (and (null arg) (pos-visible-in-window-p (point-max)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
223 ; (electric-help-exit)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
224 ; (scroll-up arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
225
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
226 (defun electric-help-exit ()
17255
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
227 "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
228 \(The *Help* buffer will be buried.)"
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
229 (interactive)
17255
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
230 ;; 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
231 ;; calling this function:
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
232 (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
233 (progn
30b7f4899d66 (with-electric-help): Remove hook on exit.
Richard M. Stallman <rms@gnu.org>
parents: 15310
diff changeset
234 (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
235 (throw 'exit t))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
236
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
237 (defun electric-help-retain ()
200
74504bd76aaa *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 160
diff changeset
238 "Exit `electric-help', retaining the current window/buffer configuration.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
239 \(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
240 will select it.)"
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
241 (interactive)
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
242 ;; 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
243 ;; 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
244 (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
245 (progn
2c44547d2364 (electric-help-mode): Use add-hook mouse-leave-buffer-hook.
Richard M. Stallman <rms@gnu.org>
parents: 14781
diff changeset
246 (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
247 (throw 'exit '(retain)))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
248
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
249
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
250 (defun electric-help-undefined ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
251 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
252 (error "%s is undefined -- Press %s to exit"
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
253 (mapconcat 'single-key-description (this-command-keys) " ")
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
254 (if (eq (key-binding "q") 'electric-help-exit)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
255 "q"
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
256 (substitute-command-keys "\\[electric-help-exit]"))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
257
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
258
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
259 ;>>> this needs to be hairified (recursive help, anybody?)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
260 (defun electric-help-help ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
261 (interactive)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
262 (if (and (eq (key-binding "q") 'electric-help-exit)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
263 (eq (key-binding " ") 'scroll-up)
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
264 (eq (key-binding "\^?") 'scroll-down)
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
265 (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
266 (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
267 (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
268 (sit-for 2))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
269
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
270
12601
ca43eab4d2a6 (electric-helpify): Autoload with-electric-help, electric-helpify.
Richard M. Stallman <rms@gnu.org>
parents: 11234
diff changeset
271 ;;;###autoload
15310
f1e444468043 (electric-helpify): Allow NAME to be given as arg.
Richard M. Stallman <rms@gnu.org>
parents: 14943
diff changeset
272 (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
273 (let ((name (or name "*Help*")))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
274 (if (save-window-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
275 ;; kludge-o-rama
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
276 (let* ((p (symbol-function 'print-help-return-message))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
277 (b (get-buffer name))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
278 (m (buffer-modified-p b)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
279 (and b (not (get-buffer-window b))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
280 (setq b nil))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
281 (unwind-protect
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
282 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
283 (message "%s..." (capitalize (symbol-name fun)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
284 ;; with-output-to-temp-buffer marks the buffer as unmodified.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
285 ;; kludging excessively and relying on that as some sort
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
286 ;; of indication leads to the following abomination...
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
287 ;;>> This would be doable without such icky kludges if either
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
288 ;;>> (a) there were a function to read the interactive
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
289 ;;>> args for a command and return a list of those args.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
290 ;;>> (To which one would then just apply the command)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
291 ;;>> (The only problem with this is that interactive-p
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
292 ;;>> would break, but that is such a misfeature in
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
293 ;;>> any case that I don't care)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
294 ;;>> It is easy to do this for emacs-lisp functions;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
295 ;;>> the only problem is getting the interactive spec
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
296 ;;>> for subrs
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
297 ;;>> (b) there were a function which returned a
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
298 ;;>> modification-tick for a buffer. One could tell
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
299 ;;>> whether a buffer had changed by whether the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
300 ;;>> modification-tick were different.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
301 ;;>> (Presumably there would have to be a way to either
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
302 ;;>> restore the tick to some previous value, or to
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
303 ;;>> suspend updating of the tick in order to allow
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
304 ;;>> things like momentary-string-display)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
305 (and b
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
306 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
307 (set-buffer b)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
308 (set-buffer-modified-p t)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
309 (fset 'print-help-return-message 'ignore)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
310 (call-interactively fun)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
311 (and (get-buffer name)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
312 (get-buffer-window (get-buffer name))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
313 (or (not b)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
314 (not (eq b (get-buffer name)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
315 (not (buffer-modified-p b)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
316 (fset 'print-help-return-message p)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
317 (and b (buffer-name b)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
318 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
319 (set-buffer b)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
320 (set-buffer-modified-p m))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
321 (with-electric-help 'ignore name t))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
322
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
323
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
324
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
325 ;; This is to be bound to M-x in ehelp mode. Retains ehelp buffer and then
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
326 ;; continues with execute-extended-command.
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
327 (defun electric-help-execute-extended (prefixarg)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
328 (interactive "p")
14474
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
329 (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
330 (electric-help-retain))
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
331
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
332 ;; 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
333 ;; continues with ctrl-x prefix.
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
334 (defun electric-help-ctrl-x-prefix (prefixarg)
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
335 (interactive "p")
14474
799da4d5aeb7 (with-electric-help):
Richard M. Stallman <rms@gnu.org>
parents: 14311
diff changeset
336 (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
337 (electric-help-retain))
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
338
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
339
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
340 (defun electric-describe-key ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
341 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
342 (electric-helpify 'describe-key))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
343
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
344 (defun electric-describe-mode ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
345 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
346 (electric-helpify 'describe-mode))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
347
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
348 (defun electric-view-lossage ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
349 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
350 (electric-helpify 'view-lossage))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
351
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
352 ;(defun electric-help-for-help ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
353 ; "See help-for-help"
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
354 ; (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
355 ; )
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
356
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
357 (defun electric-describe-function ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
358 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
359 (electric-helpify 'describe-function))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
360
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
361 (defun electric-describe-variable ()
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-variable))
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-bindings ()
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-bindings))
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-describe-syntax ()
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 'describe-syntax))
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-command-apropos ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
374 (interactive)
15310
f1e444468043 (electric-helpify): Allow NAME to be given as arg.
Richard M. Stallman <rms@gnu.org>
parents: 14943
diff changeset
375 (electric-helpify 'command-apropos "*Apropos*"))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
376
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
377 ;(define-key help-map "a" 'electric-command-apropos)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
378
10740
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
379 (defun electric-apropos ()
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
380 (interactive)
45c4759f286e (electric-help-help, electric-help-command-loop):
Richard M. Stallman <rms@gnu.org>
parents: 4479
diff changeset
381 (electric-helpify 'apropos))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
382
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
383
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
384 ;;;; ehelp-map
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
385
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
386 (defvar ehelp-map ())
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
387 (if ehelp-map
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
388 nil
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
389 (let ((map (copy-keymap help-map)))
13261
0d673f6c334e Fix key bindings.
Richard M. Stallman <rms@gnu.org>
parents: 12721
diff changeset
390 (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
391 (substitute-key-definition 'command-apropos 'electric-command-apropos map)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
392 (substitute-key-definition 'describe-key 'electric-describe-key map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
393 (substitute-key-definition 'describe-mode 'electric-describe-mode map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
394 (substitute-key-definition 'view-lossage 'electric-view-lossage map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
395 (substitute-key-definition 'describe-function 'electric-describe-function map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
396 (substitute-key-definition 'describe-variable 'electric-describe-variable map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
397 (substitute-key-definition 'describe-bindings 'electric-describe-bindings map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
398 (substitute-key-definition 'describe-syntax 'electric-describe-syntax map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
399
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
400 (setq ehelp-map map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
401 (fset 'ehelp-command map)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
402
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 200
diff changeset
403 (provide 'ehelp)
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 200
diff changeset
404
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
405 ;;; ehelp.el ends here