* 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 external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.