unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#22847: #17062: 24.3 current-fill-column breaks fill-match-adaptive-prefix
@ 2016-02-29  7:33 Andreas Röhler
  2016-02-29 15:56 ` Eli Zaretskii
  0 siblings, 1 reply; 10+ messages in thread
From: Andreas Röhler @ 2016-02-29  7:33 UTC (permalink / raw)
  To: 22847

[-- Attachment #1: Type: text/plain, Size: 580 bytes --]

|reopen| #17062


Unfortunatly can't deliver a backtrace, as it was some times ago.

The bug is visible by program-logic already.

fill-match-adaptive-prefix counts on current-fill-column having:

(>= (+ (current-left-margin) (length str)) (current-fill-column))

This will be broken if current-fill-column returns nil.

Returning nil is possible, see inside current-fill-column:

     (if fill-column

If fill-column is nil, current-fill-column will return nil which was the 
case coming upon.
A fix might make sure an integer is returned anyway: think at 0 or 
default value.



[-- Attachment #2: Type: text/html, Size: 945 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#22847: #17062: 24.3 current-fill-column breaks fill-match-adaptive-prefix
  2016-02-29  7:33 bug#22847: #17062: 24.3 current-fill-column breaks fill-match-adaptive-prefix Andreas Röhler
@ 2016-02-29 15:56 ` Eli Zaretskii
  2016-12-08 22:32   ` Glenn Morris
  0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2016-02-29 15:56 UTC (permalink / raw)
  To: Andreas Röhler; +Cc: 22847

> From: Andreas Röhler <andreas.roehler@easy-emacs.de>
> Date: Mon, 29 Feb 2016 08:33:23 +0100
> 
> fill-match-adaptive-prefix counts on current-fill-column having:
> 
> (>= (+ (current-left-margin) (length str)) (current-fill-column))
> 
> This will be broken if current-fill-column returns nil.
> 
> Returning nil is possible, see inside current-fill-column:
> 
> (if fill-column
> 
> If fill-column is nil, current-fill-column will return nil which was the case coming upon.
> A fix might make sure an integer is returned anyway: think at 0 or default value.

While at that, please also fix the calculation of string length: it
should use 'string-width', not 'length', IMO.





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#22847: #17062: 24.3 current-fill-column breaks fill-match-adaptive-prefix
  2016-02-29 15:56 ` Eli Zaretskii
@ 2016-12-08 22:32   ` Glenn Morris
  2016-12-09  8:08     ` Eli Zaretskii
  0 siblings, 1 reply; 10+ messages in thread
From: Glenn Morris @ 2016-12-08 22:32 UTC (permalink / raw)
  To: 22847


So this seems like a mess.

fill-column is documented to be an integer, and that is its custom-type.
Nowhere does it say it can be nil, AFAICS.
Many places in Emacs are not prepared for it (or current-fill-column) to
be nil.

Yet 1e87252 explicitly added a check for a nil fill-column to
current-fill-column. AFAICS, do-auto-fill is the only place in Emacs
that tests for this, and uses it to disable auto-fill.

The only uses I find for "(setq fill-column nil)" are a few people using
it in their .emacs to disable auto-fill (I guess) in some major mode.
The idiomatic way to do this is just to turn off auto-fill in that mode.

TLDR:
Let's remove the test for nil fill-column in current-fill-column.






^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#22847: #17062: 24.3 current-fill-column breaks fill-match-adaptive-prefix
  2016-12-08 22:32   ` Glenn Morris
@ 2016-12-09  8:08     ` Eli Zaretskii
  2016-12-11  2:18       ` Glenn Morris
  0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2016-12-09  8:08 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 22847

> From: Glenn Morris <rgm@gnu.org>
> cc: Eli Zaretskii <eliz@gnu.org>
> Date: Thu, 08 Dec 2016 17:32:38 -0500
> 
> So this seems like a mess.

But a very old one.

> fill-column is documented to be an integer, and that is its custom-type.
> Nowhere does it say it can be nil, AFAICS.
> Many places in Emacs are not prepared for it (or current-fill-column) to
> be nil.
> 
> Yet 1e87252 explicitly added a check for a nil fill-column to
> current-fill-column. AFAICS, do-auto-fill is the only place in Emacs
> that tests for this, and uses it to disable auto-fill.
> 
> The only uses I find for "(setq fill-column nil)" are a few people using
> it in their .emacs to disable auto-fill (I guess) in some major mode.
> The idiomatic way to do this is just to turn off auto-fill in that mode.
> 
> TLDR:
> Let's remove the test for nil fill-column in current-fill-column.

I don't understand what you propose to do instead.
current-fill-column does arithmetics on fill-column when it's non-nil,
so we cannot just remove the test, because the function will then
signal an error.

I see 3 possible ways to fix these bugs:

  . Fix the code which is not prepared for fill-column being nil to be
    prepared.  This leaves everyone happy, except, perhaps, the person
    who would need to fix all those places in Emacs.

  . Change current-fill-column to return most-positive-fixnum when
    fill-column is nil.  This is an easy way out, but it might slow
    down do-auto-fill when fill-column is nil.  Not sure if we care
    about that slow down.

  . Disallow fill-column being nil and remove the test from
    current-fill-column without changing anything else, i.e. let it
    signal an error, perhaps with some text that tells this value is
    no longer supported.  This will break setups of those who use that
    value to disable auto-fill, something that was available since
    forever, so I don't think we can do that.

Comments?





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#22847: #17062: 24.3 current-fill-column breaks fill-match-adaptive-prefix
  2016-12-09  8:08     ` Eli Zaretskii
@ 2016-12-11  2:18       ` Glenn Morris
  2020-08-15  5:14         ` Stefan Kangas
  0 siblings, 1 reply; 10+ messages in thread
From: Glenn Morris @ 2016-12-11  2:18 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 22847

Eli Zaretskii wrote:

>> TLDR:
>> Let's remove the test for nil fill-column in current-fill-column.
>
> I don't understand what you propose to do instead.
> current-fill-column does arithmetics on fill-column when it's non-nil,
> so we cannot just remove the test, because the function will then
> signal an error.

Yes, I'm fine with the error.

> I see 3 possible ways to fix these bugs:
>
>   . Fix the code which is not prepared for fill-column being nil to be
>     prepared.  This leaves everyone happy, except, perhaps, the person
>     who would need to fix all those places in Emacs.

I think this would be a waste of time for the Emacs, and third party,
maintainers.

>   . Change current-fill-column to return most-positive-fixnum when
>     fill-column is nil.

I suppose this would be ok, so long as it comes with something like a
once-per session display-warning about this being an obsolete usage that
will be removed soon.

>   . Disallow fill-column being nil and remove the test from
>     current-fill-column without changing anything else, i.e. let it
>     signal an error, perhaps with some text that tells this value is
>     no longer supported.  This will break setups of those who use that
>     value to disable auto-fill, something that was available since
>     forever, so I don't think we can do that.

That's what I would do. I don't have a problem breaking an undocumented
feature that already fails in several places, and has a trivial
workaround (don't want auto-fill - don't turn it on). Other times I can
recall similar breakage happening: byte-compile of nil, setq with odd
number of arguments. People gripe for a bit, then get on with life.





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#22847: #17062: 24.3 current-fill-column breaks fill-match-adaptive-prefix
  2016-12-11  2:18       ` Glenn Morris
@ 2020-08-15  5:14         ` Stefan Kangas
  2021-05-10 11:48           ` Lars Ingebrigtsen
  0 siblings, 1 reply; 10+ messages in thread
From: Stefan Kangas @ 2020-08-15  5:14 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 22847

[-- Attachment #1: Type: text/plain, Size: 1963 bytes --]

tags 22847 + patch
thanks

Glenn Morris <rgm@gnu.org> writes:

> Eli Zaretskii wrote:
>
>>> TLDR:
>>> Let's remove the test for nil fill-column in current-fill-column.
>>
>> I don't understand what you propose to do instead.
>> current-fill-column does arithmetics on fill-column when it's non-nil,
>> so we cannot just remove the test, because the function will then
>> signal an error.
>
> Yes, I'm fine with the error.
>
>> I see 3 possible ways to fix these bugs:
>>
>>   . Fix the code which is not prepared for fill-column being nil to be
>>     prepared.  This leaves everyone happy, except, perhaps, the person
>>     who would need to fix all those places in Emacs.
>
> I think this would be a waste of time for the Emacs, and third party,
> maintainers.

Agreed.

>>   . Change current-fill-column to return most-positive-fixnum when
>>     fill-column is nil.
>
> I suppose this would be ok, so long as it comes with something like a
> once-per session display-warning about this being an obsolete usage that
> will be removed soon.

I've attached a proposed patch which does that here.

>>   . Disallow fill-column being nil and remove the test from
>>     current-fill-column without changing anything else, i.e. let it
>>     signal an error, perhaps with some text that tells this value is
>>     no longer supported.  This will break setups of those who use that
>>     value to disable auto-fill, something that was available since
>>     forever, so I don't think we can do that.
>
> That's what I would do. I don't have a problem breaking an undocumented
> feature that already fails in several places, and has a trivial
> workaround (don't want auto-fill - don't turn it on). Other times I can
> recall similar breakage happening: byte-compile of nil, setq with odd
> number of arguments. People gripe for a bit, then get on with life.

I'm perfectly fine with this solution as well, if we prefer that.

Thoughts?

Best regards,
Stefan Kangas

[-- Attachment #2: 0001-Make-nil-value-of-fill-column-obsolete.patch --]
[-- Type: text/x-diff, Size: 3066 bytes --]

From 5f41d8df85cd7e16a7a335592a02b3dc38dc9b0b Mon Sep 17 00:00:00 2001
From: Stefan Kangas <stefankangas@gmail.com>
Date: Sat, 15 Aug 2020 06:56:05 +0200
Subject: [PATCH] Make nil value of fill-column obsolete

* lisp/textmodes/fill.el (current-fill-column): Make nil value of
'fill-column' obsolete.  (Bug#22847)
(current-fill-column--has-warned): New variable to track warning.
* lisp/simple.el (do-auto-fill): Remove handling of nil return value
from 'current-fill-column'.
* etc/NEWS: Announce obsoletion of this usage.
---
 etc/NEWS               |  9 +++++++++
 lisp/simple.el         |  2 +-
 lisp/textmodes/fill.el | 11 ++++++++++-
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index e51a3630b6..227d231e9d 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -145,6 +145,15 @@ setting the variable 'auto-save-visited-mode' buffer-locally to nil.
 description of the properties.  Likewise 'button-describe' does the
 same for a button.
 
+** Setting fill-columns to nil is obsolete.
+This undocumented use of fill-columns is now obsolete.  If you have
+set this value to nil disable auto filling, stop setting this variable
+and disable auto-fill-mode in the relevant mode instead.
+
+You could add something like the following to your init file:
+
+    (add-hook 'foo-mode-hook (lambda () (auto-fill-mode -1))
+
 \f
 * Changes in Specialized Modes and Packages in Emacs 28.1
 
diff --git a/lisp/simple.el b/lisp/simple.el
index 1cb93c5722..a2b45746e2 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -7519,7 +7519,7 @@ do-auto-fill
   (let (fc justify give-up
 	   (fill-prefix fill-prefix))
     (if (or (not (setq justify (current-justification)))
-	    (null (setq fc (current-fill-column)))
+	    (setq fc (current-fill-column))
 	    (and (eq justify 'left)
 		 (<= (current-column) fc))
 	    (and auto-fill-inhibit-regexp
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el
index 15b13af568..06ae9c0ddc 100644
--- a/lisp/textmodes/fill.el
+++ b/lisp/textmodes/fill.el
@@ -139,6 +139,8 @@ adaptive-fill-function
 (defvar fill-indent-according-to-mode nil ;Screws up CC-mode's filling tricks.
   "Whether or not filling should try to use the major mode's indentation.")
 
+(defvar current-fill-column--has-warned nil)
+
 (defun current-fill-column ()
   "Return the fill-column to use for this line.
 The fill-column to use for a buffer is stored in the variable `fill-column',
@@ -164,7 +166,14 @@ current-fill-column
 			     (< col fill-col)))
 	    (setq here change
 		  here-col col))
-	  (max here-col fill-col)))))
+	  (max here-col fill-col))
+      ;; This warning was added in 28.1.  It should be removed later,
+      ;; and this function changed to never return nil.
+      (unless current-fill-column--has-warned
+        (lwarn '(fill-column) :warning
+               "Setting this variable to nil is obsolete")
+        (setq current-fill-column--has-warned t))
+      most-positive-fixnum)))
 
 (defun canonically-space-region (beg end)
   "Remove extra spaces between words in region.
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* bug#22847: #17062: 24.3 current-fill-column breaks fill-match-adaptive-prefix
  2020-08-15  5:14         ` Stefan Kangas
@ 2021-05-10 11:48           ` Lars Ingebrigtsen
  2021-05-10 13:29             ` Stefan Kangas
  0 siblings, 1 reply; 10+ messages in thread
From: Lars Ingebrigtsen @ 2021-05-10 11:48 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: 22847, Glenn Morris

Stefan Kangas <stefan@marxist.se> writes:

> +** Setting fill-columns to nil is obsolete.
> +This undocumented use of fill-columns is now obsolete.  If you have
> +set this value to nil disable auto filling, stop setting this variable
> +and disable auto-fill-mode in the relevant mode instead.

Skimming this thread, this patch makes sense to me, I think?  But it was
never applied?

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





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#22847: #17062: 24.3 current-fill-column breaks fill-match-adaptive-prefix
  2021-05-10 11:48           ` Lars Ingebrigtsen
@ 2021-05-10 13:29             ` Stefan Kangas
  2021-05-12 13:25               ` Lars Ingebrigtsen
  0 siblings, 1 reply; 10+ messages in thread
From: Stefan Kangas @ 2021-05-10 13:29 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 22847, Glenn Morris

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Stefan Kangas <stefan@marxist.se> writes:
>
>> +** Setting fill-columns to nil is obsolete.
>> +This undocumented use of fill-columns is now obsolete.  If you have
>> +set this value to nil disable auto filling, stop setting this variable
>> +and disable auto-fill-mode in the relevant mode instead.
>
> Skimming this thread, this patch makes sense to me, I think?  But it was
> never applied?

There might be a subtle problem with it after all but I can't remember
the details now.

This code is a little bit more tricky than what first meets the eye, I
think.  So I would suggest someone takes a closer look before
installing.





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#22847: #17062: 24.3 current-fill-column breaks fill-match-adaptive-prefix
  2021-05-10 13:29             ` Stefan Kangas
@ 2021-05-12 13:25               ` Lars Ingebrigtsen
  2021-07-23 12:58                 ` Lars Ingebrigtsen
  0 siblings, 1 reply; 10+ messages in thread
From: Lars Ingebrigtsen @ 2021-05-12 13:25 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: 22847, Glenn Morris

Stefan Kangas <stefan@marxist.se> writes:

> There might be a subtle problem with it after all but I can't remember
> the details now.
>
> This code is a little bit more tricky than what first meets the eye, I
> think.  So I would suggest someone takes a closer look before
> installing.

I've given the patch a try, and it seems to work as advertised.  Does
anybody else have a comment?  I've respun the patch against the current
tree and done some minor edits:

diff --git a/etc/NEWS b/etc/NEWS
index de3779cd73..3069b4d498 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -108,6 +108,16 @@ avoid security issues when executing untrusted code.  See the manual
 page for 'seccomp' system call, for details about Secure Computing
 filters.
 
+** Setting 'fill-column' to nil is obsolete.
+This undocumented use of 'fill-column' is now obsolete.  If you have
+set this value to nil disable auto filling, instead disable
+'auto-fill-mode' in the relevant mode instead.
+
+For instance, you could add something like the following to your init
+file:
+
+    (add-hook 'foo-mode-hook (lambda () (auto-fill-mode -1))
+
 \f
 * Changes in Emacs 28.1
 
diff --git a/lisp/simple.el b/lisp/simple.el
index b4e34f1e4c..d21daf9e19 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -7931,7 +7931,7 @@ do-auto-fill
   (let (fc justify give-up
 	   (fill-prefix fill-prefix))
     (if (or (not (setq justify (current-justification)))
-	    (null (setq fc (current-fill-column)))
+	    (setq fc (current-fill-column))
 	    (and (eq justify 'left)
 		 (<= (current-column) fc))
 	    (and auto-fill-inhibit-regexp
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el
index 3914bdeb83..f394171fb6 100644
--- a/lisp/textmodes/fill.el
+++ b/lisp/textmodes/fill.el
@@ -133,6 +133,8 @@ adaptive-fill-function
 (defvar fill-indent-according-to-mode nil ;Screws up CC-mode's filling tricks.
   "Whether or not filling should try to use the major mode's indentation.")
 
+(defvar current-fill-column--has-warned nil)
+
 (defun current-fill-column ()
   "Return the fill-column to use for this line.
 The fill-column to use for a buffer is stored in the variable `fill-column',
@@ -158,7 +160,14 @@ current-fill-column
 			     (< col fill-col)))
 	    (setq here change
 		  here-col col))
-	  (max here-col fill-col)))))
+	  (max here-col fill-col))
+      ;; This warning was added in 28.1.  It should be removed later,
+      ;; and this function changed to never return nil.
+      (unless current-fill-column--has-warned
+        (lwarn '(fill-column) :warning
+               "Setting this variable to nil is obsolete; use `(auto-fill-mode -1)' instead")
+        (setq current-fill-column--has-warned t))
+      most-positive-fixnum)))
 
 (defun canonically-space-region (beg end)
   "Remove extra spaces between words in region.


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





^ permalink raw reply related	[flat|nested] 10+ messages in thread

* bug#22847: #17062: 24.3 current-fill-column breaks fill-match-adaptive-prefix
  2021-05-12 13:25               ` Lars Ingebrigtsen
@ 2021-07-23 12:58                 ` Lars Ingebrigtsen
  0 siblings, 0 replies; 10+ messages in thread
From: Lars Ingebrigtsen @ 2021-07-23 12:58 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: 22847, Glenn Morris

Lars Ingebrigtsen <larsi@gnus.org> writes:

> I've given the patch a try, and it seems to work as advertised.  Does
> anybody else have a comment? 

There were no comments, so I've now pushed Stefan K's patch to the
trunk.

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





^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2021-07-23 12:58 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-29  7:33 bug#22847: #17062: 24.3 current-fill-column breaks fill-match-adaptive-prefix Andreas Röhler
2016-02-29 15:56 ` Eli Zaretskii
2016-12-08 22:32   ` Glenn Morris
2016-12-09  8:08     ` Eli Zaretskii
2016-12-11  2:18       ` Glenn Morris
2020-08-15  5:14         ` Stefan Kangas
2021-05-10 11:48           ` Lars Ingebrigtsen
2021-05-10 13:29             ` Stefan Kangas
2021-05-12 13:25               ` Lars Ingebrigtsen
2021-07-23 12:58                 ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).