- (setq eldoc-mode-line-rolling-flag (not eldoc-mode-line-rolling-flag)))
-(define-key minibuffer-local-map (kbd "<C-M-right>") 'eldoc-mode-line-toggle-rolling)
-
-(defun eldoc-mode-in-minibuffer ()
- "Show eldoc for current minibuffer input."
+ (if (and eldoc-in-minibuffer-mode
+ (minibuffer-window-active-p (selected-window)))
+ (setq eldoc-mode-line-rolling-flag (not eldoc-mode-line-rolling-flag))
+ (error "No active minibuffer found")))
+
+(defvar eldoc-in-minibuffer-mode-map
+ (let ((map (make-sparse-keymap)))
+ ;; FIXME: Should we use [remap eval-expression] instead?
+ (define-key map (kbd "M-:") 'eldoc-eval-expression)
+ map))
+
+;;;###autoload
+(define-minor-mode eldoc-in-minibuffer-mode
+ "Show eldoc for current minibuffer input."
+ :global t
+ (if eldoc-in-minibuffer-mode
+ (progn
+ (add-hook 'minibuffer-exit-hook
+ (lambda ()
+ (setq eldoc-mode-line-rolling-flag nil)))
+ (and (boundp 'eldoc-message-function)
+ (setq eldoc-message-function 'message))
+ (define-key minibuffer-local-map (kbd "C-@")
+ 'eldoc-mode-line-toggle-rolling)
+ (setq eldoc-minor-mode-string " Eldoc-eval"))
+ (setq eldoc-minor-mode-string " Eldoc")
+ (and (boundp 'eldoc-message-function)
+ (setq eldoc-message-function eldoc-eval--old-message-function))
+ (define-key minibuffer-local-map (kbd "C-@") 'set-mark-command)))
+
+(defun eldoc-run-in-minibuffer ()