From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.bugs Subject: bug#18380: 24.3.93; sh-script multiline quoted subshell wreaks havoc with indentation Date: Tue, 02 Sep 2014 20:39:36 -0400 Message-ID: References: <877g1n1kjf.fsf@gmail.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1409704834 11228 80.91.229.3 (3 Sep 2014 00:40:34 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 3 Sep 2014 00:40:34 +0000 (UTC) Cc: occitan@esperanto.org, 18380@debbugs.gnu.org To: Carlos Pita Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Sep 03 02:40:27 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 1XOycc-0004fe-EO for geb-bug-gnu-emacs@m.gmane.org; Wed, 03 Sep 2014 02:40:26 +0200 Original-Received: from localhost ([::1]:40840 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XOycb-0000Fo-Td for geb-bug-gnu-emacs@m.gmane.org; Tue, 02 Sep 2014 20:40:25 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:39433) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XOycS-0000Fg-6p for bug-gnu-emacs@gnu.org; Tue, 02 Sep 2014 20:40:23 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XOycG-0001mE-DU for bug-gnu-emacs@gnu.org; Tue, 02 Sep 2014 20:40:16 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:37442) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XOycG-0001kq-BB for bug-gnu-emacs@gnu.org; Tue, 02 Sep 2014 20:40:04 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1XOycF-0007a3-IX for bug-gnu-emacs@gnu.org; Tue, 02 Sep 2014 20:40:03 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 03 Sep 2014 00:40:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 18380 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 18380-submit@debbugs.gnu.org id=B18380.140970478229107 (code B ref 18380); Wed, 03 Sep 2014 00:40:02 +0000 Original-Received: (at 18380) by debbugs.gnu.org; 3 Sep 2014 00:39:42 +0000 Original-Received: from localhost ([127.0.0.1]:57239 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XOybt-0007ZO-FC for submit@debbugs.gnu.org; Tue, 02 Sep 2014 20:39:41 -0400 Original-Received: from chene.dit.umontreal.ca ([132.204.246.20]:48897) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XOybp-0007ZD-UT for 18380@debbugs.gnu.org; Tue, 02 Sep 2014 20:39:38 -0400 Original-Received: from pastel.home (lechon.iro.umontreal.ca [132.204.27.242]) by chene.dit.umontreal.ca (8.14.1/8.14.1) with ESMTP id s830daPg023221; Tue, 2 Sep 2014 20:39:36 -0400 Original-Received: by pastel.home (Postfix, from userid 20848) id 33DFA6308B; Tue, 2 Sep 2014 20:39:36 -0400 (EDT) In-Reply-To: <877g1n1kjf.fsf@gmail.com> (Carlos Pita's message of "Mon, 01 Sep 2014 11:29:24 -0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4.50 (gnu/linux) X-NAI-Spam-Flag: NO X-NAI-Spam-Threshold: 5 X-NAI-Spam-Score: 0 X-NAI-Spam-Rules: 1 Rules triggered RV5052=0 X-NAI-Spam-Version: 2.3.0.9378 : core <5052> : inlines <1229> : streams <1279964> : uri <1809672> 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:92985 Archived-At: > This will see the { as quoted: > "$(echo "{")" > > while this will not: > > "$(echo > "{")" Actually, it depends: sometimes it will sometimes it won't :-( > after this line indentation is broken as Emacs thinks there is an > unclosed open brace. > > The problem with multiline quoted subshells is more general, as > remarked by this comment in sh-script.el: > > ;; FIXME: This can (and often does) match multiple lines, yet it makes no > ;; effort to handle multiline cases correctly, so it ends up being > ;; rather flaky. Indeed, the problem you show is the direct result of the problem alluded to in the above comment. I installed the patch below which seems to help. Stefan === modified file 'lisp/progmodes/sh-script.el' --- lisp/progmodes/sh-script.el 2014-07-21 01:41:59 +0000 +++ lisp/progmodes/sh-script.el 2014-09-03 00:37:50 +0000 @@ -1051,13 +1051,11 @@ "Search for a subshell embedded in a string. Find all the unescaped \" characters within said subshell, remembering that subshells can nest." - ;; FIXME: This can (and often does) match multiple lines, yet it makes no - ;; effort to handle multiline cases correctly, so it ends up being - ;; rather flaky. (when (eq ?\" (nth 3 (syntax-ppss))) ; Check we matched an opening quote. ;; bingo we have a $( or a ` inside a "" (let (;; `state' can be: double-quote, backquote, code. (state (if (eq (char-before) ?`) 'backquote 'code)) + (startpos (point)) ;; Stacked states in the context. (states '(double-quote))) (while (and state (progn (skip-chars-forward "^'\\\\\"`$()" limit) @@ -1088,7 +1086,12 @@ (`double-quote nil) (_ (setq state (pop states))))) (_ (error "Internal error in sh-font-lock-quoted-subshell"))) - (forward-char 1))))) + (forward-char 1)) + (when (< startpos (line-beginning-position)) + (put-text-property startpos (point) 'syntax-multiline t) + (add-hook 'syntax-propertize-extend-region-functions + 'syntax-propertize-multiline nil t)) + ))) (defun sh-is-quoted-p (pos)