Subject: bug#17818: closed (Re: bug#17818: 24.3.91; sh-learn-buffer-indent doesn't learn current indent anymore)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 24 Jun 2014 13:51:03 +0000

Your bug report

#17818: 24.3.91; sh-learn-buffer-indent doesn't learn current indent anymore

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
17818: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17818
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#17818: 24.3.91; sh-learn-buffer-indent doesn't learn current indent anymore
From: Stefan Monnier <[email-masked]>
To: Reiner Steib <[email-masked]>
Cc: [email-masked]
Date: Tue, 24 Jun 2014 09:49:58 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

> However, I tested[1] the new code with the following script and found
> some incorrect indents (see diff below, hope the whitespace doesn't
> get changed).

These aren't due to the guessing part, but the indentation code, so I'll
deal with them in a separate report.

        Stefan

Subject: 24.3.91; sh-learn-buffer-indent doesn't learn current indent anymore
From: Reiner Steib <[email-masked]>
To: [email-masked]
Date: Fri, 20 Jun 2014 16:54:04 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

in Emacs 24.3.91, `sh-learn-buffer-indent' doesn't seem to learn the
current indent rules of the buffer anymore.  It worked correctly in
23.3 and better in 24.1, see below.

(I use `sh-learn-buffer-indent' in `sh-set-shell-hook'.)

Consider this shell script:

###
$ cat shell-script-test.sh
#!/bin/sh

if true; do
  echo "My sh-basic-offset offset should be 2."
fi

for a in 1; do
  echo "My sh-basic-offset offset should be 2."
done
###

* In Emacs 23.3 (==> *expected behavior*):

- emacs -title emacs-23.3 shell-script-test.sh
- M-x sh-learn-buffer-indent RET
- C-x b *indent* RET

  Switching to buffer *indent* shows:

  Indentation values for buffer shell-script-test.sh.
  0 indentation variables have different values.

  Comments follow default indentation.

  Initial value of sh-basic-offset: 4
  Suggested sh-basic-offset:  2

  Learned variable settings:
    sh-indent-after-if 2
    sh-indent-for-fi 0
    sh-indent-after-loop-construct 2
    sh-indent-for-done 0
    sh-indent-comment t

- Put point after first "then", hit RET and TAB (or C-j)
- the new line is indented by 2 spaces (==> *expected behavior*)

- Put point after first "echo" line, hit RET and TAB (or C-j)
- the new line is indented by 2 spaces (==> *expected behavior*)

* Emacs 24.1:

- emacs -title emacs-24.1 -Q shell-script-test.sh
- M-x sh-learn-buffer-indent RET

Result:
  Message: Buffer is read-only: #<buffer *indent*>

  Buffer *indent* exists but it is empty.

Something is wrong, but indentation works as expected.

- Put point after first "then", hit RET and TAB (or C-j)
- the new line is indented by 2 spaces (==> *expected behavior*)

- Put point after first "echo" line, hit RET and TAB (or C-j)
- the new line is indented by 2 spaces (==> *expected behavior*)

* Emacs 24.3.91:

- emacs -title emacs-24.1 -Q shell-script-test.sh
- M-x sh-learn-buffer-indent RET

Message: Local rules set

- Put point after first "then", hit RET (or C-j and TAB) [1]
- the new line is indented by 4 spaces (==> *wrong behavior*)

- Put point after first "echo" line, hitRET (or C-j and TAB)
- the new line is indented by 4 spaces (==> *wrong behavior*)
  and the "echo" line is indented by 4 spaces (==> *wrong behavior*)

In GNU Emacs 24.3.91.1 (i686-pc-mingw32)
 of 2014-05-12 on LEG570
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
 `configure --enable-checking 'CFLAGS=-O0 -g3' CPPFLAGS=-DGLYPH_DEBUG=1'

Important settings:
  value of $LANG: C.ISO-8859-1
  locale-coding-system: cp1252

Bye, Reiner.

[1] NEWS says:

*** `electric-indent-mode' is now enabled by default.
Typing RET reindents the current line and indents the new line.
`C-j' inserts a newline but does not indent.  In some programming modes,
additional characters are electric (eg `{').
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/