Subject: Re: bug#74511: 31.0.50; `dictionary-search-interface' overrides the user's customization of `dictionary-read-word-function'

From: Steven Allen <[email-masked]>
Date: Sun, 24 Nov 2024 12:36:00 -0800

Eli Zaretskii <[email-masked]> writes:

>> Date: Sun, 24 Nov 2024 10:56:08 -0800
>> From:  Steven Allen via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <[email-masked]>
>> 
>> 
>> If the user customizes `dictionary-read-word-function' then loads the
>> dictionary package, the value of `dictionary-read-word-function' will be
>> overridden when `dictionary-search-interface' is loaded. To reproduce:
>> 
>> 1. Run emacs with `emacs -Q`.
>> 2. Open a scratch buffer and evaluate the following:
>> 
>>     (setopt dictionary-read-word-function 'dictionary-completing-read-word)
>>     (require 'dictionary)
>>     (message "%S" dictionary-read-word-function)
>> 
>> I'd expect `dictionary-read-word-function' to be
>> `dictionary-completing-read-word' but instead it gets reset back to the
>> default, `dictionary-read-dictionary-default'. I can work around this by
>> calling `setopt' after loading the `dictionary' package, but ideally
>> that wouldn't be necessary.
>
> You are supposed to customize dictionary-search-interface if you want
> this mode of operation.

In addition to dictionary-search-interface, there are three separately
customizable variables:

- dictionary-display-definition-function
- dictionary-read-word-function
- dictionary-read-dictionary-function

I'd expect dictionary-search-interface to override the defaults for
these variables, but I wouldn't expect it to completely clobber any user
customizations of said variables.

If these variables cannot be customized, I'd expect them to be "defvar"
not "defcustom". Although that would be rather unfortunate because,
while I want to enable minibuffer completion for words/dictionaries, I'd
also like to use the real dictionary mode (not the help buffer).

Adding ":initialize 'custom-initialize-changed" to
dictionary-search-interface would make it possible to specify either
dictionary-search-interface or any of the other variables (but not both
at the same time).