From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Tassilo Horn Newsgroups: gmane.emacs.bugs Subject: bug#21747: 25.0.50; while-no-input breaks kbd event handling when called from post-command-hook Date: Sun, 25 Oct 2015 09:10:42 +0100 Message-ID: <87oafnpdvh.fsf@gnu.org> References: <87bnboemqb.fsf@gnu.org> <838u6sy9s1.fsf@gnu.org> <877fmcejgn.fsf@gnu.org> <83ziz8wrun.fsf@gnu.org> <8737x0egvm.fsf@gnu.org> <83vb9wwnc6.fsf@gnu.org> <874mhg1n25.fsf@gnu.org> <83si50wi2m.fsf@gnu.org> <87fv109yxo.fsf@gnu.org> <83lhasweeh.fsf@gnu.org> <87si4zpg97.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1445760747 30979 80.91.229.3 (25 Oct 2015 08:12:27 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 25 Oct 2015 08:12:27 +0000 (UTC) Cc: storm@cua.dk, monnier@iro.umontreal.ca, 21747@debbugs.gnu.org, bruce.connor.am@gmail.com To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sun Oct 25 09:12:15 2015 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 1ZqGPT-0001na-3B for geb-bug-gnu-emacs@m.gmane.org; Sun, 25 Oct 2015 09:12:11 +0100 Original-Received: from localhost ([::1]:46902 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZqGPS-0005hm-HT for geb-bug-gnu-emacs@m.gmane.org; Sun, 25 Oct 2015 04:12:10 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:45597) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZqGPO-0005hh-Ed for bug-gnu-emacs@gnu.org; Sun, 25 Oct 2015 04:12:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZqGPL-0008Tl-3j for bug-gnu-emacs@gnu.org; Sun, 25 Oct 2015 04:12:06 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:46713) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZqGPL-0008Tg-0T for bug-gnu-emacs@gnu.org; Sun, 25 Oct 2015 04:12:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1ZqGPK-00017L-Hb for bug-gnu-emacs@gnu.org; Sun, 25 Oct 2015 04:12:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Tassilo Horn Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 25 Oct 2015 08:12:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 21747 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 21747-submit@debbugs.gnu.org id=B21747.14457606684234 (code B ref 21747); Sun, 25 Oct 2015 08:12:02 +0000 Original-Received: (at 21747) by debbugs.gnu.org; 25 Oct 2015 08:11:08 +0000 Original-Received: from localhost ([127.0.0.1]:37421 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZqGOR-00016D-H0 for submit@debbugs.gnu.org; Sun, 25 Oct 2015 04:11:08 -0400 Original-Received: from out3-smtp.messagingengine.com ([66.111.4.27]:49437) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZqGO6-00015M-Rd for 21747@debbugs.gnu.org; Sun, 25 Oct 2015 04:11:05 -0400 Original-Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id AFB7820657 for <21747@debbugs.gnu.org>; Sun, 25 Oct 2015 04:10:46 -0400 (EDT) Original-Received: from frontend2 ([10.202.2.161]) by compute4.internal (MEProxy); Sun, 25 Oct 2015 04:10:46 -0400 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-sasl-enc :x-sasl-enc; s=smtpout; bh=dloGEdWiSM/rSrZQsVP5WD1BnOE=; b=WMTcx Z9sHjU8VybO0hQNtczAJ7E2WoTTNdzpO7nOUZuqi9KEg18TIK/fDWYx07bjc34dB XN4Y0ceTnHpLeNH0lrAPtMbZJ71LsJzhG+zKxUawtPJtzApKCcLOPyOcE2xTUvSz g2ih+XMwCtfZS+mIDqPbUZMa5tjqIW9UqOM/JE= X-Sasl-enc: g+9s2hsz17VqcCZE4posSqWq8bY6E6jY7kEciGEFNcwZ 1445760646 Original-Received: from thinkpad-t440p (unknown [2.160.223.152]) by mail.messagingengine.com (Postfix) with ESMTPA id 2095F680108; Sun, 25 Oct 2015 04:10:44 -0400 (EDT) In-Reply-To: <87si4zpg97.fsf@gnu.org> (Tassilo Horn's message of "Sun, 25 Oct 2015 08:19:16 +0100") User-Agent: Gnus/5.130014 (Ma Gnus v0.14) Emacs/25.0.50 (gnu/linux) 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: 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-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:108013 Archived-At: Tassilo Horn writes: > Eli Zaretskii writes: > >>> From: Tassilo Horn >>> Cc: bruce.connor.am@gmail.com, monnier@iro.umontreal.ca, storm@cua.dk, >>> 21747@debbugs.gnu.org >>> Date: Sat, 24 Oct 2015 15:30:11 +0200 >>> >>> Eli Zaretskii writes: >>> >>> >> My recipe for reproduction is >>> >> >>> >> 1. emacs -Q >>> >> 2. M-x package-initialize >>> >> 3. M-x global-aggressive-indent-mode >>> >> 4. C-x C-f ~/test.sh >>> >> 5. type the keyword if where the i is displayed immediately >>> >> and the display of f is delayed >>> >> >>> >> This does only occur for sh-mode keywords like if, while, etc. where the >>> >> delaying starts with after entering the last char of the keyword. Also, >>> >> I can reproduce that problem only if test.sh doesn't exist. >>> > >>> > I don't understand: are you saying that the post-command-hook finished >>> > its job, and yet redisplay is not entered? >>> >>> Yes, or rather the function aggressive-indent--indent-if-changed which >>> is in post-command-hook finished. >>> >>> >> Or well, I just tried what happens when I replace the `while-no-input' >>> >> with a `progn'. Then Emacs goes into some infloop. Attaching with gdb >>> >> shows: >>> > >>> > There's a procedure in etc/DEBUG to determine which call-stack frame >>> > infloops, please use it and tell what you found. >>> >>> Ok, so with the aggressive-indent--indent-if-changed where >>> while-no-input is replaced with progn, I perform my recipe until emacs >>> infloops. Then do "kill -TSTP " and repeatedly "finish" at the gdb >>> prompt. But the last frame being displayed in GDB before finish doesn't >>> return anymore is not always the same. Most of the time it is poll () >>> from /usr/lib/libc.so.6. Here are two other results. >> >> No, that's bogus (GC cannot infloop, you just didn't wait long enough >> for that "finish" to return). > > Oh, sorry. > >> The function that infloops is re-search-backward, because it is called >> with LIMIT set to zero. The real problem is here: >> >> (defun sh-smie--keyword-p () >> "Non-nil if we're at a keyword position. >> A keyword position is one where if we're looking at something that looks >> like a keyword, then it is a keyword." >> (let ((prev (funcall smie-backward-token-function))) >> (if (zerop (length prev)) >> (looking-back "\\`\\|\\s(" (1- (point))) <<<<<<<<<<<<<<<<<< >> (assoc prev smie-grammar)))) >> >> What do you expect looking-back to do here when point is at BOB? > > I think when point is a BOB, then the \\` part of the regex would match > for sure so replacing looking-back with (or (bobp) (looking-back ...)) > would have the same semantics, right? So I've tried this patch: By the way, I cannot reproduce an infloop in re-search-backward when LIMIT is zero. Instead, with the current unchanged master code I also have pretty much the same infloop on the SMIE lisp level as in the previous mail where I patched the code in order not to run in LIMIT = 0 cases: 1 -> (aggressive-indent--indent-if-changed) | 2 -> (aggressive-indent--run-user-hooks) | 2 <- aggressive-indent--run-user-hooks: nil | 2 -> (aggressive-indent--softly-indent-region-and-on 2 3) | | 3 -> (aggressive-indent-indent-region-and-on 2 3) | | | 4 -> (sh-smie--indent-continuation) | | | | 5 -> (sh-smie--looking-back-at-continuation-p) | | | | 5 <- sh-smie--looking-back-at-continuation-p: nil | | | 4 <- sh-smie--indent-continuation: nil | | | 4 -> (sh-smie-sh-forward-token) | | | | 5 -> (sh-smie--default-forward-token) | | | | 5 <- sh-smie--default-forward-token: "if" | | | | 5 -> (sh-smie--sh-keyword-p "if") | | | | | 6 -> (sh-smie--keyword-p) | | | | | | 7 -> (sh-smie-sh-backward-token) | | | | | | | 8 -> (sh-smie--default-backward-token) | | | | | | | 8 <- sh-smie--default-backward-token: "" | | | | | | 7 <- sh-smie-sh-backward-token: "" | | | | | 6 <- sh-smie--keyword-p: t | | | | 5 <- sh-smie--sh-keyword-p: t | | | 4 <- sh-smie-sh-forward-token: "if" | | | 4 -> (sh-smie-sh-forward-token) | | | | 5 -> (sh-smie--newline-semi-p) | | | | | 6 -> (sh-smie-sh-backward-token) | | | | | | 7 -> (sh-smie--default-backward-token) | | | | | | 7 <- sh-smie--default-backward-token: "if" | | | | | | 7 -> (sh-smie--sh-keyword-p "if") | | | | | | | 8 -> (sh-smie--keyword-p) | | | | | | | | 9 -> (sh-smie-sh-backward-token) | | | | | | | | | 10 -> (sh-smie--default-backward-token) | | | | | | | | | 10 <- sh-smie--default-backward-token: "" | | | | | | | | 9 <- sh-smie-sh-backward-token: "" | | | | | | | 8 <- sh-smie--keyword-p: t | | | | | | 7 <- sh-smie--sh-keyword-p: t | | | | | 6 <- sh-smie-sh-backward-token: "if" | | | | 5 <- sh-smie--newline-semi-p: nil | | | 4 <- sh-smie-sh-forward-token: ";" [the above one repeats indefinitely] | | | 4 -> (sh-smie-sh-forward-token) | | | | 5 -> (sh-smie--newline-semi-p) | | | | | 6 -> (sh-smie-sh-backward-token) | | | | | | 7 -> (sh-smie--default-backward-token) | | | | | | 7 <- sh-smie--default-backward-token: "if" | | | | | | 7 -> (sh-smie--sh-keyword-p "if") | | | | | | | 8 -> (sh-smie--keyword-p) | | | | | | | | 9 -> (sh-smie-sh-backward-token) | | | | | | | 8 <- sh-smie--keyword-p: !non-local\ exit! | | | | | | 7 <- sh-smie--sh-keyword-p: !non-local\ exit! | | | | | 6 <- sh-smie-sh-backward-token: !non-local\ exit! | | | | 5 <- sh-smie--newline-semi-p: !non-local\ exit! | | | 4 <- sh-smie-sh-forward-token: !non-local\ exit! | | 3 <- aggressive-indent-indent-region-and-on: !non-local\ exit! | 2 <- aggressive-indent--softly-indent-region-and-on: !non-local\ exit! 1 <- aggressive-indent--indent-if-changed: t Bye, Tassilo