From 9c13a46e078433f59c6e7e0532c13a1fa3340ec9 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Sat, 3 Apr 2010 02:01:22 +0300 Subject: [PATCH] * 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 --- lisp/ChangeLog | 9 +++++++++ lisp/ehelp.el | 20 ++++++++++++++------ 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 + + * 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 * 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) -- 2.11.4.GIT