From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.bugs Subject: bug#17809: 24.4.50; Completions display Date: Mon, 07 Jul 2014 02:32:51 +0300 Organization: JURTA Message-ID: <8761ja59kc.fsf@mail.jurta.org> References: <87tx7buryg.fsf@mail.jurta.org> <53A92532.9040901@gmx.at> <87y4wlg8gx.fsf_-_@mail.jurta.org> <53AA7222.1010905@gmx.at> <8738er89q6.fsf@mail.jurta.org> <53AD12AE.2050707@gmx.at> <877g41vp5x.fsf@mail.jurta.org> <53AE7A3A.20307@gmx.at> <87mwcowxfs.fsf@mail.jurta.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1404691173 13409 80.91.229.3 (6 Jul 2014 23:59:33 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 6 Jul 2014 23:59:33 +0000 (UTC) Cc: 17809@debbugs.gnu.org To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Jul 07 01:59:26 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1X3wL2-0003ln-Kd for geb-bug-gnu-emacs@m.gmane.org; Mon, 07 Jul 2014 01:59:20 +0200 Original-Received: from localhost ([::1]:47525 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X3wL2-00082Z-Bq for geb-bug-gnu-emacs@m.gmane.org; Sun, 06 Jul 2014 19:59:20 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:38802) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X3wKt-00081F-1n for bug-gnu-emacs@gnu.org; Sun, 06 Jul 2014 19:59:18 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X3wKl-0006MK-Dk for bug-gnu-emacs@gnu.org; Sun, 06 Jul 2014 19:59:10 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:54152) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X3wKl-0006MG-AA for bug-gnu-emacs@gnu.org; Sun, 06 Jul 2014 19:59:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1X3wKk-0001iu-J8 for bug-gnu-emacs@gnu.org; Sun, 06 Jul 2014 19:59:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Juri Linkov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 06 Jul 2014 23:59:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 17809 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 17809-submit@debbugs.gnu.org id=B17809.14046911026545 (code B ref 17809); Sun, 06 Jul 2014 23:59:02 +0000 Original-Received: (at 17809) by debbugs.gnu.org; 6 Jul 2014 23:58:22 +0000 Original-Received: from localhost ([127.0.0.1]:45300 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1X3wK5-0001hT-C8 for submit@debbugs.gnu.org; Sun, 06 Jul 2014 19:58:21 -0400 Original-Received: from alc-vshost7.dreamhost.com ([69.163.216.107]:36291 helo=ps18281.dreamhostps.com) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1X3wK1-0001hB-JK for 17809@debbugs.gnu.org; Sun, 06 Jul 2014 19:58:18 -0400 Original-Received: from localhost.jurta.org (ps18281.dreamhostps.com [69.163.222.226]) by ps18281.dreamhostps.com (Postfix) with ESMTP id 517BB348328E36; Sun, 6 Jul 2014 16:58:15 -0700 (PDT) In-Reply-To: (Stefan Monnier's message of "Sun, 06 Jul 2014 00:32:46 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (x86_64-pc-linux-gnu) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.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-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:91258 Archived-At: >> +(defmacro with-displayed-buffer-window (buffer-or-name action quit-function &rest body) > > That looks OK. Two details, tho: > >> + (setq ,window (temp-buffer-window-show ,buffer ,action))) > [...] >> + (when (functionp (cdr (assq 'window-height (cdr ,action)))) > > Let's not evaluate `action' twice. I.e. we need a (macroexp-let2 ..) > wrapper for it. I added this now in the next patch. >> + (if (functionp ,quit-function) >> + (funcall ,quit-function ,window ,value) > > Same for quit-function, and additionally, we want to make sure we > evaluate `quit-function' before `body'. `quit-function' is used in `dired-mark-pop-up' to activate the minibuffer, so it should be the final thing after displaying the *Marked Files* buffer. Maybe `quit-function' is not an appropriate name for such action? === modified file 'lisp/window.el' --- lisp/window.el 2014-06-18 07:57:27 +0000 +++ lisp/window.el 2014-07-06 23:32:27 +0000 @@ -185,6 +185,7 @@ (defmacro with-temp-buffer-window (buffe (let ((buffer (make-symbol "buffer")) (window (make-symbol "window")) (value (make-symbol "value"))) + (macroexp-let2 macroexp-copyable-p vquit-function quit-function `(let* ((,buffer (temp-buffer-window-setup ,buffer-or-name)) (standard-output ,buffer) ,window ,value) @@ -192,9 +193,9 @@ (defmacro with-temp-buffer-window (buffe (with-current-buffer ,buffer (setq ,window (temp-buffer-window-show ,buffer ,action))) - (if (functionp ,quit-function) - (funcall ,quit-function ,window ,value) - ,value)))) + (if (functionp ,vquit-function) + (funcall ,vquit-function ,window ,value) + ,value))))) (defmacro with-current-buffer-window (buffer-or-name action quit-function &rest body) "Evaluate BODY with a buffer BUFFER-OR-NAME current and show that buffer. @@ -205,6 +206,7 @@ (defmacro with-current-buffer-window (bu (let ((buffer (make-symbol "buffer")) (window (make-symbol "window")) (value (make-symbol "value"))) + (macroexp-let2 macroexp-copyable-p vquit-function quit-function `(let* ((,buffer (temp-buffer-window-setup ,buffer-or-name)) (standard-output ,buffer) ,window ,value) @@ -212,9 +214,40 @@ (defmacro with-current-buffer-window (bu (setq ,value (progn ,@body)) (setq ,window (temp-buffer-window-show ,buffer ,action))) - (if (functionp ,quit-function) - (funcall ,quit-function ,window ,value) - ,value)))) + (if (functionp ,vquit-function) + (funcall ,vquit-function ,window ,value) + ,value))))) + +(defmacro with-displayed-buffer-window (buffer-or-name action quit-function &rest body) + "Show a buffer BUFFER-OR-NAME and evaluate BODY in that buffer. +This construct is like `with-current-buffer-window' but unlike that +displays the buffer specified by BUFFER-OR-NAME before running BODY." + (declare (debug t)) + (let ((buffer (make-symbol "buffer")) + (window (make-symbol "window")) + (value (make-symbol "value"))) + (macroexp-let2 macroexp-copyable-p vaction action + (macroexp-let2 macroexp-copyable-p vquit-function quit-function + `(let* ((,buffer (temp-buffer-window-setup ,buffer-or-name)) + (standard-output ,buffer) + ,window ,value) + (with-current-buffer ,buffer + (setq ,window (temp-buffer-window-show ,buffer ,vaction))) + + (let ((inhibit-read-only t) + (inhibit-modification-hooks t)) + (setq ,value (progn ,@body))) + + (with-selected-window ,window + (goto-char (point-min))) + + (when (functionp (cdr (assq 'window-height (cdr ,vaction)))) + (ignore-errors + (funcall (cdr (assq 'window-height (cdr ,vaction))) ,window))) + + (if (functionp ,vquit-function) + (funcall ,vquit-function ,window ,value) + ,value)))))) ;; The following two functions are like `window-next-sibling' and ;; `window-prev-sibling' but the WINDOW argument is _not_ optional (so