From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Dmitry Gutov Newsgroups: gmane.emacs.bugs Subject: bug#35737: xref--original-command Date: Tue, 28 May 2019 02:21:45 +0300 Message-ID: <3adebd17-70e5-712d-ba78-6e3aa884cfa6@yandex.ru> References: <87ftpgu59l.fsf@mail.linkov.net> <56943df5-f366-a8af-cb95-a40c244da837@yandex.ru> <87tvdvpgzj.fsf@mail.linkov.net> <87woiqkwok.fsf@mail.linkov.net> <87r28nenzk.fsf@mail.linkov.net> <8736kzekie.fsf@mail.linkov.net> <413fa232-ea7f-bd6a-ecce-632962a7f57e@yandex.ru> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------1C1D0903199CE39743C8DC1B" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="72729"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 Cc: 35737@debbugs.gnu.org To: Juri Linkov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue May 28 01:22:11 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hVOwV-000Io4-Dh for geb-bug-gnu-emacs@m.gmane.org; Tue, 28 May 2019 01:22:11 +0200 Original-Received: from localhost ([127.0.0.1]:54445 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hVOwU-0006sr-Eq for geb-bug-gnu-emacs@m.gmane.org; Mon, 27 May 2019 19:22:10 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:33384) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hVOwN-0006sl-Ts for bug-gnu-emacs@gnu.org; Mon, 27 May 2019 19:22:04 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hVOwM-0008Tp-JO for bug-gnu-emacs@gnu.org; Mon, 27 May 2019 19:22:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:40953) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hVOwM-0008Ti-GX for bug-gnu-emacs@gnu.org; Mon, 27 May 2019 19:22:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hVOwM-0007Cj-AN for bug-gnu-emacs@gnu.org; Mon, 27 May 2019 19:22:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 27 May 2019 23:22:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 35737 X-GNU-PR-Package: emacs Original-Received: via spool by 35737-submit@debbugs.gnu.org id=B35737.155899931727677 (code B ref 35737); Mon, 27 May 2019 23:22:02 +0000 Original-Received: (at 35737) by debbugs.gnu.org; 27 May 2019 23:21:57 +0000 Original-Received: from localhost ([127.0.0.1]:54497 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hVOwH-0007CL-17 for submit@debbugs.gnu.org; Mon, 27 May 2019 19:21:57 -0400 Original-Received: from mail-lf1-f45.google.com ([209.85.167.45]:34200) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hVOwF-0007C8-6w for 35737@debbugs.gnu.org; Mon, 27 May 2019 19:21:55 -0400 Original-Received: by mail-lf1-f45.google.com with SMTP id v18so13100287lfi.1 for <35737@debbugs.gnu.org>; Mon, 27 May 2019 16:21:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=MmKvX1c5451R6L/Y3BFY5mSOBi8qAo+WFp/l/X/2xc8=; b=HUmZy4615EwbfYQ5nHy0qsnt5bDNr7QpFb511x6kw02xMP4l/n1EWVisBbYrUH6DhM gHfyDuSk33eV11RTfHhVy/ccxhhOJ3rIOojKMO294+Nt0ZD1OaghvETWvsJIRY7XYvNo lWiwnla+AD6E5nHV91aPx4fKSdD5Sl+jBKVdFRqvWwncalYJSl4QCXgH1SshNTix2IDl UBRxua5RLhTI1uWIFGerDjSaXJ+DHaw/9pSfwitvVU+CWG1UcmmejtHDFxqKZXok3Y+V jjLgCwRWbVD6W1hAVdZkWXum6Rp+ubocLoQkzE2Psqc7WXhUuIdqo/HHQwc8F8nGDd7O L8mA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:cc:references:message-id :date:user-agent:mime-version:in-reply-to:content-language; bh=MmKvX1c5451R6L/Y3BFY5mSOBi8qAo+WFp/l/X/2xc8=; b=PlmEJT9W2ftLEAupxELZVhlNX1vWs2/sQAzBfpJfZAiNmf0KrMWNkEinK0umQ+XtB7 UNNuYYJHzTqZ3p9QEpwpckjt1xCDLa/vXeZ4MFF2C089RAXOg6XxieZalkIQXSS55b+N /sADbZ5mWzfOI7mioZBpD+EV0zYCfzcMniDvQYMN5r395nUAIVtPucJGXg9IDef1muQC tJOPKSO1wzdJz96ckxSbgD+wlqBU77N9ZxA0AQTTX7U8+4ggfrva1ujdP1SbW2toO1ab q5gvYhEB3kTP/wb1vLq+bMAi7Fs8PB/LuocNcRJhHPFbcjEy5VnPPbj+izuFKRfn749+ Wwgw== X-Gm-Message-State: APjAAAXC38ada5xeFHWsUIlP089qtG/TZ09kH/0I8/Jk+XPlT9+GNuPq 4rirhBF2MbUzQA3kyF55Uv8bH9NP X-Google-Smtp-Source: APXvYqwkDkHUFLUZgytSGvI3UQ4ecq0uLeHiJgfp3V55YlaIPeT21eyz8OqkaU2UvYt4H44S5ZYJ9w== X-Received: by 2002:a19:c312:: with SMTP id t18mr39325613lff.165.1558999308713; Mon, 27 May 2019 16:21:48 -0700 (PDT) Original-Received: from [192.168.1.3] ([185.105.174.23]) by smtp.googlemail.com with ESMTPSA id 12sm2572784ljf.12.2019.05.27.16.21.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 27 May 2019 16:21:47 -0700 (PDT) In-Reply-To: <413fa232-ea7f-bd6a-ecce-632962a7f57e@yandex.ru> Content-Language: en-US X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:159833 Archived-At: This is a multi-part message in MIME format. --------------1C1D0903199CE39743C8DC1B Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit To be clear, here's the kind of change I was thinking of. Though maybe instead of changing xref--show-defs-buffer, we'd add a new function named like xref--show-defs-buffer-below. --------------1C1D0903199CE39743C8DC1B Content-Type: text/x-patch; name="xref-find-definitions-at-bottom.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xref-find-definitions-at-bottom.diff" diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 58c0119a54..80f80cdd75 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -704,6 +704,16 @@ xref--xref-buffer-mode (setq next-error-function #'xref--next-error-function) (setq next-error-last-buffer (current-buffer))) +(defvar xref--definitions-buffer-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "RET") #'xref-quit-and-goto-xref) + (set-keymap-parent map xref--xref-buffer-mode-map) + map)) + +(define-derived-mode xref--definitions-buffer-mode + xref--xref-buffer-mode + "XREF Defs") + (defun xref--next-error-function (n reset?) (when reset? (goto-char (point-min))) @@ -725,7 +735,6 @@ xref--next-error-function (defvar xref--button-map (let ((map (make-sparse-keymap))) - (define-key map [(control ?m)] #'xref-goto-xref) (define-key map [mouse-1] #'xref-goto-xref) (define-key map [mouse-2] #'xref--mouse-2) map)) @@ -789,18 +798,21 @@ xref--show-xref-buffer (funcall fetcher))) (xref-alist (xref--analyze xrefs))) (with-current-buffer (get-buffer-create xref-buffer-name) - (setq buffer-undo-list nil) - (let ((inhibit-read-only t) - (buffer-undo-list t)) - (erase-buffer) - (xref--insert-xrefs xref-alist) - (xref--xref-buffer-mode) - (pop-to-buffer (current-buffer)) - (goto-char (point-min)) - (setq xref--original-window (assoc-default 'window alist) - xref--original-window-intent (assoc-default 'display-action alist)) - (setq xref--fetcher fetcher) - (current-buffer))))) + (xref--show-common-initialize xref-alist fetcher alist) + (xref--xref-buffer-mode) + (pop-to-buffer (current-buffer)) + (current-buffer)))) + +(defun xref--show-common-initialize (xref-alist fetcher alist) + (setq buffer-undo-list nil) + (let ((inhibit-read-only t) + (buffer-undo-list t)) + (erase-buffer) + (xref--insert-xrefs xref-alist) + (goto-char (point-min)) + (setq xref--original-window (assoc-default 'window alist) + xref--original-window-intent (assoc-default 'display-action alist)) + (setq xref--fetcher fetcher))) (defun xref-refresh-results () "Refresh the search results in the current buffer." @@ -826,9 +838,12 @@ xref--show-defs-buffer (xref--pop-to-location (car xrefs) (assoc-default 'display-action alist))) (t - (xref--show-xref-buffer fetcher - (cons (cons 'fetched-xrefs xrefs) - alist)))))) + (with-current-buffer (get-buffer-create xref-buffer-name) + (xref--show-common-initialize (xref--analyze xrefs) fetcher alist) + (xref--definitions-buffer-mode) + (pop-to-buffer (current-buffer) + '(display-buffer-in-direction . ((direction . below)))) + (current-buffer)))))) (defvar xref-show-xrefs-function 'xref--show-xref-buffer --------------1C1D0903199CE39743C8DC1B--