From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: William Xu Newsgroups: gmane.emacs.devel Subject: Re: Xref completion Date: Thu, 19 Nov 2020 09:19:57 +0100 Organization: the Church of Emacs Message-ID: References: <873617ets1.fsf@ambrevar.xyz> <878sazzsw5.fsf@mail.linkov.net> <7593e751-cff0-7c1a-7d4c-f927a16c07c9@yandex.ru> <3b255b14-6494-99dc-1e78-9607e0d1fcd9@yandex.ru> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37102"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (darwin) To: emacs-devel@gnu.org Cancel-Lock: sha1:DoAwik3WQjqcV3qI078XpQ7cB0w= Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Nov 19 09:20:57 2020 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kffBY-0009Y2-9a for ged-emacs-devel@m.gmane-mx.org; Thu, 19 Nov 2020 09:20:56 +0100 Original-Received: from localhost ([::1]:38578 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kffBX-0006K9-Cn for ged-emacs-devel@m.gmane-mx.org; Thu, 19 Nov 2020 03:20:55 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:43846) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kffAo-0005ok-Rs for emacs-devel@gnu.org; Thu, 19 Nov 2020 03:20:10 -0500 Original-Received: from static.214.254.202.116.clients.your-server.de ([116.202.254.214]:35928 helo=ciao.gmane.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kffAm-0001Ie-H4 for emacs-devel@gnu.org; Thu, 19 Nov 2020 03:20:10 -0500 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1kffAh-0008Ri-W3 for emacs-devel@gnu.org; Thu, 19 Nov 2020 09:20:03 +0100 X-Injected-Via-Gmane: http://gmane.org/ Received-SPF: pass client-ip=116.202.254.214; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/19 03:20:04 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: 5 X-Spam_score: 0.5 X-Spam_bar: / X-Spam_report: (0.5 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, NML_ADSP_CUSTOM_MED=0.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 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-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:259416 Archived-At: Dmitry Gutov writes: > OTOH, we should create a shortcut for the case when every group > contains only one element: then completion would only show the group > names (meaning file/package names), without summaries. That might work > well in certain environments (like Java?). I like this idea. So we can display a mix of both. One more point, I'm not sure if the order of the candidates are important or not, but we can keep it the same order as in xref buffer. (defun xref--show-defs-minibuffer (fetcher alist) (let* ((xrefs (funcall fetcher)) (xref-alist (xref--analyze xrefs)) xref-alist-with-line-info xref) (cl-loop for ((group . xrefs) . more1) on xref-alist do (let ((show-summary (> (length xrefs) 1))) (cl-loop for (xref . more2) on xrefs do (with-slots (summary location) xref (let* ((line (xref-location-line location)) (line-fmt (if line (format "%s:" line) "")) (candidate (if show-summary (format "%s:%s%s" group line-fmt summary) (format "%s" group)))) (push (cons candidate xref) xref-alist-with-line-info)))))) (setq xref (if (not (cdr xrefs)) (car xrefs) (cdr (assoc (completing-read "Jump to definition: " (reverse xref-alist-with-line-info)) xref-alist-with-line-info)))) (xref-pop-to-location xref (assoc-default 'display-action alist)))) -- William