From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Mark Oteiza Newsgroups: gmane.emacs.bugs Subject: bug#24580: 25.2.50; query-replace history doesn't work Date: Sun, 2 Oct 2016 21:08:43 -0400 Message-ID: <20161003010843.GA2404@holos.localdomain> References: <87fuogh8mo.fsf@mbork.pl> <83y428lawc.fsf@gnu.org> <20161002041715.GA5612@holos.localdomain> <8337kfkzcd.fsf@gnu.org> <20161002165128.GA1032@holos.localdomain> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: blaine.gmane.org 1475456972 26698 195.159.176.226 (3 Oct 2016 01:09:32 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 3 Oct 2016 01:09:32 +0000 (UTC) User-Agent: Mutt/1.7+23 (87911ba95dae) (2016-08-17) Cc: mbork@mbork.pl, 24580@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Oct 03 03:09:27 2016 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bqrkq-00050q-V2 for geb-bug-gnu-emacs@m.gmane.org; Mon, 03 Oct 2016 03:09:17 +0200 Original-Received: from localhost ([::1]:33231 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bqrkp-0005AM-Cg for geb-bug-gnu-emacs@m.gmane.org; Sun, 02 Oct 2016 21:09:15 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:35998) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bqrkg-0005A1-DC for bug-gnu-emacs@gnu.org; Sun, 02 Oct 2016 21:09:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bqrkc-0004II-4Y for bug-gnu-emacs@gnu.org; Sun, 02 Oct 2016 21:09:05 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:36151) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bqrkc-0004IE-11 for bug-gnu-emacs@gnu.org; Sun, 02 Oct 2016 21:09:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1bqrkb-0004EV-QD for bug-gnu-emacs@gnu.org; Sun, 02 Oct 2016 21:09:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Mark Oteiza Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 03 Oct 2016 01:09:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24580 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 24580-submit@debbugs.gnu.org id=B24580.147545693216255 (code B ref 24580); Mon, 03 Oct 2016 01:09:01 +0000 Original-Received: (at 24580) by debbugs.gnu.org; 3 Oct 2016 01:08:52 +0000 Original-Received: from localhost ([127.0.0.1]:42341 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bqrkR-0004E7-VP for submit@debbugs.gnu.org; Sun, 02 Oct 2016 21:08:52 -0400 Original-Received: from mail-qk0-f169.google.com ([209.85.220.169]:34564) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bqrkQ-0004Dv-C0 for 24580@debbugs.gnu.org; Sun, 02 Oct 2016 21:08:50 -0400 Original-Received: by mail-qk0-f169.google.com with SMTP id j129so143370939qkd.1 for <24580@debbugs.gnu.org>; Sun, 02 Oct 2016 18:08:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=udel-edu.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=5f3qQTy5eDMckCfkTKoMk9kl30Gzrdhm3BLyUkbm+AY=; b=k3DpiWDoCjEviT2dcO7H1Bd6LuTEwWCqjBDCX5ca8kNjzf0r5FWJM8WSQmdAW0+geM Hq5GYbX3wPPmR3CWceaE+DGPRUb/LWq6NWVgHASnwX6imLEn/aOeGBdGrkP/55cmkEWM UVGhA9MV+XCHFWuIf4CoRmM2W3Qi/6PzDB9sHPlzhJsDxgEcJxhhcGj4/lh/3xa4zrhI mtoRWTNa+btw7YgQcV8ecHe6l4iB+1OvJYRHQ+1OAjilVWoltWdyASIkFXC9Z0sRi53G XgtcJzPQQ0mCK1YJoOLQQhaSqj5sj//UhANSlOxL7CN3R7O1Djmkh4evCFnTsCWpe5vT LN7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=5f3qQTy5eDMckCfkTKoMk9kl30Gzrdhm3BLyUkbm+AY=; b=Wrc3pHRdmEUeAGNqwWe3IbsS/N7ZACOfzaBgCqzOIn3lUfDIQPrWYuxO7ScOKezEt5 otvG2nEO9BFF6QmCN2UXosj2nZcbc4zI1D5QPPm5eod8oG2SAMd1WhQ9ryvUZVSaxuB1 PjDvQKwjT9oa5s0OqqobGnHjAXi+DIwYyc1ZQrTtptwjOaDhuHAL9hZY7Ofdf3Ya0yDN ylIF/zGgnP5nb1MAUJFuPGQ4ZoEZLRfL1Z0zM2yhnm12T1x+BIAQrkQqn5uOoWjeFfhE Mor1oo2ppTWSWkjCZEdAn+hFdMwEjOG8ft9raTf1gXFQEgZmXch6h70oYZDhiJN0W5Yt GEYA== X-Gm-Message-State: AA6/9RmNnJ09ymyPwIfkucGF0CBh1RgKuNg70HgUdESrkGkf7bg6T3UtrI5kjbXkLmlZnyeI X-Received: by 10.55.5.21 with SMTP id 21mr18559856qkf.231.1475456924588; Sun, 02 Oct 2016 18:08:44 -0700 (PDT) Original-Received: from holos.localdomain ([69.250.222.218]) by smtp.gmail.com with ESMTPSA id r5sm16039459qkf.34.2016.10.02.18.08.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Oct 2016 18:08:43 -0700 (PDT) Original-Received: by holos.localdomain (Postfix, from userid 1000) id 29DA160D6F; Sun, 2 Oct 2016 21:08:43 -0400 (EDT) Content-Disposition: inline In-Reply-To: <20161002165128.GA1032@holos.localdomain> 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: 208.118.235.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:123927 Archived-At: On 02/10/16 at 12:51pm, Mark Oteiza wrote: > On 02/10/16 at 10:02am, Eli Zaretskii wrote: > > > Date: Sun, 2 Oct 2016 00:17:15 -0400 > > > From: Mark Oteiza > > > Cc: Marcin Borkowski , 24580@debbugs.gnu.org > > > > > > > > - start emacs -Q > > > > > - press `a' `C-b', `M-%', `a', `RET', `b', `RET', `!' > > > > > - press `M-%', `M-p' > > > > > > > > > > Emacs says "Beginning of history; no preceding item". > > > > > > > > Mark, this regression was caused by the lexical-binding change in > > > > replace.el. Could you please take a look? > > > > > > The problem lies (at least) in query-replace-read-from, where > > > query-replace-from-to is let bound, and later read-from-minibuffer > > > refers to the symbol 'query-replace-from-to. At first sight, it looks > > > like it could be fixed by putting some of the setup done by these > > > bindings into the minibuffer setup hook. > > > > Isn't there a less intrusive change to fix this? A significant change > > like the one you propose is more risky, but if there's no safer one, I > > guess we should take it. > > Perhaps just adding a (defvar query-replace-from-to-history …) will be > sufficient. That read-from-minibuffer and friends' HIST argument can > only be a symbol is a bit frustrating. Surely there is a better way. diff --git a/lisp/replace.el b/lisp/replace.el index 4256751..0a373db 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -90,6 +90,9 @@ query-replace-from-to-separator :type '(choice string (sexp :tag "Display specification")) :version "25.1") +(defvar query-replace-from-to-history nil + "???") + (defcustom query-replace-from-history-variable 'query-replace-history "History list to use for the FROM argument of `query-replace' commands. The value of this variable should be a symbol; that symbol @@ -174,20 +177,7 @@ query-replace-read-from (propertize "\0" 'display query-replace-from-to-separator 'separator t))) - (query-replace-from-to-history - (append - (when separator - (mapcar (lambda (from-to) - (concat (query-replace-descr (car from-to)) - separator - (query-replace-descr (cdr from-to)))) - query-replace-defaults)) - (symbol-value query-replace-from-history-variable))) (minibuffer-allow-text-properties t) ; separator uses text-properties - (prompt - (if (and query-replace-defaults separator) - (format "%s (default %s): " prompt (car query-replace-from-to-history)) - (format "%s: " prompt))) (from ;; The save-excursion here is in case the user marks and copies ;; a region in order to specify the minibuffer input. @@ -195,13 +185,26 @@ query-replace-read-from (save-excursion (minibuffer-with-setup-hook (lambda () + (setq query-replace-from-to-history + (append + (when separator + (mapcar (lambda (from-to) + (concat (query-replace-descr (car from-to)) + separator + (query-replace-descr (cdr from-to)))) + query-replace-defaults)) + (symbol-value query-replace-from-history-variable))) (setq-local text-property-default-nonsticky (cons '(separator . t) text-property-default-nonsticky))) - (if regexp-flag - (read-regexp prompt nil 'query-replace-from-to-history) - (read-from-minibuffer - prompt nil nil nil 'query-replace-from-to-history - (car (if regexp-flag regexp-search-ring search-ring)) t))))) + (let ((prompt + (if (and query-replace-defaults separator) + (format "%s (default %s): " prompt (car query-replace-from-to-history)) + (format "%s: " prompt)))) + (if regexp-flag + (read-regexp prompt nil 'query-replace-from-to-history) + (read-from-minibuffer + prompt nil nil nil 'query-replace-from-to-history + (car (if regexp-flag regexp-search-ring search-ring)) t)))))) (to)) (if (and (zerop (length from)) query-replace-defaults) (cons (caar query-replace-defaults)