GNU bug report logs - #60832
[PATCH] sh-script.el: Use sh-indent-for-continuation to indent line continuations.

Previous Next

Package: emacs;

Reported by: Philippe Altherr <philippe.altherr <at> gmail.com>

Date: Sun, 15 Jan 2023 14:14:02 UTC

Severity: normal

Tags: patch

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Philippe Altherr <philippe.altherr <at> gmail.com>
To: 60832 <at> debbugs.gnu.org
Subject: bug#60832: [PATCH] sh-script.el: Use sh-indent-for-continuation to indent line continuations.
Date: Sun, 15 Jan 2023 12:55:43 +0100
[Message part 1 (text/plain, inline)]
The variable sh-indent-for-continuation
<https://github.com/emacs-mirror/emacs/blob/77ca6aa56e3425c87861cab8abce52bee3697cf4/lisp/progmodes/sh-script.el#L1300>
is defined in sh-script.el as "How much to indent for a continuation
statement." but it is never used. In particular, the function
sh-smie--indent-continuation
<https://github.com/emacs-mirror/emacs/blob/77ca6aa56e3425c87861cab8abce52bee3697cf4/lisp/progmodes/sh-script.el#L2000>,
which indents line continuations, doesn't use it and instead uses
sh-basic-offset. The attached patch modifies
sh-smie--indent-continuation to use sh-indent-for-continuation instead of
sh-basic-offset.

I have tested the patch by adding the patched function
sh-smie--indent-continuation to my .emacs (in a (with-eval-after-load
'sh-script ...) statement).

Here are details of what changes on the example used in the description of
sh-indent-after-continuation
<https://github.com/emacs-mirror/emacs/blob/77ca6aa56e3425c87861cab8abce52bee3697cf4/lisp/progmodes/sh-script.el#L1965>.
In all cases I have used the following settings:

(setq sh-basic-offset 4)
(setq sh-indent-for-continuation '++)


   - With (setq sh-indent-after-continuation 'always), I get the following
   result with the unpatched function:

   for f \
       in a; do \
       toto; \
       done

   This looks wrong to me because it doesn't take into account my setting
   (setq sh-indent-for-continuation '++) for line continuations. With the
   patched function I get the expected result:

   for f \
           in a; do \
           toto; \
           done

   - With (setq sh-indent-after-continuation nil), I get the following
   result with the unpatched and the patched function:

   for f \
   in a; do \
       toto; \
   done

   This looks correct to me. My understanding is that with (setq
   sh-indent-after-continuation nil), line continuations are kind of ignored
   and thus the setting (setq sh-indent-for-continuation '++) should never
   intervene, which is also the case.

   - With (setq sh-indent-after-continuation t), I get the following result
   with the unpatched function:

   for f \
       in a; do \
       toto; \
       done

   With the patched function, I get the following result:

   for f \
           in a; do \
       toto; \
       done

   I think that's also what's expected with (setq
   sh-indent-for-continuation '++) but I'm not entirely sure as I don't fully
   understand how (setq sh-indent-after-continuation t) is supposed to work.

Overall, I'm pretty confident that the first change in my patch should be
done. It's what affects the setting (setq sh-indent-after-continuation
'always). I'm a bit less confident about the second change, which affects
the setting (setq sh-indent-after-continuation t).

Philippe
[Message part 2 (text/html, inline)]
[0001-For-line-continuations-use-sh-indent-for-continuatio.patch (application/x-patch, attachment)]

This bug report was last modified 2 years and 137 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.