summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorJuri Linkov <juri@jurta.org>2010-04-03 02:01:22 +0300
committerJuri Linkov <juri@jurta.org>2010-04-03 02:01:22 +0300
commit9c13a46e078433f59c6e7e0532c13a1fa3340ec9 (patch)
tree11116b05d58b10566c6c4805306c28e4d82d47ec /lisp
parentdbb5e44a980a786d1f581faab81ad7830520a650 (diff)
downloademacs-9c13a46e078433f59c6e7e0532c13a1fa3340ec9.tar.gz
* ehelp.el (electric-help-orig-major-mode): New buffer-local variable.
(electric-help-mode): Set it to original major-mode. Doc fix. (with-electric-help): Use `electric-help-orig-major-mode' instead of (default-value 'major-mode). Doc fix. http://lists.gnu.org/archive/html/emacs-devel/2010-04/msg00069.html
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog9
-rw-r--r--lisp/ehelp.el20
2 files changed, 23 insertions, 6 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d402a57b1a8..83f666881d6 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,12 @@
+2010-04-02 Juri Linkov <juri@jurta.org>
+
+ * ehelp.el (electric-help-orig-major-mode):
+ New buffer-local variable.
+ (electric-help-mode): Set it to original major-mode. Doc fix.
+ (with-electric-help): Use `electric-help-orig-major-mode' instead
+ of (default-value 'major-mode). Doc fix.
+ http://lists.gnu.org/archive/html/emacs-devel/2010-04/msg00069.html
+
2010-04-02 Sam Steingold <sds@gnu.org>
* vc-hg.el (vc-hg-push, vc-hg-pull): Use `apply' when calling
diff --git a/lisp/ehelp.el b/lisp/ehelp.el
index 7de4fd0ba63..63ec3838d32 100644
--- a/lisp/ehelp.el
+++ b/lisp/ehelp.el
@@ -94,10 +94,14 @@
map)
"Keymap defining commands available in `electric-help-mode'.")
+(defvar electric-help-orig-major-mode nil)
+(make-variable-buffer-local 'electric-help-orig-major-mode)
+
(defun electric-help-mode ()
"`with-electric-help' temporarily places its buffer in this mode.
-\(On exit from `with-electric-help', the buffer is put in default `major-mode'.)"
+\(On exit from `with-electric-help', the original `major-mode' is restored.)"
(setq buffer-read-only t)
+ (setq electric-help-orig-major-mode major-mode)
(setq mode-name "Help")
(setq major-mode 'help)
(setq mode-line-buffer-identification '(" Help: %b"))
@@ -131,7 +135,7 @@ If THUNK returns non-nil, we don't do those things.
When the user exits (with `electric-help-exit', or otherwise), the help
buffer's window disappears (i.e., we use `save-window-excursion'), and
-BUFFER is put into default `major-mode' (or `fundamental-mode')."
+BUFFER is put back into its original major mode."
(setq buffer (get-buffer-create (or buffer "*Help*")))
(let ((one (one-window-p t))
(config (current-window-configuration))
@@ -170,13 +174,17 @@ BUFFER is put into default `major-mode' (or `fundamental-mode')."
(set-buffer buffer)
(setq buffer-read-only nil)
+ ;; Restore the original major mode saved by `electric-help-mode'.
;; We should really get a usable *Help* buffer when retaining
;; the electric one with `r'. The problem is that a simple
- ;; call to help-mode won't cut it; at least RET is bound wrong
- ;; afterwards. It's also not clear that `help-mode' is always
- ;; the right thing, maybe we should add an optional parameter.
+ ;; call to `help-mode' won't cut it; e.g. RET is bound wrong
+ ;; afterwards (`View-scroll-line-forward' instead of `help-follow').
+ ;; That's because Help mode should be set with `with-help-window'
+ ;; instead of the direct call to `help-mode'. But at least
+ ;; RET works correctly on links after using `help-mode'.
+ ;; This is satisfactory enough.
(condition-case ()
- (funcall (or (default-value 'major-mode) 'fundamental-mode))
+ (funcall (or electric-help-orig-major-mode 'fundamental-mode))
(error nil))
(set-window-configuration config)