GNU bug report logs - #36227
26.1; sgml-mode indents as comment inside of -- text blocks

Previous Next

Package: emacs;

Reported by: Akkana Peck <akkana <at> shallowsky.com>

Date: Sat, 15 Jun 2019 18:03:01 UTC

Severity: minor

Tags: confirmed, fixed

Found in version 26.1

Fixed in version 28.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 36227 in the body.
You can then email your comments to 36227 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#36227; Package emacs. (Sat, 15 Jun 2019 18:03:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Akkana Peck <akkana <at> shallowsky.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sat, 15 Jun 2019 18:03:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Akkana Peck <akkana <at> shallowsky.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 26.1; sgml-mode indents as comment inside of -- text blocks
Date: Sat, 15 Jun 2019 12:02:18 -0600
In emacs -Q, edit a file in html-mode (derived from sgml-mode),
e.g. visit /tmp/foo.html.

M-x auto-fill-mode <RET>

Type some nonsense words with ' -- ' in the middle, like this:

asd shdf ladshjkl sjdk -- asdfh jklsdfh

and keep typing until it wraps.

sgml-mode will wrap adding unwanted extra dashes and indentations,
like this:

asd shdf ladshjkl sjdk -- asdfh jklsdfh jasdklf hjsdkl hjsdaklf sdf --
		       -- jkldsfhj kalshfjkasdlfh jaksd

This happens because sgml-mode is confused about what constitutes a
comment in sgml/html.

At some point, someone clearly agreed that this was a bug and tried to
fix it. If you look at the sgml.el source and search for --,
you'll see comments like:

> (defvar sgml-specials '(?\")
>   "List of characters that have a special meaning for SGML mode.
> This list is used when first loading the `sgml-mode' library.
> The supported characters and potential disadvantages are:
>
>   ?\\\"	Makes \" in text start a string.
>   ?\\='	Makes \\=' in text start a string.
>   ?-	Makes -- in text start a comment.
>
> When only one of ?\\\" or ?\\=' are included, \"\\='\" or \\='\"\\=', as can be found in
> DTDs, start a string.  To partially avoid this problem this also makes these
> self insert as named entities depending on `sgml-quick-keys'.
>
> Including ?- has the problem of affecting dashes that have nothing to do
> with comments, so we normally turn it off.")

The dash is not included in sgml-specials by default, but the problem
affecting dashes that have nothing to do with comments happens anyway.
Setting sgml-specials to nil in the mode hook doesn't help either.

The problematic behavior seems to come from comment-line-break-function.
One workaround I've found is to add this in my html-mode and sgml-mode
hooks to prevent the special processing of line breaks inside comments:

    (kill-local-variable 'comment-line-break-function)

Maybe comment-line-break-function should check sgml-specials and return
without doing anything if - isn't one of the specials?



In GNU Emacs 26.1 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.4)
 of 2019-02-03, modified by Debian built on zam904
Windowing system distributor 'The X.Org Foundation', version 11.0.12004000
System Description:	Debian GNU/Linux 10 (buster)

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.

Configured using:
 'configure --build x86_64-linux-gnu --prefix=/usr
 --sharedstatedir=/var/lib --libexecdir=/usr/lib
 --localstatedir=/var/lib --infodir=/usr/share/info
 --mandir=/usr/share/man --enable-libsystemd --with-pop=yes
 --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/26.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/26.1/site-lisp:/usr/share/emacs/site-lisp
 --with-sound=alsa --without-gconf --with-mailutils --build
 x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib
 --libexecdir=/usr/lib --localstatedir=/var/lib
 --infodir=/usr/share/info --mandir=/usr/share/man --enable-libsystemd
 --with-pop=yes
 --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/26.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/26.1/site-lisp:/usr/share/emacs/site-lisp
 --with-sound=alsa --without-gconf --with-mailutils --with-x=yes
 --with-x-toolkit=gtk3 --with-toolkit-scroll-bars 'CFLAGS=-g -O2
 -fdebug-prefix-map=/build/emacs-26.1+1=. -fstack-protector-strong
 -Wformat -Werror=format-security -Wall' 'CPPFLAGS=-Wdate-time
 -D_FORTIFY_SOURCE=2' LDFLAGS=-Wl,-z,relro'

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GSETTINGS NOTIFY
ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 THREADS LIBSYSTEMD LCMS2

Important settings:
  value of $LC_COLLATE: C
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message rmc puny seq byte-opt gv
bytecomp byte-compile cconv cl-loaddefs cl-lib dired dired-loaddefs
format-spec rfc822 mml easymenu mml-sec password-cache epa derived epg
epg-config gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode
mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils elec-pair time-date
mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar
dnd fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode elisp-mode lisp-mode prog-mode register page menu-bar
rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core term/tty-colors frame cl-generic cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese composite charscript charprop
case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote dbusbind inotify lcms2
dynamic-setting system-font-setting font-render-setting move-toolbar gtk
x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 95390 8152)
 (symbols 48 20395 1)
 (miscs 40 45 93)
 (strings 32 28323 1158)
 (string-bytes 1 740749)
 (vectors 16 14651)
 (vector-slots 8 497220 10982)
 (floats 8 49 68)
 (intervals 56 262 0)
 (buffers 992 11))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#36227; Package emacs. (Sun, 16 Jun 2019 00:00:01 GMT) Full text and rfc822 format available.

Message #8 received at 36227 <at> debbugs.gnu.org (full text, mbox):

From: Noam Postavsky <npostavs <at> gmail.com>
To: Akkana Peck <akkana <at> shallowsky.com>
Cc: 36227 <at> debbugs.gnu.org
Subject: Re: bug#36227: 26.1;
 sgml-mode indents as comment inside of -- text blocks
Date: Sat, 15 Jun 2019 19:59:29 -0400
severity 36227 minor
tags 36227 + confirmed
quit

Akkana Peck <akkana <at> shallowsky.com> writes:

> In emacs -Q, edit a file in html-mode (derived from sgml-mode),
> e.g. visit /tmp/foo.html.
>
> M-x auto-fill-mode <RET>
>
> Type some nonsense words with ' -- ' in the middle, like this:
>
> asd shdf ladshjkl sjdk -- asdfh jklsdfh
>
> and keep typing until it wraps.
>
> sgml-mode will wrap adding unwanted extra dashes and indentations,
> like this:
>
> asd shdf ladshjkl sjdk -- asdfh jklsdfh jasdklf hjsdkl hjsdaklf sdf --
> 		       -- jkldsfhj kalshfjkasdlfh jaksd

> The problematic behavior seems to come from comment-line-break-function.
> One workaround I've found is to add this in my html-mode and sgml-mode
> hooks to prevent the special processing of line breaks inside comments:
>
>     (kill-local-variable 'comment-line-break-function)
>
> Maybe comment-line-break-function should check sgml-specials and return
> without doing anything if - isn't one of the specials?

It's not to do with the sgml-specials, the problem is that the standard
auto-fill-function, `do-auto-fill', calls `default-indent-new-line'
which calls `comment-line-break-function' regardless of whether point is
inside a comment or not.  As far as I can tell, it works in most modes
because they disable auto-filling outside of comments in the first
place.  sgml-mode doesn't, because most of its non-comment text is just
plain text that should be filled normally.

So I think there should be a sgml-mode specific
comment-line-break-function, which checks whether it's in a comment or
not (presumably using syntax-ppss).




Severity set to 'minor' from 'normal' Request was from Noam Postavsky <npostavs <at> gmail.com> to control <at> debbugs.gnu.org. (Sun, 16 Jun 2019 00:00:02 GMT) Full text and rfc822 format available.

Added tag(s) confirmed. Request was from Noam Postavsky <npostavs <at> gmail.com> to control <at> debbugs.gnu.org. (Sun, 16 Jun 2019 00:00:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#36227; Package emacs. (Mon, 01 Feb 2021 09:44:01 GMT) Full text and rfc822 format available.

Message #15 received at 36227 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Noam Postavsky <npostavs <at> gmail.com>
Cc: 36227 <at> debbugs.gnu.org, Akkana Peck <akkana <at> shallowsky.com>
Subject: Re: bug#36227: 26.1; sgml-mode indents as comment inside of -- text
 blocks
Date: Mon, 01 Feb 2021 10:42:52 +0100
Noam Postavsky <npostavs <at> gmail.com> writes:

> So I think there should be a sgml-mode specific
> comment-line-break-function, which checks whether it's in a comment or
> not (presumably using syntax-ppss).

I've now done this in Emacs 28, and it seems to work correctly in the
scenario described.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Added tag(s) fixed. Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Mon, 01 Feb 2021 09:44:02 GMT) Full text and rfc822 format available.

bug marked as fixed in version 28.1, send any further explanations to 36227 <at> debbugs.gnu.org and Akkana Peck <akkana <at> shallowsky.com> Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Mon, 01 Feb 2021 09:44:02 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 01 Mar 2021 12:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 3 years and 28 days ago.

Previous Next


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