summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2013-08-13 09:59:47 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2013-08-13 09:59:47 -0400
commit5bc05dfa5aad4e92ad8f996ecd78c4e16bc79c0e (patch)
tree05f9481e529d0987e9106e4def2f2cd4fc0654eb
parentdbb5d60608ae6b99910b0c374f82b63fde526abf (diff)
downloademacs-5bc05dfa5aad4e92ad8f996ecd78c4e16bc79c0e.tar.gz
* eldoc-eval.el (eldoc-display-message-no-interference-p): Force
old definition. (eldoc-mode-in-minibuffer): Catch errors, run eldoc-in-minibuffer-show-fn from the minibuffer.
-rw-r--r--packages/eldoc-eval/eldoc-eval.el44
1 files changed, 33 insertions, 11 deletions
diff --git a/packages/eldoc-eval/eldoc-eval.el b/packages/eldoc-eval/eldoc-eval.el
index 6d20da2413d..cace999a789 100644
--- a/packages/eldoc-eval/eldoc-eval.el
+++ b/packages/eldoc-eval/eldoc-eval.el
@@ -76,6 +76,23 @@ Should take one arg: the string to display"
:group 'lisp
:type 'boolean)
+;;; Compatibility with Emacs-24.4
+;; New implementation of eldoc in minibuffer that come
+;; with Emacs-24.4 show the eldoc info of current-buffer while
+;; minibuffer is in use, disable this and inline old Emacs behavior.
+
+(when (boundp 'eldoc-message-function)
+ (setq eldoc-message-function 'message)
+
+ (defun eldoc-display-message-no-interference-p ()
+ (and eldoc-mode
+ (not executing-kbd-macro)
+ (not (and (boundp 'edebug-active) edebug-active))
+ ;; Having this mode operate in an active minibuffer/echo area causes
+ ;; interference with what's going on there.
+ (not cursor-in-echo-area)
+ (not (eq (selected-window) (minibuffer-window))))))
+
;; Internal.
(defvar eldoc-active-minibuffers-list nil
"List of active minibuffers with eldoc enabled.")
@@ -149,20 +166,25 @@ See `with-eldoc-in-minibuffer'."
(defun eldoc-mode-in-minibuffer ()
"Show eldoc for current minibuffer input."
- (let ((buf (window-buffer (minibuffer-window))))
+ (let ((buf (buffer-name (window-buffer (active-minibuffer-window)))))
;; If this minibuffer have been started with
;;`with-eldoc-in-minibuffer' give it eldoc support
;; and update mode-line, otherwise do nothing.
- (when (member buf eldoc-active-minibuffers-list)
- (let* ((sym (with-current-buffer buf
- (unless (looking-back ")\\|\"")
- (forward-char -1))
- (eldoc-current-symbol)))
- (info-fn (eldoc-fnsym-in-current-sexp))
- (doc (or (eldoc-get-var-docstring sym)
- (eldoc-get-fnsym-args-string
- (car info-fn) (cadr info-fn)))))
- (when doc (funcall eldoc-in-minibuffer-show-fn doc))))))
+ (condition-case err
+ (when (member buf eldoc-active-minibuffers-list)
+ (with-current-buffer buf
+ (let* ((sym (save-excursion
+ (unless (looking-back ")\\|\"")
+ (forward-char -1))
+ (eldoc-current-symbol)))
+ (info-fn (eldoc-fnsym-in-current-sexp))
+ (doc (or (eldoc-get-var-docstring sym)
+ (eldoc-get-fnsym-args-string
+ (car info-fn) (cadr info-fn)))))
+ (when doc (funcall eldoc-in-minibuffer-show-fn doc)))))
+ (scan-error nil)
+ (beginning-of-buffer nil)
+ (error (message "Eldoc in minibuffer error: %S" err)))))
(defun eval-expression-with-eldoc ()
"Eval expression with eldoc support in mode-line."