From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Leo Newsgroups: gmane.emacs.devel Subject: Re: eldoc support with M-: Date: Wed, 05 Oct 2011 17:20:58 +0800 Message-ID: References: <87liy3t6rk.fsf@gmail.com> <20110519.175536.23311605.rubikitch@ruby-lang.org> <87hb8rt4ha.fsf@gmail.com> <87liw5z8sl.fsf@gmail.com> <87aabj82sq.fsf@gmail.com> <87vcsazaia.fsf@gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: dough.gmane.org 1317806500 29246 80.91.229.12 (5 Oct 2011 09:21:40 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 5 Oct 2011 09:21:40 +0000 (UTC) Cc: Thierry Volpiatto , emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Oct 05 11:21:33 2011 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1RBNfL-0004wF-AL for ged-emacs-devel@m.gmane.org; Wed, 05 Oct 2011 11:21:27 +0200 Original-Received: from localhost ([::1]:57128 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RBNfK-00038w-Md for ged-emacs-devel@m.gmane.org; Wed, 05 Oct 2011 05:21:26 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:56263) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RBNfH-00030S-5B for emacs-devel@gnu.org; Wed, 05 Oct 2011 05:21:24 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RBNfG-00007Q-05 for emacs-devel@gnu.org; Wed, 05 Oct 2011 05:21:23 -0400 Original-Received: from mail-yx0-f169.google.com ([209.85.213.169]:36859) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RBNfF-00007E-SO for emacs-devel@gnu.org; Wed, 05 Oct 2011 05:21:21 -0400 Original-Received: by yxi19 with SMTP id 19so1626990yxi.0 for ; Wed, 05 Oct 2011 02:21:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:cc:subject:references:face:date:in-reply-to:message-id :user-agent:mime-version:content-type; bh=gLx1gLfPA8eezs8tEawpHfbeAVXf7g5dU2jlOUQ0yOc=; b=QOkafVAkPeDpCm0pBuHwrfVtUpCiOy/GHMbUiD5mx2QSrp5VbEFc8R1k7i77I+BMMB bAFLzYtX7Y4vZbr/D9tKFbEjKXBp24f7quwPuboMhzbgkPSCgg/TeCyHIqh+5gtcQk3Q +83yZHTu6Sl8E4KloqvLjVgyjx2HdeP1AiQ/Q= Original-Received: by 10.68.29.228 with SMTP id n4mr17106484pbh.64.1317806480412; Wed, 05 Oct 2011 02:21:20 -0700 (PDT) Original-Received: from Victoria.local ([218.6.53.163]) by mx.google.com with ESMTPS id ki1sm5568263pbb.3.2011.10.05.02.21.14 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 05 Oct 2011 02:21:18 -0700 (PDT) Face: iVBORw0KGgoAAAANSUhEUgAAACgAAAAoBAMAAAB+0KVeAAAAG1BMVEUAAAA9Cgm3Hx1WWFWA gn+WmJWsrqv4+vcCAwCRl2MkAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAYoA AAGKATOXMFgAAAAHdElNRQfXAQwDNR+ZJmElAAABIklEQVQoz22SPW+DQAyGWUq65qasd9PNUSX4 AZHK2C1rJy5jpDS4IwRVup9dn7GNafpKIPPgzztXFSujqq1eM2n8h22oMkvxI/i9C97kRfMRUN55 dS3BrsAwBXUtMLAO4lryh8kTjOxKpQNniNxAgZOEe4bZwsDTFhKdqZRLNII4OQNHhEuq/RMkm6Cj TnnEA/fk0BorcYn5qA3oaeAxbaBOLrX+9G48NZ2Fzc2tzDM8Q+tMypEOqYHh8mAWaaK3U/cDMOT5 aMZMABgPXc7zPMs1A8DXO756GFJ/4fMEq47hTsAdn5avoxZ4ywl0c2w4Flu2Ybeyb3S+EqxX2DYA H8veJGEDTnHnrXvRaPyt+2kSfK6rfBZ2tUtfP/mR+pR6sX8BUZ/cDV7tvkoAAAAASUVORK5CYII= In-Reply-To: (Stefan Monnier's message of "Sat, 01 Oct 2011 21:12:16 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3.50 (Mac OS X 10.6.8) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 209.85.213.169 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:144575 Archived-At: --=-=-= Content-Type: text/plain On 2011-10-02 09:12 +0800, Stefan Monnier wrote: > [ Moved away from gnu.emacs.sources where it doesn't belong any more. ] > >>> you will find now last version of eldoc-eval.el in GNU ELPA. >> I wonder if it makes sense to provide a message-function to customise >> how `message' posts its messages. > > I think doing it for `message' is a bit too radical. But an > eldoc-message-function hook would be perfectly fine, and I still hope > (despite Thierry's failure to figure out how) that such a hook can be > used to simplify (and integrate) eldoc-eval.el. > > > Stefan Sounds good. How about something as shown in the attachment? Leo --=-=-= Content-Type: text/x-diff Content-Disposition: inline Content-Description: eldoc-modeline === modified file 'lisp/emacs-lisp/eldoc.el' --- lisp/emacs-lisp/eldoc.el 2011-01-25 04:08:28 +0000 +++ lisp/emacs-lisp/eldoc.el 2011-10-05 09:15:52 +0000 @@ -146,6 +146,11 @@ "Idle time delay currently in use by timer. This is used to determine if `eldoc-idle-delay' is changed by the user.") +(defvar eldoc-message-function nil + "The function used by `eldoc-message' to display messages. +It should receive the same arguments as `message'. If this is +nil, `eldoc-minibuffer-message' is used.") + ;;;###autoload (define-minor-mode eldoc-mode @@ -185,8 +190,30 @@ (setq eldoc-current-idle-delay eldoc-idle-delay) (timer-set-idle-time eldoc-timer eldoc-idle-delay t)))) +(defvar eldoc-mode-line-string nil) +(put 'eldoc-mode-line-string 'risky-local-variable t) + +(defun eldoc-minibuffer-message (format-string &rest args) + "Show messages in the mode-line when in the minibuffer. +Otherwise, behave like function `message'." + (if (minibufferp) + (progn + (with-current-buffer (window-buffer (minibuffer-selected-window)) + (unless (assq 'eldoc-mode-line-string mode-line-format) + (push '(eldoc-mode-line-string (" " eldoc-mode-line-string " ")) + mode-line-format))) + (add-hook 'minibuffer-exit-hook + (lambda () (setq eldoc-mode-line-string nil)) + nil t) + (and (stringp format-string) + (setq eldoc-mode-line-string + (apply 'format format-string args))) + (force-mode-line-update)) + (apply 'message format-string args))) + (defun eldoc-message (&rest args) - (let ((omessage eldoc-last-message)) + (let ((omessage eldoc-last-message) + (msgfunc (or eldoc-message-function #'eldoc-minibuffer-message))) (setq eldoc-last-message (cond ((eq (car args) eldoc-last-message) eldoc-last-message) ((null (car args)) nil) @@ -200,8 +227,8 @@ ;; they are Legion. ;; Emacs way of preventing log messages. (let ((message-log-max nil)) - (cond (eldoc-last-message (message "%s" eldoc-last-message)) - (omessage (message nil))))) + (cond (eldoc-last-message (funcall msgfunc "%s" eldoc-last-message)) + (omessage (funcall msgfunc nil))))) eldoc-last-message) ;; This function goes on pre-command-hook for XEmacs or when using idle --=-=-=--