[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[POLL] Should we accept breaking changes to get rid of Org libraries tha
From: |
Ihor Radchenko |
Subject: |
[POLL] Should we accept breaking changes to get rid of Org libraries that perform side effects when loading? (was: org-ctags land grab) |
Date: |
Sat, 25 Mar 2023 17:45:44 +0000 |
Max Nikulin <manikulin@gmail.com> writes:
>> Sure. This is not by itself a big deal. A number of Elisp libraries,
>> including built-in Emacs libraries are loaded with side effects.
>
> It is still violation of conventions:
>
> (info "(elisp) Coding Conventions")
> https://www.gnu.org/software/emacs/manual/html_node/elisp/Coding-Conventions.html
>> D.1 Emacs Lisp Coding Conventions
>>
>> Simply loading a package should not change Emacs’s editing behavior.
>> Include a command or commands to enable and disable the feature, or to
>> invoke it.
>>
>> This convention is mandatory for any file that includes custom
>> definitions. If fixing such a file to follow this convention requires an
>> incompatible change, go ahead and make the incompatible change; don’t
>> postpone it.
This is convincing.
I am then CCing Bastien, as, despite the Elisp convention, following it
will break https://bzg.fr/en/the-software-maintainers-pledge/
>> Note that we discussed loading side effects in
>> https://list.orgmode.org/orgmode/tn4ql0$bu2$1@ciao.gmane.io/
>
> I have not responded to that thread. My opinion is that besides
> functions that just loads files and packages there should be
> counterparts that loads and activates libraries. A proof of concept may
> be implemented for Org and in the case of success it may be proposed for
> inclusion into Emacs core.
Maybe. We can do something similar to `unload-feature'. However, it will
still require users to adapt.
Tentative implementation:
(defun enable-feature (feature &optional filename noerror)
"Load and enable FEATURE.
FILENAME and NOERROR arguments are the same as in `require'."
(when (require feature filename noerror)
(let ((enabler-cmd (intern (format "%s-enable-function" feature))))
(and (fboundp enabler-cmd) (funcall enabler-cmd)))))
(defun disable-feature (feature)
"Disable FEATURE."
(let ((disabler-cmd (intern (format "%s-disable-function" feature))))
(and (fboundp disabler-cmd) (funcall disabler-cmd))))
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>