GNU bug report logs - #79417
31.0.50; Improve ispell.el documentation

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Reported by: Lockywolf <for_emacs_1@HIDDEN>; dated Wed, 10 Sep 2025 02:14:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 25 Nov 2025 20:31:52 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 25 15:31:52 2025
Received: from localhost ([127.0.0.1]:42317 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vNzhX-0004qu-98
	for submit <at> debbugs.gnu.org; Tue, 25 Nov 2025 15:31:51 -0500
Received: from fhigh-b8-smtp.messagingengine.com ([202.12.124.159]:51713)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <rudolf@HIDDEN>)
 id 1vNHYc-0005XM-S5
 for 79417 <at> debbugs.gnu.org; Sun, 23 Nov 2025 16:23:43 -0500
Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45])
 by mailfhigh.stl.internal (Postfix) with ESMTP id 3972B7A006D;
 Sun, 23 Nov 2025 16:23:37 -0500 (EST)
Received: from phl-mailfrontend-02 ([10.202.2.163])
 by phl-compute-05.internal (MEProxy); Sun, 23 Nov 2025 16:23:37 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adamkovic.org;
 h=cc:cc:content-transfer-encoding:content-type:content-type
 :date:date:from:from:in-reply-to:in-reply-to:message-id
 :mime-version:references:reply-to:subject:subject:to:to; s=fm2;
 t=1763933017; x=1764019417; bh=+AzYnbgpU78LL7X+6rYNgVJPDYQ1wvgM
 84ijIc/2JbU=; b=hvXb0iq/FJ8eTXeQ479Fj59Z1FMT/ZzMcKzCr+6PBQJzVGRK
 gJNr+elAdC7A6rG5m8CAm9MeyjKCpX9bspN5qpmWYrZqWnP2KLMNpAS7Crlw6nXk
 J8MfX/5kJ3SDe4vswaDxKBU36kSnbJtFFtBnfxeQsca2niq+RhpE/EFKT76TvGU2
 p2ixVEKq4jHcnDCiuo6TasYgnUFrGQNC9enNrDJHCEUN3cWPw7y/kgVZ0yRR3mvq
 4tCbrGjBF4YQn8pQWQEuMQcVvkEc9cJ9z7ZY+ecX0mcKGZ66c8BOTzURUJnYwa3f
 xwQHS/vLKdte3puHK49SU1xTNcfjgH8GirkpFw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:content-type:date:date:feedback-id:feedback-id
 :from:from:in-reply-to:in-reply-to:message-id:mime-version
 :references:reply-to:subject:subject:to:to:x-me-proxy
 :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1763933017; x=
 1764019417; bh=+AzYnbgpU78LL7X+6rYNgVJPDYQ1wvgM84ijIc/2JbU=; b=y
 4DQe1ksh9mwj1ZmMHhmECcHVIZeg+rXHFLrIKnfhG0lkkxNdY7MpVMY6dwkoufxM
 UYBkFBhGk3WO5UCdfqxMMmbSaEGNgNLe5rtJIaIeYMdBA3Ju86egQWif83vAok5q
 GdXnAV6OYL3nYASE1cHXGYJUxk7BERFIcST0W4gasJ9DHhXv2pSpN8k9ZXQLMG1b
 kCHY6u8OadTtUaE/W/G0nV7icC5/+E5YImqm6nnt7g3A1eiu0ZU08SyO24iLB91l
 VtZUTlFXF/cmS/oteTcAmaJpIROdR5xKMFJKcdk8Pw7e3FOwjGyrECSKMChW3ilv
 GJ38dYlJzs2Py+jnC6Vdw==
X-ME-Sender: <xms:WHsjaaENEMyVy3MuyICwakB5bqFayK9qoz6-xLxiuknH5dvjRPQ53Q>
 <xme:WHsjadl3TnxV3gCyiIX9MJEjrS8nW72OvOTQl1By9wmKJl7EMXHMdxBYyRyBrn9gv
 iSrd5zgfpSJxFF8CghAmP8d6c4y96BofY9tlZEza6eDNpodlNRgaAw>
X-ME-Received: <xmr:WHsjaWbZZQKYcJTsKA7DURMeZ-Wde3-xDV3cZR8VuqwhKFkJ-a6BWFJR4rHEUN-nrgTZBFlhT72PuneI8I-rou9ku0t61wg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvfeeijeelucetufdoteggodetrf
 dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu
 rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujf
 gurhephffvvefujghffffkgggtgfesthhqredttddtjeenucfhrhhomheptfhuugholhhf
 ucetuggrmhhkohhvihgtuceorhhuugholhhfsegruggrmhhkohhvihgtrdhorhhgqeenuc
 ggtffrrghtthgvrhhnpeeiueetheffudfghfeggeevheevvddtkefflefhueeludfgtefg
 ffeltdfhudejgeenucffohhmrghinheprggurghmkhhovhhitgdrohhrghenucevlhhush
 htvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehruhguohhlfhesrggu
 rghmkhhovhhitgdrohhrghdpnhgspghrtghpthhtohepjedpmhhouggvpehsmhhtphhouh
 htpdhrtghpthhtohepvghmrggtshdquggvvhgvlhesghhnuhdrohhrghdprhgtphhtthho
 pegrrhhsthhofhhfvghlsehgmhgrihhlrdgtohhmpdhrtghpthhtohepjeelgedujeesug
 gvsggsuhhgshdrghhnuhdrohhrghdprhgtphhtthhopeihrghnughrohhssehgmhgrihhl
 rdgtohhmpdhrtghpthhtoheprhhmshesghhnuhdrohhrghdprhgtphhtthhopehkrhhish
 gsrghlihhnthhonhgrsehgmhgrihhlrdgtohhmpdhrtghpthhtohepvghlihiisehgnhhu
 rdhorhhg
X-ME-Proxy: <xmx:WHsjaaGiZvO12jP3GkjLMqFFY3z2VTqzkpatLWu-yPBruxU_74WzAQ>
 <xmx:WHsjafK48KpXXeZqV1iY9zBMTmfGECYS1zG9F7LaHwOWz-SoEhgy6Q>
 <xmx:WHsjadOKDbzDXGwU4myHZ9Au8gEEemmhRfHM267aXO7ppl0GRSWpOA>
 <xmx:WHsjaXkJ3KRCYJDKuZ1zCFT8-l8Aard8fMgEtSwhZMKPsIjS93pCYQ>
 <xmx:WXsjaWE6nARcFMcKJdmX5DqzYbF-NxxVagxenQTvOC3W8oLDEddsAVgb>
Feedback-ID: i88214938:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun,
 23 Nov 2025 16:23:35 -0500 (EST)
From: Rudolf =?utf-8?Q?Adamkovi=C4=8D?= <rudolf@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>, Kristoffer Balintona
 <krisbalintona@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <86ecpqh2nk.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
 <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
 <m2jyzmgx5k.fsf@HIDDEN> <865xb6jg3d.fsf@HIDDEN>
 <m2seeax89s.fsf@HIDDEN> <86see9j51y.fsf@HIDDEN>
 <m2ms4fxcwv.fsf@HIDDEN>
 <CANVbq5n+LpHfx7yU+KDU7G8qZfp3fQfwHObjOOY5vfndbTBM7w@HIDDEN>
 <86ecpqh2nk.fsf@HIDDEN>
Date: Sun, 23 Nov 2025 22:23:32 +0100
Message-ID: <m2see4v3xn.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN, rms@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Eli Zaretskii <eliz@HIDDEN> writes:

> I guess what this boils down to is that some people simply are
> unaccustomed to menus, and prefer *Completions* style popup buffers.

Eli, how can you say that?  As explained multiple times, the popup does
not offer the needed functionality, including basic visible and editable
user input, and also fuzzy matching within the suggested words, ideally
one that respects the completion style.  It does not boil down to "some
people are simply unaccustomed to menus", and if you think so, then I
failed badly at communicating.

> Which is fine by me, as personal preferences go (although I'd still
> would like to hear from Richard why he considers menus inconvenient),
> so feel free to offer optional completions-buffer UI for this.
> There's no reason for us to argue about personal preferences.

1+ and thank you.

Rudy
--=20
"Programming reliably -- must be an activity of an undeniably
mathematical nature [=E2=80=A6] You see, mathematics is about thinking, and
doing mathematics is always trying to think as well as possible."

--- Edsger W. Dijkstra, 1981

Rudolf Adamkovi=C4=8D <rudolf@HIDDEN> [he/him]
http://adamkovic.org




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 25 Nov 2025 20:31:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 25 15:31:18 2025
Received: from localhost ([127.0.0.1]:42287 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vNzgy-0004Td-Mh
	for submit <at> debbugs.gnu.org; Tue, 25 Nov 2025 15:31:18 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:48624)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vMjLA-0004Gn-TI
 for 79417 <at> debbugs.gnu.org; Sat, 22 Nov 2025 03:51:35 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vMjKb-0001Yd-E0; Sat, 22 Nov 2025 03:50:57 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=KHqNIyX2mnBrlz9LcBm6CX2I3fzpJ6FeV0Tq2S6KFU4=; b=I8Omk0IClM92BUHCVu1+
 O/gLAGlN7Luxm4ueCmSJidN4cqjF2eOlYHOBvYgAA5Lf27E+eZRuiY8plgZiPUCgha6xDUgz4mHwM
 BruAYLoIjlZK4+r/vWPF697qy8BVbOOCnoHswLg2zBRLCqO9YSv6sk+4SeSEODsJXXz7vuI5CxR8+
 wmWkzi0FHV6nLcK0rKOHUrGF3t1kPiqP2EhMqMWqVDvC9LyTMO28GZlfJGDBiKqAS24/HCxs2fSQJ
 nqAegfKtTNw9vfTS+TvlnKKbfQJOVvJAgMJADY7TqdfXhwLc+SjZidekRDknyeHQ6MQPcEO5o/2YI
 Ptv/0bbbEGvwWA==;
Date: Sat, 22 Nov 2025 10:50:23 +0200
Message-Id: <86ecpqh2nk.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <CANVbq5n+LpHfx7yU+KDU7G8qZfp3fQfwHObjOOY5vfndbTBM7w@HIDDEN>
 (message from Kristoffer Balintona on Fri, 21 Nov 2025 20:15:26 -0800)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
 <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
 <m2jyzmgx5k.fsf@HIDDEN> <865xb6jg3d.fsf@HIDDEN>
 <m2seeax89s.fsf@HIDDEN>
 <86see9j51y.fsf@HIDDEN> <m2ms4fxcwv.fsf@HIDDEN>
 <CANVbq5n+LpHfx7yU+KDU7G8qZfp3fQfwHObjOOY5vfndbTBM7w@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: rudolf@HIDDEN, rms@HIDDEN, 79417 <at> debbugs.gnu.org,
 emacs-devel@HIDDEN, yandros@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Kristoffer Balintona <krisbalintona@HIDDEN>
> Date: Fri, 21 Nov 2025 20:15:26 -0800
> Cc: rms@HIDDEN, yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
>  emacs-devel@HIDDEN
> 
> On Fri, Nov 21 2025, Rudolf Adamkovič wrote:
> 
> >> Professional editors?  MS Word shows a very similar menu, FWIW.  Is
> >> that professional enough for us?
> >
> > I have never used Word personally, so you know better in that regard.
> > But in my mind, I expect a professional editor to have a spell checker
> > with editable input, partial matching, and then more (built on top of
> > a solid foundation, once in place).
> 
> To add, I think in the context of Word it makes sense to only have a
> popup-based word-correction UI, since using the mouse is the primary
> means of navigation and interaction there (aside from using the keyboard
> when typing). On the other hand, Emacs is very keyboard-centric (as a
> fact and also as an expectation of many of its users), so it makes more
> sense here for there to be a keyboard-only word-correction UI.

You've changed the subject.  I was responding to a claim that showing
a menu with candidate replacements was "unprofessional".  The claim
about mouse interaction was already refuted earlier:

> (Eli has already informed me that you can use your keyboard arrow keys
> to select the candidates in the popup menu, but Rudy explained why that
> popup menu may not be ideal/appealing for the purposes of
> word-correction.)

I guess what this boils down to is that some people simply are
unaccustomed to menus, and prefer *Completions* style popup buffers.
Which is fine by me, as personal preferences go (although I'd still
would like to hear from Richard why he considers menus inconvenient),
so feel free to offer optional completions-buffer UI for this.
There's no reason for us to argue about personal preferences.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 25 Nov 2025 20:16:58 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 25 15:16:58 2025
Received: from localhost ([127.0.0.1]:55359 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vNzT7-0005Ck-RV
	for submit <at> debbugs.gnu.org; Tue, 25 Nov 2025 15:16:58 -0500
Received: from fout-b2-smtp.messagingengine.com ([202.12.124.145]:47823)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <rudolf@HIDDEN>)
 id 1vMZCt-0007HV-05
 for 79417 <at> debbugs.gnu.org; Fri, 21 Nov 2025 17:02:35 -0500
Received: from phl-compute-11.internal (phl-compute-11.internal [10.202.2.51])
 by mailfout.stl.internal (Postfix) with ESMTP id 3C5ED1D000FF;
 Fri, 21 Nov 2025 17:02:11 -0500 (EST)
Received: from phl-mailfrontend-02 ([10.202.2.163])
 by phl-compute-11.internal (MEProxy); Fri, 21 Nov 2025 17:02:11 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adamkovic.org;
 h=cc:cc:content-transfer-encoding:content-type:content-type
 :date:date:from:from:in-reply-to:in-reply-to:message-id
 :mime-version:references:reply-to:subject:subject:to:to; s=fm1;
 t=1763762531; x=1763848931; bh=p5OH9dR3qZ0e/kgCavoKvpJ6yXPyc4X9
 GkRgiaSM4oY=; b=d47PTvUkuGsDdgga8hJpXDEMrke7HyS8jL+euSPgMT6fIOyS
 lq9GlcmSIpykFmr9uwDBBqmt04y+ujzaR/JhWgvCCl9kUSPWzMkGSe8zjvfcMJW3
 ixa6yK7qRpLZD8LIXSFNBhnl2zSU+6oWwZO+6CW2Yt1Zo/DPOEEJzPzSBvCX5XaP
 10eHnJjD7l92+dB2Ai9YJQel1L0xn3daYCHrMxyivi/XQfK1dM8o+u11rmHojDV/
 6/3aO79Gm7eBMinPixw5up9aghLX9r8Npop/1qeNyvG+tE+ozbHc0Lj2KmIZAxnt
 8jFxQCRoLozyan56uck0ofyDCcljvuYyFTkk3g==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:content-type:date:date:feedback-id:feedback-id
 :from:from:in-reply-to:in-reply-to:message-id:mime-version
 :references:reply-to:subject:subject:to:to:x-me-proxy
 :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1763762531; x=
 1763848931; bh=p5OH9dR3qZ0e/kgCavoKvpJ6yXPyc4X9GkRgiaSM4oY=; b=Y
 fpyMh9/XSiWfCjl11i70kbvPtqqx0YXHMRCmlDVxuv3FhjXFDNpgjM/whSsey/ov
 xK6zlcZMHeYh8ccnmDAS53MRAWJJiiAF0gl52VaFSvDe+wj9jWSalJgMuJRvwbL3
 FP/85P4pym3+bVORpHEiemkigVVTr4W9QaqHbLexzcSWXmDXkeGgkgFLu2Jv4qBs
 YeWT8tzGs2WC22XGQBYC9dPr2GWRx/n9Cg1KEFcsf44U7PV2orsrJo9TLuZAmVIO
 L0AFa5lApgH2j53RyAiDyPBy9II/J6Jw0a5YXSm8U4fG4rjpm6nOLvLQOfrDSxbX
 H4nTShAHqbDE+1hYiCfDQ==
X-ME-Sender: <xms:YuEgaSJ2yEiu9XjPHiNgZQd8qPc2sXfVoK6wOkI1VTmW6jX-Ku59FQ>
 <xme:YuEgacbconmhegxL3mZjgHRQwBwO81d9VfFuchHlJ5MU3XzpZajf-KvWxwXeqSnjT
 8oFpImKjjGIn0a8ovFbxQ5x8cQkQ2XfPJ6z9HXBlKcWz9qgOVwywEE>
X-ME-Received: <xmr:YuEgaU_AfULh03sn_JcT5AP6ER5XS1avJm7TaXVyKK8McISbwRPDEGMvQR3tS1sBum1-7T3JvgUUg9WyUZanFJuwR0vz91I>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvfeduudduucetufdoteggodetrf
 dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu
 rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujf
 gurhephffvvefujghffffkgggtgfesthhqredttddtjeenucfhrhhomheptfhuugholhhf
 ucetuggrmhhkohhvihgtuceorhhuugholhhfsegruggrmhhkohhvihgtrdhorhhgqeenuc
 ggtffrrghtthgvrhhnpeeiueetheffudfghfeggeevheevvddtkefflefhueeludfgtefg
 ffeltdfhudejgeenucffohhmrghinheprggurghmkhhovhhitgdrohhrghenucevlhhush
 htvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehruhguohhlfhesrggu
 rghmkhhovhhitgdrohhrghdpnhgspghrtghpthhtohepjedpmhhouggvpehsmhhtphhouh
 htpdhrtghpthhtohepvghmrggtshdquggvvhgvlhesghhnuhdrohhrghdprhgtphhtthho
 pegrrhhsthhofhhfvghlsehgmhgrihhlrdgtohhmpdhrtghpthhtohepjeelgedujeesug
 gvsggsuhhgshdrghhnuhdrohhrghdprhgtphhtthhopeihrghnughrohhssehgmhgrihhl
 rdgtohhmpdhrtghpthhtoheprhhmshesghhnuhdrohhrghdprhgtphhtthhopehkrhhish
 gsrghlihhnthhonhgrsehgmhgrihhlrdgtohhmpdhrtghpthhtohepvghlihiisehgnhhu
 rdhorhhg
X-ME-Proxy: <xmx:YuEgadZJ1aNbYCSXfjMHQhvwftLO81OD7_s4BX5hwoVwc35fX-OoGg>
 <xmx:YuEgaYOII0_a2eozVXZ3UuL2ifUacO3_f9mxCAO-lUqrIEGq8qZIdw>
 <xmx:YuEgaZAx2GMqmMIDrQFAqdYQUqzWUlpbkyWvFXkLXiqpfsd0uU-zFA>
 <xmx:YuEgafLVLsRAXbhZf2oL4HhqJB15HwQ8azroLZ-hCtuNgjU4vLLTMg>
 <xmx:Y-Egab5A0boaZCmmawyggKzTIVbB8OC172Om5V5DBw1NHtpVE7Ke07lP>
Feedback-ID: i88214938:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri,
 21 Nov 2025 17:02:09 -0500 (EST)
From: Rudolf =?utf-8?Q?Adamkovi=C4=8D?= <rudolf@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <86see9j51y.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
 <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
 <m2jyzmgx5k.fsf@HIDDEN> <865xb6jg3d.fsf@HIDDEN>
 <m2seeax89s.fsf@HIDDEN> <86see9j51y.fsf@HIDDEN>
Date: Fri, 21 Nov 2025 23:02:08 +0100
Message-ID: <m2ms4fxcwv.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: krisbalintona@HIDDEN, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN,
 yandros@HIDDEN, arstoffel@HIDDEN, rms@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Eli Zaretskii <eliz@HIDDEN> writes:

> And yes, I also sometimes have only vague idea of what is the correct
> spelling of the word, so I just type the best approximation I can come
> up with, and ask Flyspell to suggest how to fix it.

Exactly.  And sometimes, the resulting list of candidates is long, with
a large number of distant suggestions.  The problem is then to narrow
that list down in seconds, ideally with fuzzy search.  This can be done
with Completing Read but not with the GUI popup.

>> The GUI popup?  The search is prefix-only, with hidden one-time input,
>> which prevents any kind of word exploration.  It may be good enough for
>> a web browser, to quickly fix a typo.  A professional text editor like
>> Emacs should *default* to something better, IMHO.
>
> I think we are not talking about the same thing.  The popup is not
> "prefix-only", it's a menu that shows candidate replacements for the
> misspelled word, one below the other.  And I don't know what you mean
> by "hidden one-time input".

On my system (NS), I can navigate in the GUI popup with the keyboard, or
type a couple couple of letters to jump to a particular a word that
starts with them.  However, the search is prefix-only, the user input is
invisible, and nothing is undo/redo-able when a mistake is made.  Put
simply, the UI is too basic and error-prone.

> Professional editors?  MS Word shows a very similar menu, FWIW.  Is
> that professional enough for us?

I have never used Word personally, so you know better in that regard.
But in my mind, I expect a professional editor to have a spell checker
with editable input, partial matching, and then more (built on top of
a solid foundation, once in place).

Rudy
--=20
"Be especially critical of any statement following the word
'obviously.'"

--- Anna Pell Wheeler, 1883-1966

Rudolf Adamkovi=C4=8D <rudolf@HIDDEN> [he/him]
http://adamkovic.org




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 25 Nov 2025 20:16:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 25 15:16:30 2025
Received: from localhost ([127.0.0.1]:55322 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vNzSf-0005AO-An
	for submit <at> debbugs.gnu.org; Tue, 25 Nov 2025 15:16:29 -0500
Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]:48491)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <krisbalintona@HIDDEN>)
 id 1vMf28-0005oD-5y
 for 79417 <at> debbugs.gnu.org; Fri, 21 Nov 2025 23:15:37 -0500
Received: by mail-lf1-x12a.google.com with SMTP id
 2adb3069b0e04-5943b62c47dso2686136e87.1
 for <79417 <at> debbugs.gnu.org>; Fri, 21 Nov 2025 20:15:36 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763784928; x=1764389728; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date
 :mime-version:references:in-reply-to:from:from:to:cc:subject:date
 :message-id:reply-to;
 bh=szBQZP4g+auICYnPmOT90GgOGA71PcwNNuDeI4Lf7Fw=;
 b=S+WLc3lpAp6a363I6sPGEtD9G9b6xfOk1y5HWaH7EXjieBP5XzXxFyA5hSWvLKm9To
 GINrmavSripiICyUE9YLk8WmzkjuViKJ8zxd6fNP++koEtSzDpGApBEGsFXUreic3Mgv
 CdnFQ2h4HdZGxUu20VbDAfWhocvZ7xPFi2GTjMa8e3WvYDmMsL5gak8Weueko0LNPqdh
 yib6aDvdvdo6ntqBPzciVbVC77MSWejmI6Erm/n5qQ0EqvKHQPsLW8z5hNktb4a/sLk3
 HxbmtmH1SYfzM5pdk3b/Lp6YkQ1n83tsSymyl0oilCWs3hRyCpb5sHNyIYxS2heuM0Wm
 ZywA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763784928; x=1764389728;
 h=content-transfer-encoding:cc:to:subject:message-id:date
 :mime-version:references:in-reply-to:from:x-gm-gg:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=szBQZP4g+auICYnPmOT90GgOGA71PcwNNuDeI4Lf7Fw=;
 b=JsGbWIDPeYdr1KSG2rfxObd5PCtsAhDOp9b4w0fGqwHIrJCQOiR/iL01EmgMotq8TL
 faaGEIkBFtFDODHUSa+MZgG/1CBJuIv0MBrqRikZ0zmQs+j19IRHxFExACZ3TkriGDgT
 2puwQ/SvnKk3TPCTLfnuqlK3m9XLJVzvC7+Tzlq3d+0MopzCfzwOsmLoAcfMSVBuV2Pp
 pjbiNEvDXM21i7PgpJJ04NkhxvOqAbQu3utAWotBInygu01GuINqJvXO1ACRJEoePNql
 81/vgTR6nxQ52tJdEDXOFdEtpbQ3vJiMd/9n8zoWhsfQOgakWXkvCva2wiXhS6LlIsF7
 J8dA==
X-Forwarded-Encrypted: i=1;
 AJvYcCX/TZmCEtu94aof+Fc7S0PvOaiKOy5NwcvoDFoVC1JAvSBetjL/9uwNsCNR9TCVvCclF/ytDg==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YzHwjOaEvEBtmUJWuUy5HBsvNBftxPp7OsVpq49sdIb/X/whfqv
 ITdeiiJVEW6sQuX916wvOgno/Mxecnx+2KgM5HQ0o8IFotry2KlWiH+xBX756TRBS0ckokPGoUC
 vTet7JAfC/Dm2muMo9B0Os6zp54LZT/c=
X-Gm-Gg: ASbGncshDLMm5WWg0ROtjyU1MDzGvqBLfh4mGwLIFzg39+60E72cq9+6eU1Ayxcu/wu
 4ViF53sUAY99EplbkaO6qlMjlDmFhsebEOlaOhPqp1o8FoFGkZ4dKQEsDxT/yX0IZsQLezeKSXF
 UyiBBqy4NNH8qlnnOLv698lmMqqHP0+99U1JbZL83lhGa0LC4BIYvG4WLNj3hXlqIgwLu7J+2LV
 fZQBjKCjf9BImUgUwY7ub1qDtyNlltb/N9jykuVLCcUaxS/4ehQ6VnWXdvwlD03RFkz2MI=
X-Google-Smtp-Source: AGHT+IFdw1XkbIpOYaCTRJt7xTub0UVuJMOTi0oGh6mn0jU1OQTEwCZgHoSP/vgLZsIrfM+12pbpLYPnlpfD4VswFOw=
X-Received: by 2002:a05:6512:3d1f:b0:594:2e7e:7897 with SMTP id
 2adb3069b0e04-596a3ecee86mr1504587e87.29.1763784927445; Fri, 21 Nov 2025
 20:15:27 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Fri, 21 Nov 2025 20:15:26 -0800
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Fri, 21 Nov 2025 20:15:26 -0800
From: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <m2ms4fxcwv.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
 <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
 <m2jyzmgx5k.fsf@HIDDEN> <865xb6jg3d.fsf@HIDDEN>
 <m2seeax89s.fsf@HIDDEN>
 <86see9j51y.fsf@HIDDEN> <m2ms4fxcwv.fsf@HIDDEN>
MIME-Version: 1.0
Date: Fri, 21 Nov 2025 20:15:26 -0800
X-Gm-Features: AWmQ_bmQmITMKHIdNvK1zZTwtQf6FJtipjSdGtQUfowTnh7AMinjo7XJuYHmLj0
Message-ID: <CANVbq5n+LpHfx7yU+KDU7G8qZfp3fQfwHObjOOY5vfndbTBM7w@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
To: =?UTF-8?Q?Rudolf_Adamkovi=C4=8D?= <rudolf@HIDDEN>, 
 Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN, rms@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Nov 21 2025, Rudolf Adamkovi=C4=8D wrote:

>> Professional editors?  MS Word shows a very similar menu, FWIW.  Is
>> that professional enough for us?
>
> I have never used Word personally, so you know better in that regard.
> But in my mind, I expect a professional editor to have a spell checker
> with editable input, partial matching, and then more (built on top of
> a solid foundation, once in place).

To add, I think in the context of Word it makes sense to only have a
popup-based word-correction UI, since using the mouse is the primary
means of navigation and interaction there (aside from using the keyboard
when typing). On the other hand, Emacs is very keyboard-centric (as a
fact and also as an expectation of many of its users), so it makes more
sense here for there to be a keyboard-only word-correction UI.

(Eli has already informed me that you can use your keyboard arrow keys
to select the candidates in the popup menu, but Rudy explained why that
popup menu may not be ideal/appealing for the purposes of
word-correction.)

--=20
Kind regards,
Kristoffer




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 19 Nov 2025 17:39:07 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 19 12:39:07 2025
Received: from localhost ([127.0.0.1]:39564 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vLm94-0007H6-O3
	for submit <at> debbugs.gnu.org; Wed, 19 Nov 2025 12:39:07 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:56354)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vLm92-0007GU-G6
 for 79417 <at> debbugs.gnu.org; Wed, 19 Nov 2025 12:39:05 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vLm8w-0005Vo-VM; Wed, 19 Nov 2025 12:38:58 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=5turRqXptbkWQugwlxOQ/YUn21/zlHKNVpuhx+Z+oys=; b=glEdvZmwlR2ux9jK1A2R
 CmDc0tObwd7sFf2YthS4aZjCjmTqgbvrhT8Lwh3ZXqiEYZHpoUQKa/3aQBdnfYm32OQaNYWRS/2fC
 vKQDSWsKrBVMXpcu71pVg2XYPZY/T1W5mN7mgXqfrdwuY1WuPGoqV83wV4xXl/gfGahFMbYIrIxa1
 WhmIED8Aw1AYBPK41kdauLlQC480f5UYogZ3HqL+rVoVna/gPYtivNdIR+cX7rIktdGb2/bmqXwzw
 DiIczsbNd5Usk8tmBZ7QbLAVYrIXp75S/SFs6YxJCwpNp4DwGTo70HYbjoq+HgBd1EWrs4T3oP0wu
 CA1qwpE7jDQTfA==;
Date: Wed, 19 Nov 2025 19:38:49 +0200
Message-Id: <86see9j51y.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Rudolf =?utf-8?Q?Adamkovi=C4=8D?= <rudolf@HIDDEN>
In-Reply-To: <m2seeax89s.fsf@HIDDEN> (message from Rudolf
 =?utf-8?Q?Adamkovi=C4=8D?= on Wed, 19 Nov 2025 18:05:35 +0100)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
 <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
 <m2jyzmgx5k.fsf@HIDDEN> <865xb6jg3d.fsf@HIDDEN>
 <m2seeax89s.fsf@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: krisbalintona@HIDDEN, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN,
 yandros@HIDDEN, arstoffel@HIDDEN, rms@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Rudolf Adamkovič <rudolf@HIDDEN>
> Cc: krisbalintona@HIDDEN, rms@HIDDEN, yandros@HIDDEN,
>  79417 <at> debbugs.gnu.org, arstoffel@HIDDEN, emacs-devel@HIDDEN
> Date: Wed, 19 Nov 2025 18:05:35 +0100
> 
> As a non-native speaker, I have two use-cases:
> 
>   - Case 1: I do not know how to spell the word.
>   - Case 2: I have a fuzzy recollection of the word in general.
> 
> Here is a typical workflow for Case 1:
> 
> (1) Flyspell marks a word as misspelled.
> (2) I repeatedly filter the list of suggestions:
> 
>     - Maybe there are two "s".  Nope.
>     - Maybe ... Nope, nope, nope.
>     - Dang, there are two "o" and two "s".  Gotcha!
> 
> This can be done in seconds with Completing Read, especially when
> coupled with super-fast UI such as Vertico.

The above tells me that you should probably switch to a better
spelling back-end (I suggest Hunspell).  In my case, the suggestions
popped up by Flyspell always include the correct one, I need just to
identify it and select it.  And yes, I also sometimes have only vague
idea of what is the correct spelling of the word, so I just type the
best approximation I can come up with, and ask Flyspell to suggest how
to fix it.

> The GUI popup?  The search is prefix-only, with hidden one-time input,
> which prevents any kind of word exploration.  It may be good enough for
> a web browser, to quickly fix a typo.  A professional text editor like
> Emacs should *default* to something better, IMHO.

I think we are not talking about the same thing.  The popup is not
"prefix-only", it's a menu that shows candidate replacements for the
misspelled word, one below the other.  And I don't know what you mean
by "hidden one-time input".  Professional editors?  MS Word shows a
very similar menu, FWIW.  Is that professional enough for us?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 19 Nov 2025 17:19:34 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 19 12:19:33 2025
Received: from localhost ([127.0.0.1]:39416 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vLlq9-0005hX-1t
	for submit <at> debbugs.gnu.org; Wed, 19 Nov 2025 12:19:33 -0500
Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]:60893)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <krisbalintona@HIDDEN>)
 id 1vLlq6-0005ge-VZ
 for 79417 <at> debbugs.gnu.org; Wed, 19 Nov 2025 12:19:31 -0500
Received: by mail-lf1-x12e.google.com with SMTP id
 2adb3069b0e04-59581e32163so7070169e87.1
 for <79417 <at> debbugs.gnu.org>; Wed, 19 Nov 2025 09:19:30 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763572765; x=1764177565; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date
 :mime-version:references:in-reply-to:from:from:to:cc:subject:date
 :message-id:reply-to;
 bh=FnOYDnQsc7WFoWSUvw1QJkwvZNZyIJV1FRozNiyOse0=;
 b=jt1gGGLSAaOg7fHP0f99WF1SiLiNYyNk/4xcLgzRev3e8cFlfY1hV0ZA+yBsNQ2A7t
 F6qx/bAuy3lSnv4eTy2gfRPhsR7aM6i3d/P4FPqtzP7DbYX5VvssVMMpXxMdexxr4L0T
 xeWQ0U9U85C3K8q8ezgwtxRZHYBoVP92IPreIMb9zaAm3C/vGnkXFUaGKgC8EYyF3Ozl
 AQXhnRN7YSgzMD0PyzHH7UadedHTeCbKdjVoj6qyTYTnA11/I7colIZTvrtJ600x+PBd
 GwAziLTKXJkO/iML/F4oDG/QyG6XGDRX1qORjWM3z0w0lAXOv8LoQ2CK3A0VLq/TwFp4
 awyw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763572765; x=1764177565;
 h=content-transfer-encoding:cc:to:subject:message-id:date
 :mime-version:references:in-reply-to:from:x-gm-gg:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=FnOYDnQsc7WFoWSUvw1QJkwvZNZyIJV1FRozNiyOse0=;
 b=HVjYN3uiW1gm0zdxoNBZE0QngH0bqlEk3TX4Z10seczmlJMEBosI8zsA+X4lBEK9ji
 QfQPdtH0F0JJUet+zKmOsUadYKFDXxsfOZ27B+07Dha5+CRn1uCZS3cq9ZKL7C8Csy2j
 M50XsK36xEUXLGDzEGDV3nqpT1T/MdagATk2p2v2XcZOnqGBBEOSjj2dWMwOrI1oJOxR
 lcASMlscNaMhDUWIKBkZQ4YLUX8Op+vLN5PsSXUMf1rqmgKCHY5R28guwS7X1b2p5bhQ
 hrcdSW1tgYysY4l0V6o7Ni1Y7EeVRctfCFelqkfOMEphKr9XhLB18EvZifxZr4oOZlO6
 BxGw==
X-Forwarded-Encrypted: i=1;
 AJvYcCXf8J3MAf4EAp+dd8d9v/HwC/kJjyGHyfwAiFIE86PqomR+QJRe9YhjGw5BfuM4DxsdDFyDKQ==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YxwbFfH8JFKfbzyF9kXDP2XctOYlM5ZwH+HAya1txZDEE6zo+M1
 O7IkFDMbr5PtGTVnr+hBdGMaI/1uZPgr4brtFqkSfs0mEn1XcvB0klbCK3cJsB4WHWa2YNM6SFL
 cNN0tEPoBLTADNylrqhEgGaSKqLrQNjw=
X-Gm-Gg: ASbGncvG7NBq3+Jaw9hQHXwkiroOAH4qhEvMCA57ZrnBZS6f0nV+r7oEd78fJh0oYVj
 VXfGp7molS7MwUbwLU793aIoaY3Mjy+S9HWnMJoh8+niH9WicM+JcqoiLBIEERuL7aYuwrTL1h5
 cOvlNRvalOGOF04jYVWtf7NWpYANrlVSC3XtqiQBQX6yM8Mu0zRIdZLTR2h3Jp8GkNpWdviDHR3
 QkP1+mKuAKOmXApviV4aOc/+qCHHWKwRy+ygn+GYdc4ktDT3hvoVJU6oY1ePbyBPulLn48=
X-Google-Smtp-Source: AGHT+IGexOtXh+oMbbBFr/g5CXaJZlARb449p0qGO9s4Rjw774OHUN23BsGzqKTgq7ytv1EADnQNT7uiXD6Yb9SPxVs=
X-Received: by 2002:a05:6512:3056:b0:595:8258:ccc7 with SMTP id
 2adb3069b0e04-5958419ebccmr6368487e87.1.1763572764283; Wed, 19 Nov 2025
 09:19:24 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 19 Nov 2025 17:19:23 +0000
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 19 Nov 2025 17:19:23 +0000
From: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <m2seeax89s.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
 <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
 <m2jyzmgx5k.fsf@HIDDEN> <865xb6jg3d.fsf@HIDDEN>
 <m2seeax89s.fsf@HIDDEN>
MIME-Version: 1.0
Date: Wed, 19 Nov 2025 17:19:23 +0000
X-Gm-Features: AWmQ_bmV79dJgZNbYFtjEifx3DjGXWOvq_cjYh0obpS0ag3aznYYi4YRZ1AAhWQ
Message-ID: <CANVbq5=DVq-4jSXmaGO11A8TrxM-emw6Qzb141szpRHFZaPK9A@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
To: =?UTF-8?Q?Rudolf_Adamkovi=C4=8D?= <rudolf@HIDDEN>, 
 Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN, rms@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Wed, Nov 19 2025, Rudolf Adamkovi=C4=8D wrote:

> Eli Zaretskii <eliz@HIDDEN> writes:
>
>> If you knew the correct word, why didn't you type it in the first
>> place?  (No, don't answer that.)
>
> Why not answer that?  You asked a good question.
>
> As a non-native speaker, I have two use-cases:
>
>   - Case 1: I do not know how to spell the word.
>   - Case 2: I have a fuzzy recollection of the word in general.
>
> Here is a typical workflow for Case 1:
>
> (1) Flyspell marks a word as misspelled.
> (2) I repeatedly filter the list of suggestions:
>
>     - Maybe there are two "s".  Nope.
>     - Maybe ... Nope, nope, nope.
>     - Dang, there are two "o" and two "s".  Gotcha!
>
> This can be done in seconds with Completing Read, especially when
> coupled with super-fast UI such as Vertico.
>
> (I have seen my kids doing the same with Flyspell, but only after I
> installed the Completion Read support and Vertico for them.)
>
> The GUI popup?  The search is prefix-only, with hidden one-time input,
> which prevents any kind of word exploration.  It may be good enough for
> a web browser, to quickly fix a typo.  A professional text editor like
> Emacs should *default* to something better, IMHO.
>
> Rudy

Thank you for the detailed explanation, Rudy. I think you put into words
my opinion/experience much better than I would've.

Rudy expressed a significant motivation, I think, for users to install
third-party packages like flyspell-correct and jinx: both use an
interface more friendly or intuitive (many hold this opinion, anyway) to
correcting words. Rudy observing his kids naturally using the minibuffer
completion interface of vertico strongly support this, I think.

--=20
Kind regards,
Kristoffer




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 19 Nov 2025 17:05:46 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 19 12:05:46 2025
Received: from localhost ([127.0.0.1]:39315 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vLlcn-0004kM-NP
	for submit <at> debbugs.gnu.org; Wed, 19 Nov 2025 12:05:46 -0500
Received: from fhigh-a4-smtp.messagingengine.com ([103.168.172.155]:46929)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <rudolf@HIDDEN>)
 id 1vLlcl-0004jw-Ke
 for 79417 <at> debbugs.gnu.org; Wed, 19 Nov 2025 12:05:43 -0500
Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45])
 by mailfhigh.phl.internal (Postfix) with ESMTP id 6ED841400257;
 Wed, 19 Nov 2025 12:05:38 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-05.internal (MEProxy); Wed, 19 Nov 2025 12:05:38 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adamkovic.org;
 h=cc:cc:content-transfer-encoding:content-type:content-type
 :date:date:from:from:in-reply-to:in-reply-to:message-id
 :mime-version:references:reply-to:subject:subject:to:to; s=fm1;
 t=1763571938; x=1763658338; bh=nd69nlei2i01Z/mfF9xcoOLyGs1xShEY
 zIkWs+JJ5qk=; b=bqo91OeSbpc9QH17bBcbDOQb1fzVbIle7BFP/KodgLcgcLLV
 LvoX9GlKECiXHzUbuRz/AQUuepNapKVPlTJqcr2FRoiSZuUuj33qkDIducHHhmYu
 5ZK1IkGepctOjieov20CERHqXeU9F5UiAXDyViXLylfujMmgYCejUiA+GBvang2J
 PkPPtONZkIR1LHQLJXfQkX8YoLO84TbE9g+nLP4az32BoNtfv822yigukSgs2HvN
 VP0xQMgm7u5OI8BiM24L2+bPfi/rXfMtc7MnS9ZZkeMsR3fIZo8BDq7y9Vz75hLy
 XpE/ZbDQZoFJufeAw0NSJAi4VGaiZvY51AAx5w==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:content-type:date:date:feedback-id:feedback-id
 :from:from:in-reply-to:in-reply-to:message-id:mime-version
 :references:reply-to:subject:subject:to:to:x-me-proxy
 :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1763571938; x=
 1763658338; bh=nd69nlei2i01Z/mfF9xcoOLyGs1xShEYzIkWs+JJ5qk=; b=M
 ZFOFpVeES8vyjEXiE5eU07K6tWQAvUpNiftvg5CEuMBgwRF8AK5toiU95eK60wPf
 t8uUgkwEC+z1vcj3VWIE8falLl1euksNi/kCcLkxyLs3dUyvMw1ZaP6wWgJcKu6W
 pvFIpXTlXDqVWSs9gRjX02xuWC3Jq2n1Dsi4n4lKnynH4YLMrno9bU2OMtYfKXRh
 qH/6o63QZtIt4/XVOO08Z3GL+gYEve844PDqnyVNVHQJRiMQgaDfWe6G526nf+94
 UBhKs2bE+nw2ST8G7Oi/HIcVY8zZu4tInAl27O471y7qiXWraiSMuTNrlUit1iwE
 p0ba/EtmivMfk8HG8P1qA==
X-ME-Sender: <xms:4vgdacHZXhZTDlzrhvB95PUTOlnIdPk75gVYm7yyo07H-aIWd0NNIw>
 <xme:4vgdaXkhwNj-balihLxJ9Osm3zQSrZX4Eu05fgH27Bg8e1PPEbGrseefD8r_dlSYq
 bKKMUEv5HqyChODttQOX9dkSNL_5XAFX0KRcpGECVoFPoEL22ERnQ4>
X-ME-Received: <xmr:4vgdaYbSsJz5r57Cq8N2GKspQh_u59LkdwDbAHW8Nt-q_1qnFhKvZAktug1FQDEzjvnHy86FK58l9g8nwkOSnAfEhbnCk-Q>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvvdegjeehucetufdoteggodetrf
 dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu
 rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujf
 gurhephffvvefujghffffkgggtgfesthhqredttddtjeenucfhrhhomheptfhuugholhhf
 ucetuggrmhhkohhvihgtuceorhhuugholhhfsegruggrmhhkohhvihgtrdhorhhgqeenuc
 ggtffrrghtthgvrhhnpeeiueetheffudfghfeggeevheevvddtkefflefhueeludfgtefg
 ffeltdfhudejgeenucffohhmrghinheprggurghmkhhovhhitgdrohhrghenucevlhhush
 htvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehruhguohhlfhesrggu
 rghmkhhovhhitgdrohhrghdpnhgspghrtghpthhtohepjedpmhhouggvpehsmhhtphhouh
 htpdhrtghpthhtohepvghmrggtshdquggvvhgvlhesghhnuhdrohhrghdprhgtphhtthho
 pegrrhhsthhofhhfvghlsehgmhgrihhlrdgtohhmpdhrtghpthhtohepjeelgedujeesug
 gvsggsuhhgshdrghhnuhdrohhrghdprhgtphhtthhopeihrghnughrohhssehgmhgrihhl
 rdgtohhmpdhrtghpthhtoheprhhmshesghhnuhdrohhrghdprhgtphhtthhopehkrhhish
 gsrghlihhnthhonhgrsehgmhgrihhlrdgtohhmpdhrtghpthhtohepvghlihiisehgnhhu
 rdhorhhg
X-ME-Proxy: <xmx:4vgdaUF1pWoQ-_wFndmZQNCGjjp1uTKqfD7_JjDdYOKF98-cbiclzA>
 <xmx:4vgdaRInbM1H8slMdT2oYZRa9bOZ7wLbUW1bWNdpfIzIzYfWDCZtRA>
 <xmx:4vgdaXMuDJVA4_SUSjQzA1gv88MRQsDArj0yAGmhC2Jn0FPiRIhtOA>
 <xmx:4vgdaZl0yWey_nvTXb9rjtqFOhRiIbVZIgHij4QWppTHKFjVX2-Y8Q>
 <xmx:4vgdaQFSAAjv1ZkQaK4FOhNnGLyaCC2LjrAgEPBNWfFnljxBVhjzi5IZ>
Feedback-ID: i88214938:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed,
 19 Nov 2025 12:05:37 -0500 (EST)
From: Rudolf =?utf-8?Q?Adamkovi=C4=8D?= <rudolf@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <865xb6jg3d.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
 <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
 <m2jyzmgx5k.fsf@HIDDEN> <865xb6jg3d.fsf@HIDDEN>
Date: Wed, 19 Nov 2025 18:05:35 +0100
Message-ID: <m2seeax89s.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 79417
Cc: krisbalintona@HIDDEN, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN,
 yandros@HIDDEN, arstoffel@HIDDEN, rms@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Eli Zaretskii <eliz@HIDDEN> writes:

> If you knew the correct word, why didn't you type it in the first
> place?  (No, don't answer that.)

Why not answer that?  You asked a good question.

As a non-native speaker, I have two use-cases:

  - Case 1: I do not know how to spell the word.
  - Case 2: I have a fuzzy recollection of the word in general.

Here is a typical workflow for Case 1:

(1) Flyspell marks a word as misspelled.
(2) I repeatedly filter the list of suggestions:

    - Maybe there are two "s".  Nope.
    - Maybe ... Nope, nope, nope.
    - Dang, there are two "o" and two "s".  Gotcha!

This can be done in seconds with Completing Read, especially when
coupled with super-fast UI such as Vertico.

(I have seen my kids doing the same with Flyspell, but only after I
installed the Completion Read support and Vertico for them.)

The GUI popup?  The search is prefix-only, with hidden one-time input,
which prevents any kind of word exploration.  It may be good enough for
a web browser, to quickly fix a typo.  A professional text editor like
Emacs should *default* to something better, IMHO.

Rudy
--=20
"I have only made this letter longer because I have not had the time to
make it shorter."

--- Blaise Pascal, The Provincial Letters, 1657

Rudolf Adamkovi=C4=8D <rudolf@HIDDEN> [he/him]
http://adamkovic.org




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 19 Nov 2025 13:41:45 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 19 08:41:44 2025
Received: from localhost ([127.0.0.1]:37111 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vLiRM-0007MC-Gh
	for submit <at> debbugs.gnu.org; Wed, 19 Nov 2025 08:41:44 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:33524)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vLiRK-0007La-3W
 for 79417 <at> debbugs.gnu.org; Wed, 19 Nov 2025 08:41:42 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vLiRE-0002Df-3l; Wed, 19 Nov 2025 08:41:36 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=Efp/NQ2Pgw0QhmX52806Crzm2yagAqmdZTVntJYYu5A=; b=ctIqD7+aEcC2xZ6UWfP7
 forHiNs0nHHO+ZexNNnLjQZztCqzdnDSc6PCt/aT0Hw4NkEihHqM3NldatEhOvFaf3ZeEEN2WJUL0
 OGjLsE0gTToTJvIM55WFfpn9Dr+38LCfCUK15WV/AVTM+TgSdq9TrcBDps7w62z5/dGA9aggi0QY0
 F0hmGLrq5x3vbakNDW0iVVYWJqM+OEtj/d3rmoRcYYQk5LBK1x0yg8A+YKN4LfZuOqszWQ1r379sq
 82mZFmaFmsB40YRDBoaggbqGHthekKKcAKYnnWKmtJ6GvPa5H+RWk/7HOEQssUR3czoE4IIzTOwAC
 ejCN6BdBOdzAOw==;
Date: Wed, 19 Nov 2025 15:40:22 +0200
Message-Id: <865xb6jg3d.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Rudolf =?utf-8?Q?Adamkovi=C4=8D?= <rudolf@HIDDEN>
In-Reply-To: <m2jyzmgx5k.fsf@HIDDEN> (message from Rudolf
 =?utf-8?Q?Adamkovi=C4=8D?= on Wed, 19 Nov 2025 11:00:07 +0100)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
 <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
 <m2jyzmgx5k.fsf@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: krisbalintona@HIDDEN, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN,
 yandros@HIDDEN, arstoffel@HIDDEN, rms@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Rudolf Adamkovič <rudolf@HIDDEN>
> Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
>  emacs-devel@HIDDEN
> Date: Wed, 19 Nov 2025 11:00:07 +0100
> 
> Kristoffer Balintona <krisbalintona@HIDDEN> writes:
> 
> > Eli, what are your thoughts on a completing-read interface? All the
> > recent spell-checking packages in ELPA/MELPA favor completing-read.
> 
> This.  While the Flyspell C-c $ popup is usable, it does not respect the
> completion preferences of the user, such as fuzzy matching.

I hear you, although it is strange for me to hear that people want to
use completion when the suggestions are generated from a dictionary,
using non-trivial guesswork, driven by the dictionary and language
rules, of what could be the correct word.  If you knew the correct
word, why didn't you type it in the first place?  (No, don't answer
that.)




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 19 Nov 2025 13:24:09 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 19 08:24:09 2025
Received: from localhost ([127.0.0.1]:36972 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vLiAK-0003DZ-VK
	for submit <at> debbugs.gnu.org; Wed, 19 Nov 2025 08:24:09 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:55474)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vLiAJ-0003Cx-9Z
 for 79417 <at> debbugs.gnu.org; Wed, 19 Nov 2025 08:24:07 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1vLiAD-0006rF-Pv
 for 79417 <at> debbugs.gnu.org; Wed, 19 Nov 2025 08:24:02 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=KRWg5ldzsRDslxt5qNOelkDdI3hFW3ECVodE7+TvvZo=; b=gQzKuxTxXs0E
 AdNtgjxNTAGTYlCkAVLqo0XVSVH6ftRLVDI9PR5kxfKNrG/pVBEeKr19E3LWVpLv7adp4wdfiKOYU
 LqbSqai7SFGvS+TYlN0TPwI/INQRYIYt4A3/yLOq5OczZqoy9FMqvX/pym4kNfrwwo3H472dmUdww
 Me6ccuDiF1w02WmyUnb13zeZm6OrlFrdSVy15nSzhuYISCuXHQMGZC5InYhkLZoy/qsAPLFq8H8VA
 IabBZ6ldxHK1ZhGndgUHV0ZOg5W7n9zA6C5oKR5FB4xoOklx/idyqwO2xIdLnxfh73/B3QccduYrT
 fN6fAPQIJ3ggMaTuUG2mjg==;
Date: Wed, 19 Nov 2025 15:23:52 +0200
Message-Id: <868qg2jguv.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: rms@HIDDEN
In-Reply-To: <E1vLYu6-0005pX-HG@HIDDEN> (message from Richard
 Stallman on Tue, 18 Nov 2025 22:30:46 -0500)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
 <E1vLYu6-0005pX-HG@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: 79417 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Richard Stallman <rms@HIDDEN>
> Cc: 79417 <at> debbugs.gnu.org
> Date: Tue, 18 Nov 2025 22:30:46 -0500
> 
>   > > We could implement a keyboard-based method of specifying the
>   > > correction in this context.  One interface it could support is to
>   > > choose the correction the same way ispell does it.
> 
>   > I don't see the rationale.
> 
> I use ispell and I find that interface convenient.  Text terminal menus
> are not convenient for me.  I might use flyspell if I could control
> it the same way as ispell.

Would you mind sharing what is inconvenient about using text-mode
menus?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 19 Nov 2025 10:00:20 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 19 05:00:20 2025
Received: from localhost ([127.0.0.1]:35945 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vLez5-00048l-ST
	for submit <at> debbugs.gnu.org; Wed, 19 Nov 2025 05:00:20 -0500
Received: from fout-a6-smtp.messagingengine.com ([103.168.172.149]:60923)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <rudolf@HIDDEN>)
 id 1vLez3-00048K-PN
 for 79417 <at> debbugs.gnu.org; Wed, 19 Nov 2025 05:00:18 -0500
Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42])
 by mailfout.phl.internal (Postfix) with ESMTP id D714CEC01B0;
 Wed, 19 Nov 2025 05:00:11 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-02.internal (MEProxy); Wed, 19 Nov 2025 05:00:11 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adamkovic.org;
 h=cc:cc:content-transfer-encoding:content-type:content-type
 :date:date:from:from:in-reply-to:in-reply-to:message-id
 :mime-version:references:reply-to:subject:subject:to:to; s=fm1;
 t=1763546411; x=1763632811; bh=GLNRqPXEaRCEv8GEF4pAebyyVjscM2+w
 ezd5crLiSVs=; b=bxLtZ6nGrYqt5jjiPLz0LtVVJhbeES5+HC9R15FlTQ7wJFuf
 PFPJ4Mndit3OUebdLh2JznJrCRWCx4yza4Pogofpp2SmjgsUW6WEDYuctGLHiJM7
 sAUchjatAZMr2WypYYAAA7XHPqwoRP160eDrtKcT0jKA2SHdDcyAdDNpuA8e6yxI
 rgdItvDiSw4Yfq9udldPnysRvWPeCJrQVBDf+2XzetkKwg+/H5XlDEQ7CK6bF8q5
 mMviiuTH76OOJXQfrKUkWUWJwf0GdDdMfW/xgcO99UFbTniUA/WYaRdJgWSEnBc4
 yjjlibRERJdeQCCdLWskoJzLCMRF0w4C3TuM+Q==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:content-type:date:date:feedback-id:feedback-id
 :from:from:in-reply-to:in-reply-to:message-id:mime-version
 :references:reply-to:subject:subject:to:to:x-me-proxy
 :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1763546411; x=
 1763632811; bh=GLNRqPXEaRCEv8GEF4pAebyyVjscM2+wezd5crLiSVs=; b=v
 J1Idt2TF9dJXdrhOM7bEG8ZsKtGoy5LgPtBVs3z93ZF63KQYpvW2gy9NzELhGcc6
 rNhrPQzWq6KrFRONveuKmWbQ0hK73W7Y2UJohy+O3yE2jfUEF7USFJu2EvQiS16A
 f7WQoEGWDy0dp4tEiJaPi0j1eImxAl9rkZGEsr2CyBVzzGCIicfXuCkOfV/GGFKI
 b4HFzJqVyDS+HuBj6wx2Bd3oY5ZTF6K4LBANqYmP/OdlW3lQqIN02Fs/TCroXjg8
 8o7B0CcM6hGTrLBPxPf0pF7eHqqIR7DFH4tWUFrg6UgK5PduaWsNp/5R50Ipoye+
 3WgthLsWQZ/k/iTfDfvTQ==
X-ME-Sender: <xms:K5UdaXWl6kfIPmXWwEteqbJW6A2i20XLuvx5no7vVYTefL4tltu6AQ>
 <xme:K5UdaR2VOWy2r0iT4eQ1GFRrDgiH1BKAZNSTmZ6fKZfEOHAlQi50NNfzOwtvrnBn0
 WoLNIm2GwXE5jElRp3yyVZJeff2gI8liD4Sp6PVTRmwmScssyBmaOw>
X-ME-Received: <xmr:K5UdaVpnfFjubYA-w6qk1cS4o871UVbP_K2a46TqzWtvoRpWZSRRbObwDmLEAUleRsbuwB6bmdVM9bXCAj0fGVj9LRZuQFE>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvvdefledtucetufdoteggodetrf
 dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu
 rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujf
 gurhephffvvefujghffffkgggtgfesthhqredttddtjeenucfhrhhomheptfhuugholhhf
 ucetuggrmhhkohhvihgtuceorhhuugholhhfsegruggrmhhkohhvihgtrdhorhhgqeenuc
 ggtffrrghtthgvrhhnpeeiueetheffudfghfeggeevheevvddtkefflefhueeludfgtefg
 ffeltdfhudejgeenucffohhmrghinheprggurghmkhhovhhitgdrohhrghenucevlhhush
 htvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehruhguohhlfhesrggu
 rghmkhhovhhitgdrohhrghdpnhgspghrtghpthhtohepjedpmhhouggvpehsmhhtphhouh
 htpdhrtghpthhtohepvghmrggtshdquggvvhgvlhesghhnuhdrohhrghdprhgtphhtthho
 pegrrhhsthhofhhfvghlsehgmhgrihhlrdgtohhmpdhrtghpthhtohepjeelgedujeesug
 gvsggsuhhgshdrghhnuhdrohhrghdprhgtphhtthhopeihrghnughrohhssehgmhgrihhl
 rdgtohhmpdhrtghpthhtoheprhhmshesghhnuhdrohhrghdprhgtphhtthhopegvlhhiii
 esghhnuhdrohhrghdprhgtphhtthhopehkrhhishgsrghlihhnthhonhgrsehgmhgrihhl
 rdgtohhm
X-ME-Proxy: <xmx:K5UdaYVLelNBG09XMDjnzTjBSe3xvFNk30Y1MV-b9JaxeoW5WNH0YQ>
 <xmx:K5UdaQZ6PKeYzm5ISCYTfBPg7ozLlJCxqvDp_yqf8fjAFDa0ug465w>
 <xmx:K5UdaVe4No6-8wNmf_M2NjIgb-CS7GDLQkdW5i5udYDCNwOIAYxvAQ>
 <xmx:K5Udaa0C-YwuWFTdz6pTzCo4MaP4VYo5RtbezmGxMuxsLjoInH6gGw>
 <xmx:K5UdaWW4p5XJ-mziIJUUY9rk-KIy_Al61ZlYbLwAYxBJzbeVthaBNuJj>
Feedback-ID: i88214938:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed,
 19 Nov 2025 05:00:10 -0500 (EST)
From: Rudolf =?utf-8?Q?Adamkovi=C4=8D?= <rudolf@HIDDEN>
To: Kristoffer Balintona <krisbalintona@HIDDEN>, Eli Zaretskii
 <eliz@HIDDEN>, rms@HIDDEN
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
 <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
Date: Wed, 19 Nov 2025 11:00:07 +0100
Message-ID: <m2jyzmgx5k.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Kristoffer Balintona <krisbalintona@HIDDEN> writes:

> Eli, what are your thoughts on a completing-read interface? All the
> recent spell-checking packages in ELPA/MELPA favor completing-read.

This.  While the Flyspell C-c $ popup is usable, it does not respect the
completion preferences of the user, such as fuzzy matching.  Back when I
was a new Emacs user, the Flyspell popup was one of the first problems I
remember fixing.  I ended up installing a package that extended Flyspell
with Completing Read, and I still have it installed today.  Put bluntly,
the GUI popup in Flyspell was one of the so-called "bad defaults" for me
personally.

Rudy
--=20
"The power of mathematics rests on its evasion of all unnecessary
thought."

--- Ernst Mach, 1838-1916

Rudolf Adamkovi=C4=8D <rudolf@HIDDEN> [he/him]
http://adamkovic.org




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 19 Nov 2025 03:30:56 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Nov 18 22:30:56 2025
Received: from localhost ([127.0.0.1]:33233 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vLYuF-0000Gn-Ql
	for submit <at> debbugs.gnu.org; Tue, 18 Nov 2025 22:30:56 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:34204)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <rms@HIDDEN>) id 1vLYuD-0000GW-2e
 for 79417 <at> debbugs.gnu.org; Tue, 18 Nov 2025 22:30:54 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <rms@HIDDEN>) id 1vLYu7-00011t-Ng
 for 79417 <at> debbugs.gnu.org; Tue, 18 Nov 2025 22:30:47 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=Date:References:Subject:In-Reply-To:To:From:
 mime-version; bh=MGcfFT1ezMUQ1Vy9zjHsye8UEBuzaiMkUpeOVTT3Gno=; b=TDO4g5ButJ+1
 Sgj9CeddujaN0q0CPvVQuNvgtKkbTf4CXWbGqmNvpVSZ5EG8VvYh75y94460QHfPkGyuVypqh9CbW
 TiBcrX1pfcxVdCoV4bmO4qKbIfB9p8nZlUf+6zpmj/ic/BJUgFx8n1RxoixjpwiYf43aMZCdR5iE9
 eDMrKasejNHHBL/TYwNIPkO8PWCeTnsn9BHGMXNfSQGBCe6feOun61Oe6y3UIl2ZJOctnaS8xEnxI
 Kinp3780CDp0v2BI246DA2JTwigMkLv7w9AtIjgmIFSaHposTRppcA1CFFelPFJIjyBczP4O8RZRy
 pCaVmlPi/tBl8IKxnE4nWA==;
Received: from rms by fencepost.gnu.org with local (Exim 4.90_1)
 (envelope-from <rms@HIDDEN>)
 id 1vLYu6-0005pX-HG; Tue, 18 Nov 2025 22:30:46 -0500
Content-Type: text/plain; charset=Utf-8
From: Richard Stallman <rms@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
In-Reply-To: <86h5uumq8m.fsf@HIDDEN> (message from Eli Zaretskii on Sun, 16
 Nov 2025 08:43:53 +0200)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
Message-Id: <E1vLYu6-0005pX-HG@HIDDEN>
Date: Tue, 18 Nov 2025 22:30:46 -0500
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: 79417 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Reply-To: rms@HIDDEN
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > > We could implement a keyboard-based method of specifying the
  > > correction in this context.  One interface it could support is to
  > > choose the correction the same way ispell does it.

  > I don't see the rationale.

I use ispell and I find that interface convenient.  Text terminal menus
are not convenient for me.  I might use flyspell if I could control
it the same way as ispell.

I am not saying this should be the default interface for flyspell.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)






Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 17 Nov 2025 12:35:24 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Nov 17 07:35:24 2025
Received: from localhost ([127.0.0.1]:51081 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vKyS4-00063H-A7
	for submit <at> debbugs.gnu.org; Mon, 17 Nov 2025 07:35:24 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:54642)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vKyS2-00062q-6e
 for 79417 <at> debbugs.gnu.org; Mon, 17 Nov 2025 07:35:22 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vKyRw-00081Y-Tw; Mon, 17 Nov 2025 07:35:16 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=M1NrMIZelX7a6/Or1PlvdN5IbApWS8IZ+nHmKf2Kljc=; b=l1fhfRr3rixk
 1M5KIPkmb5HAJX3vqIOna9hhI7X6Fnk8ArybLZ840OHQ8Qpx9UopXPNs9BnsjM9sXhmxasx3xGASI
 +doDraL0sJyV9AlD1YfhoMEmFn7smo75Jc3YnT1JiHU1UR2fEHTyguCL3goW4PrXUjOZgvsZQ3lbE
 zezj1spxl5T1sLJp3/WfPvJHJtL6KvLRRD9t2tYV6YnnbhgYajT34uHlDRaqyhtwHe22xLFeEpC2Z
 oEBfXadzW6edpA4I/2OIEk9iNJA1JL+Soz7Sb8NWmC/o1bjgh+VThSltx9dvmPyo+KqbKcdwOhYNJ
 MFCTF1Wd8AIPRTGIlQfvnA==;
Date: Mon, 17 Nov 2025 14:35:01 +0200
Message-Id: <86jyzoltvu.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
 (message from Kristoffer Balintona on Sun, 16 Nov 2025 16:12:43 -0600)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
 <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN, rms@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Kristoffer Balintona <krisbalintona@HIDDEN>
> Date: Sun, 16 Nov 2025 16:12:43 -0600
> Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN, 
> 	emacs-devel@HIDDEN
> 
> On Sun, Nov 16 2025, Eli Zaretskii wrote:
> 
> >> From: Richard Stallman <rms@HIDDEN>
> >> Cc: eliz@HIDDEN, yandros@HIDDEN, 79417 <at> debbugs.gnu.org,
> >> 	arstoffel@HIDDEN, emacs-devel@HIDDEN
> >> Date: Sat, 15 Nov 2025 22:28:06 -0500
> >>
> >> We could implement a keyboard-based method of specifying the
> >> correction in this context.  One interface it could support is to
> >> choose the correction the same way ispell does it.
> >
> > I don't see the rationale.  Emacs supports menus on all terminals
> > nowadays, including TTYs, and a menu is a very natural way of showing
> > several short alternatives to be chosen from by the user.  Adding a
> > buffer-based selection (like *Completions*) would just bring
> > gratuitous complexity, yet another user option, the need to document
> > that, etc. etc.  Sounds like net loss to me.
> 
> Eli, what are your thoughts on a completing-read interface? All the
> recent spell-checking packages in ELPA/MELPA favor completing-read. Such
> packages include:
> - flyspell-correct[1]
> - jinx[2]
> - jit-spell[3]
> Do you believe it reasonable to have a new command that uses
> completing-read? (Like how flyspell-correct-word-before-point and
> flyspell-auto-correct-word are different word-correction commands in
> flyspell-mode-map.)

It's reasonable, but I explained why it isn't necessarily desirable.
Each such new feature needs to be documented, advertised to make it
discoverable, etc. etc.  If we were implementing this feature from
scratch, it would be a good idea to consider, but that's not the case.
We already have an implementation with a good UI, so introducing one
more UI for the same feature sounds like gratuitous overkill to me.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 16 Nov 2025 22:12:53 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Nov 16 17:12:53 2025
Received: from localhost ([127.0.0.1]:47282 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vKkzN-0004kw-4M
	for submit <at> debbugs.gnu.org; Sun, 16 Nov 2025 17:12:53 -0500
Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]:57706)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <krisbalintona@HIDDEN>)
 id 1vKkzK-0004kf-T9
 for 79417 <at> debbugs.gnu.org; Sun, 16 Nov 2025 17:12:51 -0500
Received: by mail-lf1-x132.google.com with SMTP id
 2adb3069b0e04-59431f57bf6so3674565e87.3
 for <79417 <at> debbugs.gnu.org>; Sun, 16 Nov 2025 14:12:50 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763331164; x=1763935964; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=SzPLf7ebqC8zFHgkrkvTCLrPyQbYD399yARJegAGhbI=;
 b=fQKDWk5gANAk+iwKc3QX6OgT50ccvuLxUDejfgzMEecB2HkYukcGJ7AOzQEaQGk506
 67s98SJm0I/cVDMZvewmAXZ9BXaf1J5W2jzB+N4481B1g4r2ZxbEarncr85pLgw++t3j
 t6XB8MRwFORtdx4rRkaTP7oWp8he1dJ4DguaAZo6PHT2wBzM5vj080Munx0kFuTqpQUz
 dyKM3mn+oo3hjH5/2HNBpuh8l+fsZquVLBeOD+dWFnAmUXO1O3+24mRJmlcWuNcoLLqe
 TpEG/SXZD1n3hl1HnHnyVMrxCL9mlc4xyIhdj4tDqGIZWyhE/WlRi/RHGEqnFRwUJV6E
 41Gg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763331164; x=1763935964;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=SzPLf7ebqC8zFHgkrkvTCLrPyQbYD399yARJegAGhbI=;
 b=Kmx0O2fONDeIKDxfetO+I1oDq0+GYFovGQKBPvwtBGzYyABGVkl1VyOEZ/Hs5b2IRS
 gOWp+6FTaHm6AJ5ymK6vZa/dsGY5X8DycEz03gJPS6jIJbrRjAJqAPdDUtqastJCF8Yj
 gvuTBQmvUqdp5lj5cKmqOpfkU0HZVcT803iH9aSpVf4A6x6yQoGCMjQwUv0BnmLkFFv7
 P/nviY0EJ22T5jVDTpa+tnaYjYJcFmTMSAbtmAH1hERD4Yl0p8ACGt3XjBgRd3C9gW82
 Z85nfak3AGlGHrokl31qSdXx+iRVfot7NcTAnPgbgsjmH1AxgTx1mB0VoxYT9a/Byo+J
 XbLw==
X-Forwarded-Encrypted: i=1;
 AJvYcCWUXeusy1syhhNUqrTBjjMPBy3+yb+CyWPoPAN5nJ6lEW2BDxkGYj7YHl66Lj1D4+wm7HJ2dA==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YyZMmxNxKZ1ljmy3WOFQia+NvoPVZLXTPFc3lVk4o4468VkvjfR
 PdjcVkbsEkWGdhEio4vFo3PyNEGVmH0fUXbyWc7/ruvxDXXJ01jN8C34+b/8a/U5po4MbY9QQ1J
 LubJC5EfzssMvU0qENb5Cfo2SE3QLnX8=
X-Gm-Gg: ASbGncsgTawUqy94UeoH8tlEg6fHwQH7ULpRgRK7fDtzfotN2opR2q7qm1ADvw82IzN
 nXXo7cVkq2wwXHJxXByUsUdqRAxGOictd8PV1d3Q/5UFSAHgV5KuJkcmEPZQZl0fCDz2+3PtMiN
 fovIqi+g3gJcO8YfZIc6wdHEm9gueyDNi+Xcy4tsoWDZfG2mWjk6PWS13/mIFJpSkYyuS6/ZvhU
 vnEeIp/jxz0CSTHp6f5lYqAYc89ce6bxmOEUH774BiFIgYbPioAIu8c7yliMQtTMwv/N1fQhyuv
 5JSm5g==
X-Google-Smtp-Source: AGHT+IFfvU5H83epHKePuZnzKEzc9juvF5RPVqrFMpYdUOjeUszKG3k+Ty/ft8nuff0ZF6D+mnqD3oHg3EUCbsJgFi0=
X-Received: by 2002:a05:6512:1559:20b0:595:9152:b92f with SMTP id
 2adb3069b0e04-5959152bc18mr473279e87.18.1763331163995; Sun, 16 Nov 2025
 14:12:43 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Sun, 16 Nov 2025 16:12:43 -0600
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Sun, 16 Nov 2025 16:12:43 -0600
From: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <86h5uumq8m.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN> <86h5uumq8m.fsf@HIDDEN>
MIME-Version: 1.0
Date: Sun, 16 Nov 2025 16:12:43 -0600
X-Gm-Features: AWmQ_bngaS61Cmu5MBQVHmI4IaJssWQVhkiLXW-VnmBhCBwWNlw19S_clWiPRNw
Message-ID: <CANVbq5=WDnTMjbnTQV2XA8XK-CfDWPX1_E69uB6Qa8+FsLcgZw@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
To: Eli Zaretskii <eliz@HIDDEN>, rms@HIDDEN
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Sun, Nov 16 2025, Eli Zaretskii wrote:

>> From: Richard Stallman <rms@HIDDEN>
>> Cc: eliz@HIDDEN, yandros@HIDDEN, 79417 <at> debbugs.gnu.org,
>> 	arstoffel@HIDDEN, emacs-devel@HIDDEN
>> Date: Sat, 15 Nov 2025 22:28:06 -0500
>>
>>   > > It pops up a menu, yes.  But you can navigate that menu with keyboard
>>   > > keys (arrow keys, RET and ESC), you don't have to use the mouse, at
>>   > > least with some toolkits and on TTY frames.  So all-keyboard
>>   > > interaction is still possible with Flyspell, if someone must not use
>>   > > the mouse.
>>
>>   > Ah, I hadn't known that you can interact with the pop up menu with the
>>   > keyboard. Thanks for informing me.
>>
>> We could implement a keyboard-based method of specifying the
>> correction in this context.  One interface it could support is to
>> choose the correction the same way ispell does it.
>
> I don't see the rationale.  Emacs supports menus on all terminals
> nowadays, including TTYs, and a menu is a very natural way of showing
> several short alternatives to be chosen from by the user.  Adding a
> buffer-based selection (like *Completions*) would just bring
> gratuitous complexity, yet another user option, the need to document
> that, etc. etc.  Sounds like net loss to me.

Eli, what are your thoughts on a completing-read interface? All the
recent spell-checking packages in ELPA/MELPA favor completing-read. Such
packages include:
- flyspell-correct[1]
- jinx[2]
- jit-spell[3]
Do you believe it reasonable to have a new command that uses
completing-read? (Like how flyspell-correct-word-before-point and
flyspell-auto-correct-word are different word-correction commands in
flyspell-mode-map.)


Footnotes:
[1]  https://github.com/d12frosted/flyspell-correct
[2] https://github.com/minad/jinx
[3] https://github.com/astoff/jit-spell

-- 
Kind regards,
Kristoffer




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 16 Nov 2025 06:44:29 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Nov 16 01:44:29 2025
Received: from localhost ([127.0.0.1]:41521 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vKWUv-0005uK-4H
	for submit <at> debbugs.gnu.org; Sun, 16 Nov 2025 01:44:29 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:53168)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vKWUt-0005u3-J7
 for 79417 <at> debbugs.gnu.org; Sun, 16 Nov 2025 01:44:28 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vKWUn-0001Ba-Ql; Sun, 16 Nov 2025 01:44:22 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=gRO/n1x//ZYGZYycRTgvumYDfEFvm5gjllYz7U3s2MI=; b=VzkmXS4/rP6Z
 ycLlcwgNys/p1ko4QtE+9zH10JlrjFHWjrDM0MWTiP0BdK9LNFEgdVAvoSV+ePcGPYzBSHJf92Pet
 of9gekZjBtTTYJSDdwncN3Qo2BwXr76XRNhKGd6wyQ5XGAhd8xjLwXWLnvHtlJDIes1sSwbLcX5RB
 bPjjZTvJTi9MpStEz1aUt5X9gCcuTCEEBUXr3TRijgbl+rTZgJ/EFzUge91NbtUU1QeHsIkY7BxWx
 3u1I6zJZZl04Ibrl1UtAy2Zt6XxyyLLKqR7838+abKWutveOnBqWeNM3uXWLqHEHQ23p0aCUPuoQB
 oAHzBpYbhdjiE7u/3Dw3Yw==;
Date: Sun, 16 Nov 2025 08:43:53 +0200
Message-Id: <86h5uumq8m.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: rms@HIDDEN
In-Reply-To: <E1vKTQs-0003rt-NS@HIDDEN> (message from Richard
 Stallman on Sat, 15 Nov 2025 22:28:06 -0500)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 <E1vKTQs-0003rt-NS@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 krisbalintona@HIDDEN, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Richard Stallman <rms@HIDDEN>
> Cc: eliz@HIDDEN, yandros@HIDDEN, 79417 <at> debbugs.gnu.org,
> 	arstoffel@HIDDEN, emacs-devel@HIDDEN
> Date: Sat, 15 Nov 2025 22:28:06 -0500
> 
>   > > It pops up a menu, yes.  But you can navigate that menu with keyboard
>   > > keys (arrow keys, RET and ESC), you don't have to use the mouse, at
>   > > least with some toolkits and on TTY frames.  So all-keyboard
>   > > interaction is still possible with Flyspell, if someone must not use
>   > > the mouse.
> 
>   > Ah, I hadn't known that you can interact with the pop up menu with the
>   > keyboard. Thanks for informing me.
> 
> We could implement a keyboard-based method of specifying the
> correction in this context.  One interface it could support is to
> choose the correction the same way ispell does it.

I don't see the rationale.  Emacs supports menus on all terminals
nowadays, including TTYs, and a menu is a very natural way of showing
several short alternatives to be chosen from by the user.  Adding a
buffer-based selection (like *Completions*) would just bring
gratuitous complexity, yet another user option, the need to document
that, etc. etc.  Sounds like net loss to me.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 16 Nov 2025 03:28:15 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Nov 15 22:28:15 2025
Received: from localhost ([127.0.0.1]:40042 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vKTR1-0006DA-8h
	for submit <at> debbugs.gnu.org; Sat, 15 Nov 2025 22:28:15 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:54544)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <rms@HIDDEN>) id 1vKTQz-0006Cs-4X
 for 79417 <at> debbugs.gnu.org; Sat, 15 Nov 2025 22:28:14 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <rms@HIDDEN>)
 id 1vKTQt-00057O-RK; Sat, 15 Nov 2025 22:28:07 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=Date:References:Subject:In-Reply-To:To:From:
 mime-version; bh=8Td3EFUEdT+nhkJ3JadLbm8o67gryJ0br+TN1/IaWW4=; b=op+Uc7W4cfut
 bj1p1Wsilj9H98qMI2gW+jthSKQ9wgh8zilm4O73gjUI3sOY9IVhtMmQZuN4zYRZo3OgHL+A1Ip0O
 HQdcRtZ5g8x0w9lOU8wZz2Q+cJBELiljf+wj/HnlitVORa2C2fbHf/sc1O7CBtKnCEEgBPcmL9Xis
 UnHWhdD42WQAWWpcg5ZjFc5szj3l3sNuLqt9n1Jv8kqCEuRsHEbM59lvUoWLre6Bq14VctxrQNu8f
 BJuIsoVn2+g3FhjXDrx0zROjhWR9Xp49yj7whqIhgEmi47dzqyZe9Mri7hnyiW5WBe93jghoNtDBJ
 /0yYNMJYR0rpW3uV0WK9DA==;
Received: from rms by fencepost.gnu.org with local (Exim 4.90_1)
 (envelope-from <rms@HIDDEN>)
 id 1vKTQs-0003rt-NS; Sat, 15 Nov 2025 22:28:06 -0500
Content-Type: text/plain; charset=Utf-8
From: Richard Stallman <rms@HIDDEN>
To: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
 (message from Kristoffer Balintona on Thu, 13 Nov 2025 07:38:15 -0800)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
 <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
Message-Id: <E1vKTQs-0003rt-NS@HIDDEN>
Date: Sat, 15 Nov 2025 22:28:06 -0500
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: eliz@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN, yandros@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Reply-To: rms@HIDDEN
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > > It pops up a menu, yes.  But you can navigate that menu with keyboard
  > > keys (arrow keys, RET and ESC), you don't have to use the mouse, at
  > > least with some toolkits and on TTY frames.  So all-keyboard
  > > interaction is still possible with Flyspell, if someone must not use
  > > the mouse.

  > Ah, I hadn't known that you can interact with the pop up menu with the
  > keyboard. Thanks for informing me.

We could implement a keyboard-based method of specifying the
correction in this context.  One interface it could support is to
choose the correction the same way ispell does it.

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)






Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 14 Nov 2025 18:40:55 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 14 13:40:55 2025
Received: from localhost ([127.0.0.1]:60137 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJyj8-0003pd-S0
	for submit <at> debbugs.gnu.org; Fri, 14 Nov 2025 13:40:55 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:42704)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vJyj5-0003pX-My
 for 79417 <at> debbugs.gnu.org; Fri, 14 Nov 2025 13:40:52 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vJyis-0004p4-SV; Fri, 14 Nov 2025 13:40:44 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=8sgicz7UMmyQG1fdwMeHvY/QnZSW3jYc/WbMZweLGIY=; b=NBuwLmRuXYlU
 x85eIPr8zWZeRuKOYx9v/fKxMmS/FwYnUvdjcNR+PR4HxX+rUMzgPOtngH9oS18VxNL+JqFra9iXX
 6UoUVHyjTpBz7zL/h4z0TW5eXYxtf7OHEAxgkndxlF8IxbCflI06sRw0s7DFDh0w259UXQjNQ7GrG
 fT9djguSzBgTCjVCC1X86AZTILOB8aPL6seoY7DTcFFwm2D2yoko0T+0RFkx0JoyJHB9RosFyapJd
 s+6942oxsQ/GV19xN7+cCTVmirBOX2jxrBBFUeKxXtzfG9olJhqmnzw6DV3Q7tKHf6UNM6LgqIUZ9
 OlMBmqAh/4oVL2ZPTe+jIQ==;
Date: Fri, 14 Nov 2025 20:39:43 +0200
Message-Id: <86346gqx00.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Augusto Stoffel <arstoffel@HIDDEN>
In-Reply-To: <871pm0lfaz.fsf@HIDDEN> (message from Augusto Stoffel on Fri, 
 14 Nov 2025 18:00:52 +0100)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN> <86fraisc34.fsf@HIDDEN>
 <87ecq28i21.fsf@HIDDEN> <86bjl6s4tu.fsf@HIDDEN>
 <87zf8q71ir.fsf@HIDDEN> <867bvus1j0.fsf@HIDDEN>
 <CANVbq5=6SSez-JDLjNA7TGjXHKW+F7GADdJf+r8vD69EDmg=WQ@HIDDEN>
 <86wm3trip0.fsf@HIDDEN> <87ldk9klci.fsf@HIDDEN>
 <86ecq0rgsw.fsf@HIDDEN> <87cy5klrcg.fsf@HIDDEN>
 <86a50or9lj.fsf@HIDDEN> <871pm0lfaz.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, krisbalintona@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Augusto Stoffel <arstoffel@HIDDEN>
> Cc: Augusto Stoffel <arstoffel@HIDDEN>,  krisbalintona@HIDDEN,
>   yandros@HIDDEN,  79417 <at> debbugs.gnu.org,  emacs-devel@HIDDEN
> Date: Fri, 14 Nov 2025 18:00:52 +0100
> 
> On Fri, 14 Nov 2025 at 16:07, Eli Zaretskii <eliz@HIDDEN> wrote:
> 
> >> From: Augusto Stoffel <arstoffel@HIDDEN>
> >> Cc: Augusto Stoffel <arstoffel@HIDDEN>,  krisbalintona@HIDDEN,
> >>   yandros@HIDDEN,  79417 <at> debbugs.gnu.org,  emacs-devel@HIDDEN
> >> Date: Fri, 14 Nov 2025 13:40:47 +0100
> >> 
> >> On Fri, 14 Nov 2025 at 13:31, Eli Zaretskii <eliz@HIDDEN> wrote:
> >> 
> >> > Earlier you seemed to be saying that a single defcustom could serve
> >> > for both global and buffer-local values, even if they were different.
> >> > So please describe how a user would go about customizing the global
> >> > and the local values to different dictionaries.
> >> 
> >> Let's imagine ispell-dictionary and ispell-local-dictionary get unified
> >> under the name new-ispell-dict-var.
> >> 
> >> Global:
> >>   Interactively: M-x customize-variable RET new-ispell-dict-var
> >>   Via Lisp: (setq-default new-ispell-dict-var VALUE)
> >> 
> >> Local:
> >>   Interactively: M-x add-file-local-variable RET new-ispell-dict-var
> >>   Via Lisp: (setq-local new-ispell-dict-var VALUE)
> >
> > Thanks.  But I was talking about interactive customizations using
> > "M-x customize-variable" for both global and local customizations.
> > Doing this in file-local variables is fine, but in many cases users
> > want to use a specific dictionary when editing a buffer without having
> > to add local variable, perhaps even without making that permanent.
> 
> Okay, I see what you mean.  Then you'd have the options
> 
> To set globally:
> - M-x customize-variable RET new-ispell-dict-var
> 
> To set locally:
> - M-x ispell-change-dictionary
> - M-x set-variable  RET new-ispell-dict-var
> 
> I think what you have in mind doesn't work, because M-x
> customize-variable sets the default value of a variable.  This means
> that after using M-x customize-variable RET ispell-local-dictionary, the
> value of ispell-dictionary will be forever (in the current Emacs
> session, at least) masked by ispell-local-dictionary.  This is a sort of
> undefined behavior, actually, and a good reason to not have 2 variables
> for basically the same purpose.

Now it's clear that we disagree, and so lets' agree to disagree.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 14 Nov 2025 17:01:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 14 12:01:03 2025
Received: from localhost ([127.0.0.1]:33242 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJxAV-0003Cw-Ey
	for submit <at> debbugs.gnu.org; Fri, 14 Nov 2025 12:01:03 -0500
Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]:50605)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <arstoffel@HIDDEN>)
 id 1vJxAS-0003CQ-C2
 for 79417 <at> debbugs.gnu.org; Fri, 14 Nov 2025 12:01:01 -0500
Received: by mail-ej1-x629.google.com with SMTP id
 a640c23a62f3a-b728a43e410so348045566b.1
 for <79417 <at> debbugs.gnu.org>; Fri, 14 Nov 2025 09:01:00 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763139654; x=1763744454; darn=debbugs.gnu.org;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=HDZXcsvJcxJktIV8X5MLlzJrUsQJyV1GuqpfwR1ho30=;
 b=U++v/K/oNFs5CgBcEozELxCmV1xvT3va04JqBh8909AIloHwuShkHy1iUU7oRUuqRK
 TSf7QBoNWpcSxl8YyTsak76XPOq3noAkbNRzAxVVoa9MEio7dgi8DpRqoOhCiqhQ6BAk
 l4RjBbMnnz/7Om9tpgvwW/eA4WNc1WWiCvfk0fnOcOdQEkPSPMCEN/bewV4bRhjAcVby
 XlqsM1tqoCgBZhlr3VGQw2Cg6+y2eQ3jF7uJIyWwGoGEi+P6Gbwbr6KcpQgZo1UjDlEG
 Z6BCxRmqSn6dyNnIXQOcT2eAAdvzJxOu8/vTtCyGzn9mGqqQ70VkPqMhuKEcQOIpaZ8d
 e7yQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763139654; x=1763744454;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=HDZXcsvJcxJktIV8X5MLlzJrUsQJyV1GuqpfwR1ho30=;
 b=I4/B0/inhllLgZHU8IyWt+nY6DzP8dS+l6kK/JzgfYr4xrUrSn6MDQHnrHJoQKKooj
 p/9DVM+HQnMxSzRUovKjgOsbFewCxP+cQiGc0MrZ9s5NMj/Kerb4F2ZeXbcQX+FtzliY
 1gk3RX6cYeo5wBznp9+dC0aFlG6oxXlmpXp1VRsJwbSms87uhe51l3cBl2kZyeBGBfxM
 XKk/WKe9HFJPJC4xPAKJNulqGfygKui3m9ngp+61eN2Wk46LE6UxZFrJxg4T45Qm8CAU
 RjoviMR/xOybzNCqoDQg2mZiFL8AfXq6O6//xhtiCkhRtnSJU4KPO53i8UueHjGb0mRO
 lmzg==
X-Forwarded-Encrypted: i=1;
 AJvYcCWFCIvb8oeo5qrXkGf/GLoqMbqUfGuxNLTKkGTWFiA/51aBKp9iXRGOLu6cLoWj8D0RW/ulCg==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YxF7Ly+VaS3cPrpfayllcb0T0p1tZWEIQeVZOu+v4TtG0KeQ+XF
 bkoV4ItkPP0ngRz+zxBr3Dpo4yiOhm1MFc6AamKA4EWNnjk+DCITAvbq
X-Gm-Gg: ASbGncui4CVoMHkSjmybgEMapcELmxmnqA0ieUUGBLdm2r/xns7ZyBjqFdSnuAhVU+h
 O22qxq0of/qBJyin46DCsgg2obQwq+wRbaz2STzX2Sa1QwwFdfOs7v7hkuT5QB1F7g9aXVx7z3X
 ZHK1Ro2sTehlvPamt4MuYfffKlt6zT7OJpZRtLQSJONsOIA+4fIgQ1aTv24TcVsH1nOuo5e6yWx
 N5r3K6tLuKqwltfqgGlauJKsrfLeR/ZeIYoP2ioH4Wl+znG2rT/e5L3y/nTeI127Sg0O6+fHZI/
 i4+FntFxwtOCj7KxS7FLJqsLels1TonWia6LYiE6atrvzAa/8J/vkkS+vyOIxDRCS4ine7l9TSF
 thvA/Tg9LhgAXC/OIGLzRk9hNjkwge6iBzXk5iShnIv0dUnV4J0cYk0FPGBys01F1KlRtP+Y9Cw
 ==
X-Google-Smtp-Source: AGHT+IFIVJ/0TTANHg7SON6rTKfV9D03zd9kisEQmSaGoadycU6VRJgmzxHPVZvsERtqBB0U0KFg1w==
X-Received: by 2002:a17:907:60d0:b0:b72:a5bd:c585 with SMTP id
 a640c23a62f3a-b7367bc68fbmr312749366b.46.1763139653978; 
 Fri, 14 Nov 2025 09:00:53 -0800 (PST)
Received: from ars3 ([2a02:8109:8a95:9a00::e45b])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-b734fed80f0sm419901866b.66.2025.11.14.09.00.53
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Fri, 14 Nov 2025 09:00:53 -0800 (PST)
From: Augusto Stoffel <arstoffel@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <86a50or9lj.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN> <86fraisc34.fsf@HIDDEN>
 <87ecq28i21.fsf@HIDDEN> <86bjl6s4tu.fsf@HIDDEN>
 <87zf8q71ir.fsf@HIDDEN> <867bvus1j0.fsf@HIDDEN>
 <CANVbq5=6SSez-JDLjNA7TGjXHKW+F7GADdJf+r8vD69EDmg=WQ@HIDDEN>
 <86wm3trip0.fsf@HIDDEN> <87ldk9klci.fsf@HIDDEN>
 <86ecq0rgsw.fsf@HIDDEN> <87cy5klrcg.fsf@HIDDEN>
 <86a50or9lj.fsf@HIDDEN>
Date: Fri, 14 Nov 2025 18:00:52 +0100
Message-ID: <871pm0lfaz.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org,
 Augusto Stoffel <arstoffel@HIDDEN>, krisbalintona@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, 14 Nov 2025 at 16:07, Eli Zaretskii <eliz@HIDDEN> wrote:

>> From: Augusto Stoffel <arstoffel@HIDDEN>
>> Cc: Augusto Stoffel <arstoffel@HIDDEN>,  krisbalintona@HIDDEN,
>>   yandros@HIDDEN,  79417 <at> debbugs.gnu.org,  emacs-devel@HIDDEN
>> Date: Fri, 14 Nov 2025 13:40:47 +0100
>> 
>> On Fri, 14 Nov 2025 at 13:31, Eli Zaretskii <eliz@HIDDEN> wrote:
>> 
>> > Earlier you seemed to be saying that a single defcustom could serve
>> > for both global and buffer-local values, even if they were different.
>> > So please describe how a user would go about customizing the global
>> > and the local values to different dictionaries.
>> 
>> Let's imagine ispell-dictionary and ispell-local-dictionary get unified
>> under the name new-ispell-dict-var.
>> 
>> Global:
>>   Interactively: M-x customize-variable RET new-ispell-dict-var
>>   Via Lisp: (setq-default new-ispell-dict-var VALUE)
>> 
>> Local:
>>   Interactively: M-x add-file-local-variable RET new-ispell-dict-var
>>   Via Lisp: (setq-local new-ispell-dict-var VALUE)
>
> Thanks.  But I was talking about interactive customizations using
> "M-x customize-variable" for both global and local customizations.
> Doing this in file-local variables is fine, but in many cases users
> want to use a specific dictionary when editing a buffer without having
> to add local variable, perhaps even without making that permanent.

Okay, I see what you mean.  Then you'd have the options

To set globally:
- M-x customize-variable RET new-ispell-dict-var

To set locally:
- M-x ispell-change-dictionary
- M-x set-variable  RET new-ispell-dict-var

I think what you have in mind doesn't work, because M-x
customize-variable sets the default value of a variable.  This means
that after using M-x customize-variable RET ispell-local-dictionary, the
value of ispell-dictionary will be forever (in the current Emacs
session, at least) masked by ispell-local-dictionary.  This is a sort of
undefined behavior, actually, and a good reason to not have 2 variables
for basically the same purpose.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 14 Nov 2025 14:07:52 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 14 09:07:52 2025
Received: from localhost ([127.0.0.1]:60537 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJuSt-0003SP-Pe
	for submit <at> debbugs.gnu.org; Fri, 14 Nov 2025 09:07:52 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:57206)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vJuSr-0003SF-Ps
 for 79417 <at> debbugs.gnu.org; Fri, 14 Nov 2025 09:07:50 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vJuSk-0002PV-Tp; Fri, 14 Nov 2025 09:07:43 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=watanlflPH+bKRMB+k/UuW1A56uITXYvfIjDDyum3SI=; b=p0BZPTtSRN6C
 YYg+BD37phy1NGdzIvxB2qB9t0mPAxgeE5mx7xAL1EM39ZrqrKBNSLWt9PkAPtZuuo2JvZvAtuwj7
 vUg6IFjkBr3WsElExjUe8C0WUpkGlH55qoiuOjycF+aehC2pQaUcEJWgDHc6GDPGMdudqUA5by9PV
 +kOZ7CcXSZhFj+jjouow9Qx+DlIvcC9VKGCpb7avnUh+aHt1XTLfyWIeerme/nw74otoydAYpd5nv
 AmwUS6EmX/UC8YAzWiWhtbT0GO0S0ZrhOygAoOelLlssKE5QAd1M0cpSdHbNw5aG6dgxazL2MqV3N
 8dvvat7NxSAOOLalQYXWDQ==;
Date: Fri, 14 Nov 2025 16:07:36 +0200
Message-Id: <86a50or9lj.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Augusto Stoffel <arstoffel@HIDDEN>
In-Reply-To: <87cy5klrcg.fsf@HIDDEN> (message from Augusto Stoffel on Fri, 
 14 Nov 2025 13:40:47 +0100)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN> <86fraisc34.fsf@HIDDEN>
 <87ecq28i21.fsf@HIDDEN> <86bjl6s4tu.fsf@HIDDEN>
 <87zf8q71ir.fsf@HIDDEN> <867bvus1j0.fsf@HIDDEN>
 <CANVbq5=6SSez-JDLjNA7TGjXHKW+F7GADdJf+r8vD69EDmg=WQ@HIDDEN>
 <86wm3trip0.fsf@HIDDEN> <87ldk9klci.fsf@HIDDEN>
 <86ecq0rgsw.fsf@HIDDEN> <87cy5klrcg.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, krisbalintona@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Augusto Stoffel <arstoffel@HIDDEN>
> Cc: Augusto Stoffel <arstoffel@HIDDEN>,  krisbalintona@HIDDEN,
>   yandros@HIDDEN,  79417 <at> debbugs.gnu.org,  emacs-devel@HIDDEN
> Date: Fri, 14 Nov 2025 13:40:47 +0100
> 
> On Fri, 14 Nov 2025 at 13:31, Eli Zaretskii <eliz@HIDDEN> wrote:
> 
> > Earlier you seemed to be saying that a single defcustom could serve
> > for both global and buffer-local values, even if they were different.
> > So please describe how a user would go about customizing the global
> > and the local values to different dictionaries.
> 
> Let's imagine ispell-dictionary and ispell-local-dictionary get unified
> under the name new-ispell-dict-var.
> 
> Global:
>   Interactively: M-x customize-variable RET new-ispell-dict-var
>   Via Lisp: (setq-default new-ispell-dict-var VALUE)
> 
> Local:
>   Interactively: M-x add-file-local-variable RET new-ispell-dict-var
>   Via Lisp: (setq-local new-ispell-dict-var VALUE)

Thanks.  But I was talking about interactive customizations using
"M-x customize-variable" for both global and local customizations.
Doing this in file-local variables is fine, but in many cases users
want to use a specific dictionary when editing a buffer without having
to add local variable, perhaps even without making that permanent.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 14 Nov 2025 12:40:59 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 14 07:40:59 2025
Received: from localhost ([127.0.0.1]:60405 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJt6p-0008QV-6E
	for submit <at> debbugs.gnu.org; Fri, 14 Nov 2025 07:40:59 -0500
Received: from mail-ed1-x52a.google.com ([2a00:1450:4864:20::52a]:59595)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <arstoffel@HIDDEN>)
 id 1vJt6m-0008QP-3y
 for 79417 <at> debbugs.gnu.org; Fri, 14 Nov 2025 07:40:57 -0500
Received: by mail-ed1-x52a.google.com with SMTP id
 4fb4d7f45d1cf-6419e6dab7fso2897573a12.2
 for <79417 <at> debbugs.gnu.org>; Fri, 14 Nov 2025 04:40:56 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763124050; x=1763728850; darn=debbugs.gnu.org;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=PUfT1OaN8OV4fDh441KjocB7EBoZ9dh1vFnWRwnIaJw=;
 b=MLZp6TRZJlvexaLWEsOGb2ELViCWrJjJ0JAPDZ5z9T+ERo5qk+7PK24JXihmQjlb7E
 gGXA1NL9y4i8NVzWPYG0oAz8LIjC4rvhc6shW87vnd/NSr1pzCcx3kbjn4CONkEW1XDd
 IgiIfy71DKxnoLR7jcPyUq35wrECCYpSdbdNAML8BifNo80c7ju8pAWYvTMb+ur6kqxL
 EasJzl6M7Owlydzyj99plRBTSc/oZAitym7gHrORaDeyRQqJPW4hAVv+hTwKfRC6ltQI
 eIZVqLIZ0bgr4xQQ4Or9CPuzd5s8u2BxGXekegGSGm2efnLcowNbuTzifrur4VGpLIH8
 9bXQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763124050; x=1763728850;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=PUfT1OaN8OV4fDh441KjocB7EBoZ9dh1vFnWRwnIaJw=;
 b=p8QGJfC2kvGFefSabKqcphZlhAv0UYFElk+Z3Q7NjYJy4FS5z1genCbftqehJw9e3f
 myKwAePxzoIono2yggSCEF+ReXCXOtiKKLfU22fNCrP0VEkow9ciCl+Jh+8KYsh9VkGf
 9yjfgv53XW/SYVisKNGSorJk7xydORzP6o33XlYHpr6YlBT63Lv7mMbm/Yzr7H/7TtzH
 yk41Nu4FaatIGEAEaJzfkL5Sai/czYjHGi1VfbCGV2l+inyn3yMlDqoZ5wZ93C8hK93N
 5VR/e6crMrQAzNIfAackSXDwT1X4KZ4Q6F8jgGlaIoadj28W/kVKFZMNAe21VnJXAuGg
 Q7Sw==
X-Forwarded-Encrypted: i=1;
 AJvYcCVaZRowgGPX2x6pIRmNOkI0NiGNkxA1ZQHmi2xuzzqk9El9JDrQZjLCvtR+Qyi3JODxgAEIJQ==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YziZkDdgUWkKU4MdRTom+pvBq+xo7H+ruXSwRV47JA2DrmnZ5qr
 EnU0JFvhVDYBh7KjuWSO8a9JsmnuQF/BWSCtXRo26lwUzOOD1GXZ+PO+
X-Gm-Gg: ASbGncviLMxV8l15IiPO8SdnrIlIdngVxW9MfUt42o2uvdNQCM1wYH0VGKZ14Dj0Fv4
 mHnl26Ocsa/6a8S2JoxspQlRD5T+y72MimyhnH54JgsoQ/7EggeaCEBIa4FyWhpYGn1eCED710r
 pnKfy9muc0XqjWLZjmHUZF+bUmBQV+/5/is5QwHIGwYITKtt56Hl0pCmiHe4BGJkjhps3D7AKsV
 yX4OFVENkJ4hHMwmfMnR4YH98FsSZK8BD2ntjqCpK/BsKhLixXepRSsBGxv9Ng3+s3U5m+Q0TfJ
 izNcZgNnLX3mgexwPKv39hySSKWfJqzKH5UzzcdsngRixVIS8dgLd8mAE+CNaqW4ly1m7KdFDQf
 YHy+by4LbmEQf5dFBagZjXxkP2osoSOD+qMmE+Lh3OpoCCyoIJ5JXmDxeh3C9YnM=
X-Google-Smtp-Source: AGHT+IHgRCfAImMEaurQRvsum7jUBUFFBudIRO7SvxEViCO92970p9umTZ+VjyYexTG4mH/HmgpiqQ==
X-Received: by 2002:a17:907:1c81:b0:b71:2145:dfc8 with SMTP id
 a640c23a62f3a-b7367962422mr302125266b.39.1763124049420; 
 Fri, 14 Nov 2025 04:40:49 -0800 (PST)
Received: from ars3 ([2a02:8109:8a95:9a00::e45b])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-b734fda8a7bsm371667766b.54.2025.11.14.04.40.48
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Fri, 14 Nov 2025 04:40:48 -0800 (PST)
From: Augusto Stoffel <arstoffel@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <86ecq0rgsw.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN> <86fraisc34.fsf@HIDDEN>
 <87ecq28i21.fsf@HIDDEN> <86bjl6s4tu.fsf@HIDDEN>
 <87zf8q71ir.fsf@HIDDEN> <867bvus1j0.fsf@HIDDEN>
 <CANVbq5=6SSez-JDLjNA7TGjXHKW+F7GADdJf+r8vD69EDmg=WQ@HIDDEN>
 <86wm3trip0.fsf@HIDDEN> <87ldk9klci.fsf@HIDDEN>
 <86ecq0rgsw.fsf@HIDDEN>
Date: Fri, 14 Nov 2025 13:40:47 +0100
Message-ID: <87cy5klrcg.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org,
 Augusto Stoffel <arstoffel@HIDDEN>, krisbalintona@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, 14 Nov 2025 at 13:31, Eli Zaretskii <eliz@HIDDEN> wrote:

> Earlier you seemed to be saying that a single defcustom could serve
> for both global and buffer-local values, even if they were different.
> So please describe how a user would go about customizing the global
> and the local values to different dictionaries.

Let's imagine ispell-dictionary and ispell-local-dictionary get unified
under the name new-ispell-dict-var.

Global:
  Interactively: M-x customize-variable RET new-ispell-dict-var
  Via Lisp: (setq-default new-ispell-dict-var VALUE)

Local:
  Interactively: M-x add-file-local-variable RET new-ispell-dict-var
  Via Lisp: (setq-local new-ispell-dict-var VALUE)

> Because what you say above left me confused, both about what you think
> happens and whether (and why) it fits perfectly what users will want.
> Apologies if I misunderstand something.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 14 Nov 2025 11:32:25 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 14 06:32:25 2025
Received: from localhost ([127.0.0.1]:60279 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJs2T-0002nD-At
	for submit <at> debbugs.gnu.org; Fri, 14 Nov 2025 06:32:25 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:55158)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vJs2R-0002n1-Q1
 for 79417 <at> debbugs.gnu.org; Fri, 14 Nov 2025 06:32:24 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vJs2L-0000O7-Of; Fri, 14 Nov 2025 06:32:17 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=5wYZmVLB58QlMH3uDuktvsOBSGGyoBrurUb3LzBnlZs=; b=sR65DRos15NM
 V3kHPxEQrw9FdNnN+2GqxzSrZyc9SbWdXpKR+hkcOOPqhamZ5ZG4vAs9hmvm8Ry4bHHdzYa6NSJS/
 cycz3h7uJxvU2RmIJDGGSy1QZ36Qtl8jF4/olmOj6cw5mmtx67U/Jbs2QN31P2ylJU1oqqNLXurvV
 5zbKo2QMta2Q8Iq1z3AUlcl0OGakhIMoZI6k1ayi/9gtcnvckwefqqyUnMsMCl/j27eWB8Lgh9ymf
 c6lMe/643S+R756+lM9xHgpdtAhmkCPxIsC69aIZ0ILGgbO+leLn+VFfjInBJDnZPepW9hrLQL4Ju
 R5f6riy4bnlysefXPjttQQ==;
Date: Fri, 14 Nov 2025 13:31:59 +0200
Message-Id: <86ecq0rgsw.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Augusto Stoffel <arstoffel@HIDDEN>
In-Reply-To: <87ldk9klci.fsf@HIDDEN> (message from Augusto Stoffel on Fri, 
 14 Nov 2025 10:35:41 +0100)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN> <86fraisc34.fsf@HIDDEN>
 <87ecq28i21.fsf@HIDDEN> <86bjl6s4tu.fsf@HIDDEN>
 <87zf8q71ir.fsf@HIDDEN> <867bvus1j0.fsf@HIDDEN>
 <CANVbq5=6SSez-JDLjNA7TGjXHKW+F7GADdJf+r8vD69EDmg=WQ@HIDDEN>
 <86wm3trip0.fsf@HIDDEN> <87ldk9klci.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 krisbalintona@HIDDEN, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Augusto Stoffel <arstoffel@HIDDEN>
> Cc: Kristoffer Balintona <krisbalintona@HIDDEN>,  arstoffel@HIDDEN,
>   yandros@HIDDEN,  79417 <at> debbugs.gnu.org,  emacs-devel@HIDDEN
> Date: Fri, 14 Nov 2025 10:35:41 +0100
> 
> On Thu, 13 Nov 2025 at 18:38, Eli Zaretskii <eliz@HIDDEN> wrote:
> 
> >> In my opinion, the above state of affairs is simple and straightforward.
> >> But I also know some elisp. Eli, were you imagining confusion for users
> >> who may not know elisp? Is your idea to keep defcustoms not
> >> buffer-local?
> >
> > A defcustom can be buffer-local, but that it is _only_ buffer-local,
> > and becomes local once set.  It doesn't fit well an MO where there's
> > one global value and other local values.
> 
> When you M-x customize a variable that automatically becomes
> buffer-local when set, what is actually called under the hood is
> set-default (setting the variable's value for the *Customize* buffer, or
> the temp buffer is used to load the saved configuration during startup,
> would indeed be silly and that's definitely not what happens).
> 
> This to me fits perfectly the situation at hand.  What else could one
> possibly want to do?

Earlier you seemed to be saying that a single defcustom could serve
for both global and buffer-local values, even if they were different.
So please describe how a user would go about customizing the global
and the local values to different dictionaries.  Because what you say
above left me confused, both about what you think happens and whether
(and why) it fits perfectly what users will want.  Apologies if I
misunderstand something.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 14 Nov 2025 09:35:52 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Nov 14 04:35:52 2025
Received: from localhost ([127.0.0.1]:60075 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJqDg-00068Z-B7
	for submit <at> debbugs.gnu.org; Fri, 14 Nov 2025 04:35:52 -0500
Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]:51317)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <arstoffel@HIDDEN>)
 id 1vJqDe-00068R-At
 for 79417 <at> debbugs.gnu.org; Fri, 14 Nov 2025 04:35:50 -0500
Received: by mail-ed1-x535.google.com with SMTP id
 4fb4d7f45d1cf-640ca678745so3311465a12.2
 for <79417 <at> debbugs.gnu.org>; Fri, 14 Nov 2025 01:35:50 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763112944; x=1763717744; darn=debbugs.gnu.org;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=fErkn0dQNAyAdoSjAo6QlhxVSZzWVM9yZqBD6JPfXes=;
 b=hlJy4lfz+RzX6ocFObA3y64oNa5qiafeitqfX5t8C/thGIvjcDF7sD/OCL+2EyHQGp
 xrcdtEREaBoSFaSbrgOuGUwvT1mTjcN6zO2mlazuf3ikLJVay9f0l/njcVopBcU+2sjc
 auESK8bqsm2r7TM9D8841Zm6yW+BLEXunYNgZdGT0NukdLifWH3UzRvZ1nqt3rkKAm/g
 DvnlUn2jpWLJ/O5xoL66VPzOx7vDJwK3ZmlDEw7Jli4FRBbcfT2zej6UA/xhvvTXTKUC
 u/6TborBgAyoXutJtpzHGi2wCKprSN6UPllvfBwiOf4vyKVm3/1M4Tg+qqbBgMCy5B4K
 Z0FA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763112944; x=1763717744;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=fErkn0dQNAyAdoSjAo6QlhxVSZzWVM9yZqBD6JPfXes=;
 b=w7jYZoBFgjyObisvDs6Az2nk/5f/jMdGBqrOaiZBrQcmrMCCF764XXlGlDsIGQblzj
 5rMjMibvCeZciYHuD7ZbHLPNgEGD+FwXZqyMF2wdPwpojINnMcbs4ZWn9YDmAdVZJ/Kc
 tKSPrt5Lg4IDTERyhtK4B36yGP9eZcD43qAWXPwUhh8r/3KTe+OUskmmXbwnU3vgFsLg
 6o4Lp2T9dlwiu8Jwv2SSof8Rw1LxBv41r2ddHuX1hIT/GM/cCaZncBiZZLw77XH/NjIE
 cjjoRbr8AAalzw9PkpJepEyF5ZvyqETvBkORX8OIBStjSMdun0piewGr2vW4XbCsfqUf
 g+Yg==
X-Forwarded-Encrypted: i=1;
 AJvYcCV4//XGeWyycWGk64CNigHVwDuJZrzO33Hd9J2vn2ML5JEM/Wbk19+q3LpNbM04fRJzFtx9Eg==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yz3bpkuljfoVBHcdat4c8/mGpfBClWuUokyluutEHQewi9e9A5m
 EwJEyhGTpLVQCnk+KF68SpD7jSAQ4uXUlWU1rxDOm8yyEdwQj1YmiugC
X-Gm-Gg: ASbGncsfuUgxpWk4OiD+RD2c4T4mAhHHFLxJPMn1+EcbS2+avb9cuoyS2tdGI/liiuf
 vEh+9RKvpVdo4UK/951fyXK3Bnu3nIL0vEZ1zXZxCF0DR/vMaaj0Ys273JZT9vB5QhsoXZlBhwJ
 RXr5jop9Ih06KbrscvAhI+y0P/dJ9BvfAcySdqagNq7xJmI1JTDebMtuYVjSH6GfpvtmXfBwMOk
 CsgXLH+t6GQdkXt8OuC1rXTK3ctqkdkOxQjOXN5Lc1KXAPlu8z+SUJl/08EvitNPxAx26NAubb7
 BT9Fxsh5Nni3g3FAqg1mlYcmxRR+Gn0qu9/gxWzvYniSrs9y1qineyxTgDGKIav51cln8WafJZC
 ExOEZCmzIUCEPe7z/jYPoIHP8Rr+D6Tffco/vllbwTPTMq13/CcWQ
X-Google-Smtp-Source: AGHT+IEKktUlytYkH3GFRkcrmc5z4d6h4AFpVwfpt0/mQM8UH5hoA3m4YuUNvRENvs3P65yJ7WvthA==
X-Received: by 2002:a05:6402:234c:b0:641:27d8:ec4c with SMTP id
 4fb4d7f45d1cf-64350e06ef6mr2202946a12.16.1763112943809; 
 Fri, 14 Nov 2025 01:35:43 -0800 (PST)
Received: from ars3 ([2a02:8109:8a95:9a00::e45b])
 by smtp.gmail.com with ESMTPSA id
 4fb4d7f45d1cf-6433a3f8eb0sm3434863a12.12.2025.11.14.01.35.41
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Fri, 14 Nov 2025 01:35:42 -0800 (PST)
From: Augusto Stoffel <arstoffel@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <86wm3trip0.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN> <86fraisc34.fsf@HIDDEN>
 <87ecq28i21.fsf@HIDDEN> <86bjl6s4tu.fsf@HIDDEN>
 <87zf8q71ir.fsf@HIDDEN> <867bvus1j0.fsf@HIDDEN>
 <CANVbq5=6SSez-JDLjNA7TGjXHKW+F7GADdJf+r8vD69EDmg=WQ@HIDDEN>
 <86wm3trip0.fsf@HIDDEN>
Date: Fri, 14 Nov 2025 10:35:41 +0100
Message-ID: <87ldk9klci.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 Kristoffer Balintona <krisbalintona@HIDDEN>, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, 13 Nov 2025 at 18:38, Eli Zaretskii <eliz@HIDDEN> wrote:

>> In my opinion, the above state of affairs is simple and straightforward.
>> But I also know some elisp. Eli, were you imagining confusion for users
>> who may not know elisp? Is your idea to keep defcustoms not
>> buffer-local?
>
> A defcustom can be buffer-local, but that it is _only_ buffer-local,
> and becomes local once set.  It doesn't fit well an MO where there's
> one global value and other local values.

When you M-x customize a variable that automatically becomes
buffer-local when set, what is actually called under the hood is
set-default (setting the variable's value for the *Customize* buffer, or
the temp buffer is used to load the saved configuration during startup,
would indeed be silly and that's definitely not what happens).

This to me fits perfectly the situation at hand.  What else could one
possibly want to do?

Concerning the other message about the quality of the docstring, I think
the docstring is perfectly adequate.  Some types of confusion shouldn't
be solved by explaining things more, but rather by reducing complexity.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 13 Nov 2025 18:15:46 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 13 13:15:46 2025
Received: from localhost ([127.0.0.1]:56300 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJbrG-0004KY-BM
	for submit <at> debbugs.gnu.org; Thu, 13 Nov 2025 13:15:46 -0500
Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:56565)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <paaguti@HIDDEN>) id 1vJbr9-0004KQ-Jd
 for 79417 <at> debbugs.gnu.org; Thu, 13 Nov 2025 13:15:40 -0500
Received: by mail-wr1-x42a.google.com with SMTP id
 ffacd0b85a97d-429ce7e79f8so955717f8f.0
 for <79417 <at> debbugs.gnu.org>; Thu, 13 Nov 2025 10:15:39 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763057733; x=1763662533; darn=debbugs.gnu.org;
 h=references:to:cc:in-reply-to:date:subject:mime-version:message-id
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=zQAkP3r4ES3YVGec1LvFCRn8I+c26QUTBMa3aHLYnRU=;
 b=SViz9VA0BFD+cHuYt23fCDGwTLvYSTjNSH4S/Zfho9Zi/R0yFH7R1XCwDQNPRjRykM
 gNXtTq8SeHPg5zM81A4t4QaBqbFQTXqATkmHCm66pXhGqrGqnGrSYCAR/nR0sp7uFr0y
 /qZ/k/MyGtABk9f68tvLZzI3HF32giDqCt+5GwJMFtHVRKFVID1+j0lgIH3CCUrMvEzn
 uyixNtqZsFbuM2jFqH64YVbX4CaLnOlJuIUuwFt+Gyn5MOuG2lY/694o8CfKXq49JexT
 uzM5WBFdPrf94T3DtIoi5UiSVWgzCGJJBoF4SH9FQjL8nr+G/tWdfLYeWPsDcpLpCpEZ
 raEQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763057733; x=1763662533;
 h=references:to:cc:in-reply-to:date:subject:mime-version:message-id
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=zQAkP3r4ES3YVGec1LvFCRn8I+c26QUTBMa3aHLYnRU=;
 b=gqJMkzM51NH1tWuiF8LX7/bGwHgYVGxNoEQ167bZ2btnCUFosE60rwafnT7uT6+5hw
 D9S9TFSDYOdAHepU7n0Wdr4sVWmu1C4GUvvPK2JH+PGtQ6aE9rNIIpaeWsaFPsZuDEzP
 qHUserfWjsPQ49ruoWQ1KPLmzSigg2/pLVg/zcXaap+ZbcBvGdY7kKGFIdheIcRj3rWm
 QVQBubkZkbzyyuSK7U5q80LLBPe5QW0oL7cidfyzlpnMHkR0O7tcswvLHEjD3AhDj4Hm
 fjMBXupi78ZLhnjwNaPvBnU44lTEz+Uy1x7xF6I4PqoTCZbiRiy5NGd/XbqdgjfJVCQF
 HgZA==
X-Forwarded-Encrypted: i=1;
 AJvYcCUbTFee0Jlnj0Qeq53AWy2ZrZpknJCvNmKJ3PN03CsBUStK83PwsvOpwv2+04Sjy0XZD0vsfA==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YzJ6wHMBKYY45d5mlHaGl1xFTxpSovFOPW95BOB0LhmWt+gq04p
 ag5XwRD3aRA1x5ejxLKxfDnNtQhlgfSrNNlPfuyDIjjc1iD1IpEOnLtc
X-Gm-Gg: ASbGnct/KGk7OrS8//7ZF0ACvPcV9qGc/E/E2S8yyCp8fnVgb0mp3/CH1KBhdNzF8xg
 Tq6qIT1YKge0/xdZBeqtSJLAZyHjPSZYRbsuSLclvNxelvWtZTasWMqBPJiAvqVUk9jOKjXwprH
 QpNK1214tPD11BBX2kqJU2Qz+KArzMcbe5mVYnqQjuDOYvbugza0XerSX/ciNaAXEuvM69ykodb
 TAUl7SIECXG/Vzb71NcYzZg32C6cgILnsnETwEZJoBQ5foSrpYlhHnsrgXru7V7C4NLnHfB2Dec
 yLTXFHeVABX/NVqAKNzZXGb5Uzy1avLyaFfH+cAlozF3GkBzWBd4yhhJvdB8TsRleViP2c89CdZ
 FR8hTnHazCX94I/xw/pJLth1WM2/RbrMmvUYxyk5UJG7538L1GAZx3Ra8aHNLr22dY8Nh50GStA
 TnXAK/B0is/cPVejtUfCth1K+qbz0sE31yBabikjZ3+J40dBschVDvxgOzeQ==
X-Google-Smtp-Source: AGHT+IHc4Av9kIsn9HS7CypyaqUvayJs99UAdXI3D9cGVbzSM+DjgOvs6gUNU5A1JBBzc/ktSbA7sg==
X-Received: by 2002:a05:6000:2001:b0:42b:4247:b07e with SMTP id
 ffacd0b85a97d-42b5934b278mr363500f8f.25.1763057732865; 
 Thu, 13 Nov 2025 10:15:32 -0800 (PST)
Received: from smtpclient.apple (101.red-79-148-71.dynamicip.rima-tde.net.
 [79.148.71.101]) by smtp.gmail.com with ESMTPSA id
 ffacd0b85a97d-42b53f17cbfsm4981984f8f.35.2025.11.13.10.15.31
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Thu, 13 Nov 2025 10:15:32 -0800 (PST)
From: Pedro Andres Aranda Gutierrez <paaguti@HIDDEN>
Message-Id: <EF3F516E-38A2-489C-B34B-7010D4033979@HIDDEN>
Content-Type: multipart/alternative;
 boundary="Apple-Mail=_41565496-7BE2-4B8A-B2A8-3E228429F79B"
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3826.700.81.1.3\))
Subject: Re: Re: bug#79417: How can we improve built-in spell-checking 
 (ispell and flyspell)?
Date: Thu, 13 Nov 2025 19:15:21 +0100
In-Reply-To: <mailman.31.1763053210.1414.emacs-devel@HIDDEN>
To: emacs-devel@HIDDEN
References: <mailman.31.1763053210.1414.emacs-devel@HIDDEN>
X-Mailer: Apple Mail (2.3826.700.81.1.3)
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 79417
Cc: 79417 <at> debbugs.gnu.org, krisbalintona@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--Apple-Mail=_41565496-7BE2-4B8A-B2A8-3E228429F79B
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

Hi

> El 13 nov 2025,Kristoffer Balintona <krisbalintona@HIDDEN =
<mailto:krisbalintona@HIDDEN>> escribi=C3=B3:
>=20
> Also, I should add that, IMO, the matter of whether we have two or
> multiple dictionary user options is less significant than the =
perceived
> speed of ispell/flyspell and other UI-related things I listed earlier
> (partly because we can take approach (2), which doesn't involve =
changing
> the packages themselves).

Both are equally significant, IMHO=E2=80=A6=20

If you overcome responsiveness, there will be users troubles with the =
=E2=80=98configuration dichotomy=E2=80=99.
And on the other hand, when you consider activating a feature and you =
are not sure about how to configure correctly, would you activate it? =
Yours truly wouldn=E2=80=99t unless there is no other way.=20

Now I=E2=80=99m back on jinx-only everywhere, but I needed to activate =
my old flyspell config in the (forced) transition to an Mx Mac and I =
didn=E2=80=99t remember all these little details anymore, so it was =
painful=E2=80=A6

Just my experience , /PA



--Apple-Mail=_41565496-7BE2-4B8A-B2A8-3E228429F79B
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"content-type" content=3D"text/html; =
charset=3Dutf-8"></head><body style=3D"overflow-wrap: break-word; =
-webkit-nbsp-mode: space; line-break: after-white-space;">Hi<br =
id=3D"lineBreakAtBeginningOfMessage"><div><br><blockquote =
type=3D"cite"><div>El 13 nov 2025,Kristoffer Balintona &lt;<a =
href=3D"mailto:krisbalintona@HIDDEN">krisbalintona@HIDDEN</a>&gt; =
escribi=C3=B3:</div></blockquote><blockquote type=3D"cite"><br =
class=3D"Apple-interchange-newline"><div><span style=3D"caret-color: =
rgb(0, 0, 0); font-family: Helvetica; font-size: 14px; font-style: =
normal; font-variant-caps: normal; font-weight: 400; letter-spacing: =
normal; text-align: start; text-indent: 0px; text-transform: none; =
white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none; float: none; display: inline !important;">Also, I =
should add that, IMO, the matter of whether we have two or</span><br =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
14px; font-style: normal; font-variant-caps: normal; font-weight: 400; =
letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;"><span =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
14px; font-style: normal; font-variant-caps: normal; font-weight: 400; =
letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none; float: none; =
display: inline !important;">multiple dictionary user options is less =
significant than the perceived</span><br style=3D"caret-color: rgb(0, 0, =
0); font-family: Helvetica; font-size: 14px; font-style: normal; =
font-variant-caps: normal; font-weight: 400; letter-spacing: normal; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;"><span style=3D"caret-color: rgb(0, 0, 0); =
font-family: Helvetica; font-size: 14px; font-style: normal; =
font-variant-caps: normal; font-weight: 400; letter-spacing: normal; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none; float: none; display: inline !important;">speed =
of ispell/flyspell and other UI-related things I listed =
earlier</span><br style=3D"caret-color: rgb(0, 0, 0); font-family: =
Helvetica; font-size: 14px; font-style: normal; font-variant-caps: =
normal; font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none;"><span style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; =
font-size: 14px; font-style: normal; font-variant-caps: normal; =
font-weight: 400; letter-spacing: normal; text-align: start; =
text-indent: 0px; text-transform: none; white-space: normal; =
word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: =
none; float: none; display: inline !important;">(partly because we can =
take approach (2), which doesn't involve changing</span><br =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
14px; font-style: normal; font-variant-caps: normal; font-weight: 400; =
letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;"><span =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
14px; font-style: normal; font-variant-caps: normal; font-weight: 400; =
letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none; float: none; =
display: inline !important;">the packages =
themselves).</span></div></blockquote><br></div><div>Both are equally =
significant, IMHO=E2=80=A6&nbsp;</div><div><br></div><div>If you =
overcome responsiveness, there will be users troubles with the =
=E2=80=98configuration dichotomy=E2=80=99.</div><div>And on the other =
hand, when you consider activating a feature and you are not sure about =
how to configure correctly, would you activate it? Yours truly =
wouldn=E2=80=99t unless there is no other =
way.&nbsp;</div><div><br></div><div>Now I=E2=80=99m back on jinx-only =
everywhere, but I needed to activate my old flyspell config in the =
(forced) transition to an Mx Mac and I didn=E2=80=99t remember all these =
little details anymore, so it was =
painful=E2=80=A6</div><div><br></div><div>Just my experience , =
/PA</div><br><div><br></div></body></html>=

--Apple-Mail=_41565496-7BE2-4B8A-B2A8-3E228429F79B--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 13 Nov 2025 16:39:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 13 11:39:02 2025
Received: from localhost ([127.0.0.1]:55663 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJaLd-0005rw-VD
	for submit <at> debbugs.gnu.org; Thu, 13 Nov 2025 11:39:02 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:36088)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vJaLb-0005rl-Rl
 for 79417 <at> debbugs.gnu.org; Thu, 13 Nov 2025 11:39:00 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vJaLV-0005Dj-Vy; Thu, 13 Nov 2025 11:38:54 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=DsVTm+5MGIImkwdnNVcCrrpUOCgtYNihwqOP5AdVs4w=; b=G61EVohCs2qD
 QUaDNGfWRDF3sfx60S6xldSW0S8/jYk7rE198rtHJAi/q9YMSAEEtovVivpiL1FA1xtDD3SA0ROAz
 nd8RasY9Y0AHnrZiUrnXuNeBhm4qxv6b0qJAS3gqCEAufb69pilRx8m4d/65YYIzZJT9IlmTygwqF
 vS8AN7ldPaj3vKJpqdmYK2N3eALtQoPTQXoxLCxqt4MmTCAmG0eJEMscnZMUwcKvYuvleE5gJuDrl
 NjgDKoW8RLr8jLLS2kddSO82qNMFnRViqrR1LsU+MWq0fMz8AGPWtJbEk+vrv4sqG3j6AVDH3jRnu
 1SXdVi5etMQSESsw5Rjryg==;
Date: Thu, 13 Nov 2025 18:38:51 +0200
Message-Id: <86wm3trip0.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <CANVbq5=6SSez-JDLjNA7TGjXHKW+F7GADdJf+r8vD69EDmg=WQ@HIDDEN>
 (message from Kristoffer Balintona on Thu, 13 Nov 2025 08:22:16 -0800)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN> <86fraisc34.fsf@HIDDEN> <87ecq28i21.fsf@HIDDEN>
 <86bjl6s4tu.fsf@HIDDEN> <87zf8q71ir.fsf@HIDDEN> <867bvus1j0.fsf@HIDDEN>
 <CANVbq5=6SSez-JDLjNA7TGjXHKW+F7GADdJf+r8vD69EDmg=WQ@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Kristoffer Balintona <krisbalintona@HIDDEN>
> Date: Thu, 13 Nov 2025 08:22:16 -0800
> Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
> 
> On Thu, Nov 13 2025, Eli Zaretskii wrote:
> 
> > Doesn't calling setopt in file-local variables require to use 'eval'?
> > And if so, doesn't it prompt the user to confirm (because 'eval' is
> > not safe by default)?  By contrast, ispell-local-dictionary is
> > considered safe as a local variable if its value is a string.
> 
> Maybe I've misunderstood something too? I think Augusto and I, when
> speaking about merging ispell-dictionary and ispell-dictionary into one
> user option, imagined something like the following situation:
> 1. Have a singular ispell-dictionary user option that is buffer-local,
>    meaning it has a default (i.e., global) value as well as buffer-local
>    values.
> 2. Users can set this option globally with either setopt or
>    setq-default.
> 3. Users can set this option buffer-locally via setq-local or file-local
>    variable lines (e.g., with add-file-local-variable or
>    add-file-local-variable-prop-line), or even directory-locally (via
>    add-dir-local-variable).
> 4. We may keep ispell-change-dictionary: it'll simply use setq-local to
>    change the buffer's value for ispell-dictionary.
> 5. We lose no functionality with only having one option.
> Were you imagining the same situation, Eli, or something else?

Yes: what about the ability to set the dictionary from file-local
variables?  This is needed if you want the file to be spell-checked
with a specific dictionary.

> In my opinion, the above state of affairs is simple and straightforward.
> But I also know some elisp. Eli, were you imagining confusion for users
> who may not know elisp? Is your idea to keep defcustoms not
> buffer-local?

A defcustom can be buffer-local, but that it is _only_ buffer-local,
and becomes local once set.  It doesn't fit well an MO where there's
one global value and other local values.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 13 Nov 2025 16:22:26 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 13 11:22:26 2025
Received: from localhost ([127.0.0.1]:55522 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJa5Z-0004zR-MN
	for submit <at> debbugs.gnu.org; Thu, 13 Nov 2025 11:22:26 -0500
Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]:52538)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <krisbalintona@HIDDEN>)
 id 1vJa5X-0004zC-KV
 for 79417 <at> debbugs.gnu.org; Thu, 13 Nov 2025 11:22:24 -0500
Received: by mail-lf1-x12a.google.com with SMTP id
 2adb3069b0e04-5957753e0efso1137938e87.1
 for <79417 <at> debbugs.gnu.org>; Thu, 13 Nov 2025 08:22:23 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763050937; x=1763655737; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=nrtYCzPgK5k/4v2vZixIfCVHhtgaM7+6X4ZS8I7dnG4=;
 b=YYFKQD8NFCSWXREV/fnNH2+ohPNGrNAh6TSOTjSQ/v4qCEAfmGOdwIGqwm3Rfpm6FW
 WnL7odf+c8P3poW0SDHJ1523YpGrGG8YOykbbpiw2GqgFgWTKDuhiQeQGn35ECIugZOQ
 r8BIT9ABXwPPZ3WRMvtH8dElVh7SqZdrpSu92iXATqxIHgr0UfakZktFCmNSnPo26Y5j
 n0RoUFI1g150zWFcqVwKRDR/4PLWg8kiUihUuUmksoq4RmFiTS8+1L2kInwRa+I7hZ55
 fvSr+tg7Rt4j6vB2JtYiP7am3Zh2EfJUTL8Qaj0qnGnvU4Vr+oliMUzJL+lhI6A/NoyU
 S5SQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763050937; x=1763655737;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=nrtYCzPgK5k/4v2vZixIfCVHhtgaM7+6X4ZS8I7dnG4=;
 b=qKqD4xk/MHRIR75Fz3U2ndy5hF+9l5ygyF0Q22DhtjCnY71LkmA6FDnvSx40cTzXYV
 OoV9V8u7WbM8fHS6dSPDqLU9v7RAaDEYzRA1FpgbfGx73A+j3gdCQAY9qvhaGH31AIDV
 /WuuK4TB5ROKHBEYt388GUoD0RpMCCRR+o/F0DU8flWxTP+hmKkNdFwmKPqt9YbWFSdI
 +aqtXaAxjy0/Ej9XlmIAlLJ6hQVOJCmKTQSHbgjDQxLenAlJzruMX1ZL7zDbqohyMvVf
 GMZfvYwtEgdoZdMD9PL/6O8pouG73j0M5FyDciP9/m9eS76VU3m1Z0otWBKxqoiNNH6G
 cC3w==
X-Forwarded-Encrypted: i=1;
 AJvYcCWjpWNJNae+fVNpj3O2q9r7k6nBkwyTro9KnAY6tep/vsrxtEqD/0ZvQ7NXohHzuh4m1M5ndw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YxqLIpG5Wk62zr/Qoqvc0aW1VDtBG4zoBm95fQVpSDhy1b4ZWxb
 rRq+GL9nNMbY78nhPVsD0G2dy9SO5SsogD7rgXW49qeGG+SNLo+HHwt1x1kn8SdBha/BQGpEGA+
 J4VKQz/zid+wpIjtelqWzR7A5EHZHH38=
X-Gm-Gg: ASbGncuBkfBN/7XRkBoJ1llwvCgp5aAjcddEDEfC2SjP3TQ+UghgK+FxRaqRXP+gyPi
 5EnwEEY93++F4ICduy8FRjni/0FgegO9kIf+lQ5bvUZOzfsVxymzlS3imrgrYJmRS6A+8mQ0ax7
 5wL+Og9pd8JZGY8jkWV6ATa8qOv9tWFcPru8nPEIasa1XZS8Y5JAw6JxvO4RdC9kHXXFAfb4YqK
 bk+ZXv6Z/HQ3XqffqdCbmraqTO37VbAk8wihICLibmwe6lVVeUDpS2vYvoLmYWp71MXz9M=
X-Google-Smtp-Source: AGHT+IF6i4AieJ3jEwIAEGRChhbQMx3/MqN9zLyXA2PuHMRFU37wuuXd4K8pLXbXIAekG4/1K1YtX71pur0MWB9hl6g=
X-Received: by 2002:a05:6512:2248:b0:595:80d2:cfee with SMTP id
 2adb3069b0e04-5958414c902mr48560e87.0.1763050936899; Thu, 13 Nov 2025
 08:22:16 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Thu, 13 Nov 2025 08:22:16 -0800
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Thu, 13 Nov 2025 08:22:16 -0800
From: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <867bvus1j0.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN> <86fraisc34.fsf@HIDDEN> <87ecq28i21.fsf@HIDDEN>
 <86bjl6s4tu.fsf@HIDDEN> <87zf8q71ir.fsf@HIDDEN> <867bvus1j0.fsf@HIDDEN>
MIME-Version: 1.0
Date: Thu, 13 Nov 2025 08:22:16 -0800
X-Gm-Features: AWmQ_blbMF-9NxF1QjLUQo1DUbXv6DeuG1mBv_YBceCWxjl9LjutPXnZmnw6Q20
Message-ID: <CANVbq5=6SSez-JDLjNA7TGjXHKW+F7GADdJf+r8vD69EDmg=WQ@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
To: Eli Zaretskii <eliz@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Nov 13 2025, Eli Zaretskii wrote:

>> From: Augusto Stoffel <arstoffel@HIDDEN>
>> Cc: krisbalintona@HIDDEN,  yandros@HIDDEN,  79417 <at> debbugs.gnu.org,
>>   emacs-devel@HIDDEN
>> Date: Thu, 13 Nov 2025 09:57:48 +0100
>>
>> On Thu, 13 Nov 2025 at 10:40, Eli Zaretskii <eliz@HIDDEN> wrote:
>>
>> > Buffer-local values with global value different have subtle aspects
>> > that even some Emacs developers trip upon.  I wouldn't want users to
>> > need to deal with that.  Also, both variables are defcustom's, and
>> > that doesn't handle buffer-local and global defaults too well, if at
>> > all, AFAIK.
>> >
>> > In any case, the onus is on you to explain why it is bad to have two
>> > separate variables, not why it's _possible_ to have just one.
>>
>> Kristoffer said he was confused about the existence of two similarly
>> named variables.  Which ones should I modify to achieve a particular
>> end?  What happens if I set ispell-dictionary locally of give
>> ispell-local-dictionary a default value?  Why isn't there just one
>> variable like virtually every other user option?
>
> The doc strings say:
>
>   (defcustom ispell-local-dictionary nil
>     "If non-nil, the dictionary to be used for Ispell commands in this buffer.
>   The value must be a string dictionary name,
>   or nil, which means use the global setting in `ispell-dictionary'.
>   Dictionary names are defined in `ispell-local-dictionary-alist'
>   and `ispell-dictionary-alist'.
>
>   Setting `ispell-local-dictionary' to a value has the same effect as
>   calling \\[ispell-change-dictionary] with that value.  This variable
>   is automatically set when defined in the file with either
>   `ispell-dictionary-keyword' or the Local Variable syntax."
>
>   (defcustom ispell-dictionary nil
>     "Default dictionary to use if `ispell-local-dictionary' is nil."
>
> It seems to me that your questions are answered there, but maybe I'm
> missing something.  We could always improve the documentation if the
> above is not clear enough.

Regardless of whether there should be one or two ispell dictionary
options, I agree with Eli's final remark. Lockywolf's patch (the origin
of this thread) was motivated by the confusion he felt as a user and is
also an aspect I expressed in my messages. Now, to address this
confusion, we can either (1) modify ispell/flypell itself or (2) add
explanations and clarity to the documentation (docstrings and the Emacs
manual).

Having one dictionary option would be approach (1), while leaving the
multiple options we have now should mean we do (2). I say this for the
sake of clarity in the conversation.

Also, I should add that, IMO, the matter of whether we have two or
multiple dictionary user options is less significant than the perceived
speed of ispell/flyspell and other UI-related things I listed earlier
(partly because we can take approach (2), which doesn't involve changing
the packages themselves).

>> >> If ispell-local-dictionary is removed, one would do setq-default
>> >> ispell-dictionary in the init file and setq-local ispell-dictionary to
>> >> switch to a different language in a specific buffer, just like any other
>> >> option.
>> >
>> > Once again, these are defcustom's, so reasoning about them in terms of
>> > setq-default etc. is not appropriate.  setq-default and setq-local
>> > make sense with defvars when we discuss Lisp programs, but here we are
>> > talking about user options and user customizations.  Asking users to
>> > use these will probably increase the confusion, not decrease it.
>>
>> Sure, the end user will use M-x customize or setopt and file/dir-local
>> variables, which ultimately set default and local values respectively.
>> This works just fine in my experience; if not, that would be a somewhat
>> severe bug.
>
> Doesn't calling setopt in file-local variables require to use 'eval'?
> And if so, doesn't it prompt the user to confirm (because 'eval' is
> not safe by default)?  By contrast, ispell-local-dictionary is
> considered safe as a local variable if its value is a string.

Maybe I've misunderstood something too? I think Augusto and I, when
speaking about merging ispell-dictionary and ispell-dictionary into one
user option, imagined something like the following situation:
1. Have a singular ispell-dictionary user option that is buffer-local,
   meaning it has a default (i.e., global) value as well as buffer-local
   values.
2. Users can set this option globally with either setopt or
   setq-default.
3. Users can set this option buffer-locally via setq-local or file-local
   variable lines (e.g., with add-file-local-variable or
   add-file-local-variable-prop-line), or even directory-locally (via
   add-dir-local-variable).
4. We may keep ispell-change-dictionary: it'll simply use setq-local to
   change the buffer's value for ispell-dictionary.
5. We lose no functionality with only having one option.
Were you imagining the same situation, Eli, or something else?

In my opinion, the above state of affairs is simple and straightforward.
But I also know some elisp. Eli, were you imagining confusion for users
who may not know elisp? Is your idea to keep defcustoms not
buffer-local?

I can't recall any off the top of my head, but are there other built-in
Emacs packages that have defcustoms that are buffer-locally set by that
package?

-- 
Kind regards,
Kristoffer




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 13 Nov 2025 15:38:25 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 13 10:38:25 2025
Received: from localhost ([127.0.0.1]:55263 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJZOz-0003El-Bn
	for submit <at> debbugs.gnu.org; Thu, 13 Nov 2025 10:38:25 -0500
Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]:49195)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <krisbalintona@HIDDEN>)
 id 1vJZOw-0003Eb-Kn
 for 79417 <at> debbugs.gnu.org; Thu, 13 Nov 2025 10:38:23 -0500
Received: by mail-lf1-x132.google.com with SMTP id
 2adb3069b0e04-592ff1d80feso1017447e87.2
 for <79417 <at> debbugs.gnu.org>; Thu, 13 Nov 2025 07:38:22 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763048296; x=1763653096; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=RCjjJuiYKPmoYJJsNyKjnwLnz2/eWGhD0tjPGfoLKNo=;
 b=VzPEyy8tvOI7Ic8ub4jSIbzu2wFjssOjKrSVDEY6CkOiYS+to1mk9RkjWFmZJXPHZj
 gV/Lt3uXerHd5+vfCh9SdPivWC1ln+R0CQ1s/n1OJ94hfXRS+tjbj57sJRRbf02edMsK
 QodTFMDoaU2cd6KO5glt9A1O3O+r51Z29hXTPPvBsXXYZqcqfbtnM6ovvGgqXGloTeTN
 dSSLq6NUW3ibL8rNkJnJGuTjUvj4yX3TFyCH9f7Wq0ltTW1vjlqUo9HQMU86HYBjRNwM
 y0eNEX3RkU9KnNk48V3b6rUcsdAmHafKg7pfUaF538gBP6t2dO3elATwO99jjza5ywFI
 UB1g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763048296; x=1763653096;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=RCjjJuiYKPmoYJJsNyKjnwLnz2/eWGhD0tjPGfoLKNo=;
 b=Vs/o4nmbX6bmKmu4bmdfifXboIzW3gHxr+0HyuF5NGZ/gmdW/tR6c8Z471zHuer2vU
 W67omNUBo1MhIwHOY3aAgTfAUEgm4KY7V+ErAIeV6T+vHPgzCj1aOytz88XIucEZsPaB
 siYnhnayOzRarbAkOC0NXk8v5UKwe8+qLX/VJCwEYXxEkwI4uD3ktBVlzXs9b9NgxI+f
 rszW2OXbpZzEeBp7mpcitfCoNopVNOaX6lMPxuJkPHdnlGAzitVDjRQ2hzriLckfcJr8
 RJR8gnoxenx+cLOFqBCUf2f3/D1kkn2bzuxCU1qVA3fSl7Co6JXm6y+2slbvP5CN/uJq
 8HMg==
X-Forwarded-Encrypted: i=1;
 AJvYcCUe7dcNkb1xjArYeq1Xmbxi08FJmS9+4o5ruKglyiaac0amPxYA0+dUcwvEfNQQcUvksMd1vA==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YxVFcszfO6JzJumwfQlKnz1HWdSK0f2ju4vmhDmRRgIP2KB/Qu+
 dgSMfROQMdM1rAk5cDC1HG+HP0BFC4CM1yrzssD/bc9CQb3+fCRaAsdwF3EFHFuU9V1UXZKYZvP
 aLJbCuaVgXyrJFMSWGHkcVvDnNES9u6A=
X-Gm-Gg: ASbGncsTL3JaQbMwH6KpNOaaIK3iF1b9hnjzhzoqCwzIRUvqFyu2PE6QGyQYwRy5vLG
 G9BioUJlvmjMcssGRe8HNqX+HE7XoNeYqUdT6I8wjw8EWk1oxOBGkDxv2Ztf1gvDoBsGOEIE2u7
 Df8SIkuzx4KcGFK4qt1rL0StLr/AqDuaa9Rf+z/Kto6hPtkuRpLb9QAgvS0CTE8IMyCq27jWVqF
 d6Md31L9UUiaSdgvGR2YTcSsCqCtjg0mUYDZrvtxxkhxq3IFKew4qKB5L4uPFfIxHTHCqM=
X-Google-Smtp-Source: AGHT+IEkjt+vv9sEHCp15EOQWLbPypGzVqKPMQRE+kWriRegY8qQbyvWUES0G3ZsGCt3iQUW8Khflytv74+dsrZ2WgI=
X-Received: by 2002:a05:6512:3191:b0:594:2d8d:96b7 with SMTP id
 2adb3069b0e04-59576e452f1mr2647889e87.55.1763048295824; Thu, 13 Nov 2025
 07:38:15 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Thu, 13 Nov 2025 07:38:15 -0800
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Thu, 13 Nov 2025 07:38:15 -0800
From: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <86jyzusdto.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 <86jyzusdto.fsf@HIDDEN>
MIME-Version: 1.0
Date: Thu, 13 Nov 2025 07:38:15 -0800
X-Gm-Features: AWmQ_bnjc3p0PbhghQN3duB-Kx__4-3J5ZFWq6NQb5gKvYMhHUHqakBNQUrDSFY
Message-ID: <CANVbq5=vfgreuEdi02_unSPxqFmNV_hqNXP1Q8vRuvN8P+Dn3w@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Nov 13 2025, Eli Zaretskii wrote:

>> From: Kristoffer Balintona <krisbalintona@HIDDEN>
>> Date: Wed, 12 Nov 2025 11:10:41 -0800
>> Cc: arstoffel@HIDDEN, yandros@HIDDEN, 79417 <at> debbugs.gnu.org,
>> 	emacs-devel@HIDDEN
>>
>> On Wed, Nov 12 2025, Eli Zaretskii wrote:
>>
>> >> Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
>> >> From: Kristoffer Balintona <krisbalintona@HIDDEN>
>> >> Date: Wed, 12 Nov 2025 10:10:11 -0800
>> >>
>> >> - Flyspell does not only offers corrections by using the mouse. The only
>> >>   way to correct words with the keyboard only is through ispell.
>> >
>> > This is inaccurate: Flyspell has "C-c $".
>>
>> I am aware of flyspell-correct-word-before-point (bound to "C-c $"), but
>> in my Emacs it opens a pop up menu that requires mouse interaction.
>
> It pops up a menu, yes.  But you can navigate that menu with keyboard
> keys (arrow keys, RET and ESC), you don't have to use the mouse, at
> least with some toolkits and on TTY frames.  So all-keyboard
> interaction is still possible with Flyspell, if someone must not use
> the mouse.

Ah, I hadn't known that you can interact with the pop up menu with the
keyboard. Thanks for informing me.

-- 
Kind regards,
Kristoffer




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 13 Nov 2025 09:52:20 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 13 04:52:20 2025
Received: from localhost ([127.0.0.1]:54297 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJU03-0005a7-Ha
	for submit <at> debbugs.gnu.org; Thu, 13 Nov 2025 04:52:19 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:41596)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vJTzx-0005Zt-Ks
 for 79417 <at> debbugs.gnu.org; Thu, 13 Nov 2025 04:52:17 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vJTzs-0003Yq-4j; Thu, 13 Nov 2025 04:52:08 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=KCnWMvlu9xRjtWY2G4v0S9Pf8+UHSNxVKPhkef49ukI=; b=HaUPCTZtxBVh
 w6he6UQLOgwMetfxsg3qhU/9o78vq83dZOumDvN0JjvG5M/bwRp9GSaX8RElKTU7w9jvsWjRutfYx
 VSdVane8KsZGK3gA0mq14wI9ygZfOqIvBFuRrRjRnLEGfTCEuGztYwKiCjlRGNwoLyTI9jdnqaJBE
 yNdTIhh+oxwkKpVEDSjrfYqsgZAK/7eLpKL2f4bXfeh+cFSjvwgKo9/HPfwX0cYpXoJUzqgGjtEkY
 a7CjseZNLMMESyrp76Mb5++KohnmmI9H5nEaXqpo+9JlyRM4YtwGlEDd4ppe/DIywVloWFkHzdgD3
 iyr1rZ5QKuHcfEZAHSI+qA==;
Date: Thu, 13 Nov 2025 11:52:03 +0200
Message-Id: <867bvus1j0.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Augusto Stoffel <arstoffel@HIDDEN>
In-Reply-To: <87zf8q71ir.fsf@HIDDEN> (message from Augusto Stoffel on Thu, 
 13 Nov 2025 09:57:48 +0100)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN> <86fraisc34.fsf@HIDDEN>
 <87ecq28i21.fsf@HIDDEN> <86bjl6s4tu.fsf@HIDDEN> <87zf8q71ir.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, krisbalintona@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Augusto Stoffel <arstoffel@HIDDEN>
> Cc: krisbalintona@HIDDEN,  yandros@HIDDEN,  79417 <at> debbugs.gnu.org,
>   emacs-devel@HIDDEN
> Date: Thu, 13 Nov 2025 09:57:48 +0100
> 
> On Thu, 13 Nov 2025 at 10:40, Eli Zaretskii <eliz@HIDDEN> wrote:
> 
> > Buffer-local values with global value different have subtle aspects
> > that even some Emacs developers trip upon.  I wouldn't want users to
> > need to deal with that.  Also, both variables are defcustom's, and
> > that doesn't handle buffer-local and global defaults too well, if at
> > all, AFAIK.
> >
> > In any case, the onus is on you to explain why it is bad to have two
> > separate variables, not why it's _possible_ to have just one.
> 
> Kristoffer said he was confused about the existence of two similarly
> named variables.  Which ones should I modify to achieve a particular
> end?  What happens if I set ispell-dictionary locally of give
> ispell-local-dictionary a default value?  Why isn't there just one
> variable like virtually every other user option?

The doc strings say:

  (defcustom ispell-local-dictionary nil
    "If non-nil, the dictionary to be used for Ispell commands in this buffer.
  The value must be a string dictionary name,
  or nil, which means use the global setting in `ispell-dictionary'.
  Dictionary names are defined in `ispell-local-dictionary-alist'
  and `ispell-dictionary-alist'.

  Setting `ispell-local-dictionary' to a value has the same effect as
  calling \\[ispell-change-dictionary] with that value.  This variable
  is automatically set when defined in the file with either
  `ispell-dictionary-keyword' or the Local Variable syntax."

  (defcustom ispell-dictionary nil
    "Default dictionary to use if `ispell-local-dictionary' is nil."

It seems to me that your questions are answered there, but maybe I'm
missing something.  We could always improve the documentation if the
above is not clear enough.

> >> If ispell-local-dictionary is removed, one would do setq-default
> >> ispell-dictionary in the init file and setq-local ispell-dictionary to
> >> switch to a different language in a specific buffer, just like any other
> >> option.
> >
> > Once again, these are defcustom's, so reasoning about them in terms of
> > setq-default etc. is not appropriate.  setq-default and setq-local
> > make sense with defvars when we discuss Lisp programs, but here we are
> > talking about user options and user customizations.  Asking users to
> > use these will probably increase the confusion, not decrease it.
> 
> Sure, the end user will use M-x customize or setopt and file/dir-local
> variables, which ultimately set default and local values respectively.
> This works just fine in my experience; if not, that would be a somewhat
> severe bug.

Doesn't calling setopt in file-local variables require to use 'eval'?
And if so, doesn't it prompt the user to confirm (because 'eval' is
not safe by default)?  By contrast, ispell-local-dictionary is
considered safe as a local variable if its value is a string.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 13 Nov 2025 08:58:00 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 13 03:58:00 2025
Received: from localhost ([127.0.0.1]:54178 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJT9T-0002zz-Rg
	for submit <at> debbugs.gnu.org; Thu, 13 Nov 2025 03:58:00 -0500
Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]:53358)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <arstoffel@HIDDEN>)
 id 1vJT9Q-0002zp-HH
 for 79417 <at> debbugs.gnu.org; Thu, 13 Nov 2025 03:57:57 -0500
Received: by mail-ej1-x62d.google.com with SMTP id
 a640c23a62f3a-b714b1290aeso74592866b.2
 for <79417 <at> debbugs.gnu.org>; Thu, 13 Nov 2025 00:57:56 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763024270; x=1763629070; darn=debbugs.gnu.org;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=rvD3i+bNPgVmS/PJVGDz8TCk3LHoSmqBos7ZD2aAraM=;
 b=UeA1wT89S0cU9UyupHfeQRGVqOXe8uS8wBU6uXbKIiXTWwNxsuiGyiiWo9DPrXwQUo
 2iTqkJGpJlNkDPZOBzVkNSJkWqbo0f7CMQ19QCc1WznTK16IMnwo27cE/VXJnuMZuhXH
 0nZ7om0ZymTw0Ed54wy9FOjXAVIOSklkirbcBTRLIPw3YdmWLriswSe+NRFdmCoDnjSf
 87RxWSmYt7RjgIVppOcc+Fnxyw1ORDDwlavHcX45Ded8NwegEiahaZz6UEh8z64WwY5b
 +rhB/U0mfyXuY7dNB4uxh3YNG6TZaT3j4Z8WDBCRY2RZz9uePV8fTeYjOY96H2F47a7u
 n4jw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763024270; x=1763629070;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=rvD3i+bNPgVmS/PJVGDz8TCk3LHoSmqBos7ZD2aAraM=;
 b=fk5RK/saJqeVxgPGTYRWt+S1hFm1LaolEPrfPSlZUfzateHnLzsZx6QMHKmgLnqojI
 0mJsajEURRjX42isiF3By2IapSji0mxa0tIhp+6t4hTtHC5hmklooui6Zp2MS28tZxuD
 9r29SIWVOA2gCrgmN45ObKiKwokTZxzGXLQek5nVaKvj0toKAGSnmrVVn9joLKOt1Swr
 tVLjjTNjNitppNGpqZsEu0ZKgmOeGsyg4QspgKkw0hDtIoSsTV2k1eKNfHUO3dU/0flB
 /iLZQmgMbIaMCiGBP6di5f8N5mrJQA3TMtn8PRf7GPOAI1+8zaxhehIBmmdpCdxPv1Tu
 fFDw==
X-Forwarded-Encrypted: i=1;
 AJvYcCWaoagA1I80Qy27dBHACaa++uQRjXRHIDBX8bSWC0q4D639X8itRZKX9LdSRGJiqiyq7poXqw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YzJP8JaARGveca/ZMYowLl8HTmrnTQjlVvYbc4Suw6AThYcm1vQ
 OUl4tXKlRDzFgHr/BBeCU/ruur8FcTXGNHztWIiWhAOUAVyN0wYaKi7P
X-Gm-Gg: ASbGncvaj7RG2XvZ2Wiq7jovo9TtyzzoGja/roxOsL8ZUbW527dP/FH3mFkgjnXUJm3
 3dPQEo8kKe911xg6MFOdr4e/SMLJgSH7fOvAdGr9DRd9P9g8iutt0rjr7Ak5QmNSKrhzjWqGBke
 Jq/KpA3qCjR7i0+AjZI8QNVzxSsWfp9kF9yxWt59Epl/XFXIzBW+gHrDLGUL0muDH14lcTMWp1t
 z2ZaLsZYx9Bg5yRiFdIJIGfuhbcTPqMofjdXq/OtGU0338C4yAWtlbNew/5olmH86XHkgxBSMUt
 X1aMFyFnItir4XcjU20vL+OvdSnx6VMzxk3MYc69DzeSzPXZMoDqYOE2vdDnGMOK5goUO7TqJaQ
 ythg598qqyH5EedSqY46hOd+A+NDZVLna2Ec+1tjFvv4cooBhbori
X-Google-Smtp-Source: AGHT+IG7uwbviwRyD+dtbpsYt3W37k2HymNEY1InK50KgNyGffjmRLmt4OvjPhVJbc2xlwaQ4MVqDg==
X-Received: by 2002:a17:906:6a1b:b0:b70:df0d:e2e9 with SMTP id
 a640c23a62f3a-b7331aa2724mr585295966b.44.1763024269875; 
 Thu, 13 Nov 2025 00:57:49 -0800 (PST)
Received: from ars3 ([2a02:8109:8a95:9a00::31fb])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-b734fd80a20sm117079066b.46.2025.11.13.00.57.49
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 13 Nov 2025 00:57:49 -0800 (PST)
From: Augusto Stoffel <arstoffel@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <86bjl6s4tu.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN> <86fraisc34.fsf@HIDDEN>
 <87ecq28i21.fsf@HIDDEN> <86bjl6s4tu.fsf@HIDDEN>
Date: Thu, 13 Nov 2025 09:57:48 +0100
Message-ID: <87zf8q71ir.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, krisbalintona@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, 13 Nov 2025 at 10:40, Eli Zaretskii <eliz@HIDDEN> wrote:

>> From: Augusto Stoffel <arstoffel@HIDDEN>
>> Cc: krisbalintona@HIDDEN,  yandros@HIDDEN,  79417 <at> debbugs.gnu.org,
>>   emacs-devel@HIDDEN
>> Date: Thu, 13 Nov 2025 09:15:18 +0100
>> 
>> On Thu, 13 Nov 2025 at 08:03, Eli Zaretskii <eliz@HIDDEN> wrote:
>> 
>> >> From: Augusto Stoffel <arstoffel@HIDDEN>
>> >> Cc: chad <yandros@HIDDEN>,  79417 <at> debbugs.gnu.org,  emacs-devel@HIDDEN
>> >> Date: Wed, 12 Nov 2025 20:08:19 +0100
>> >> 
>> >> On Wed, 12 Nov 2025 at 10:10, Kristoffer Balintona <krisbalintona@HIDDEN> wrote:
>> >> 
>> >> > - The various *-dictionary user options in ispell confuse users: which
>> >> >   ones should they modify to achieve a particular end?
>> >> 
>> >> Right, the first step to fix this could be to obsolete
>> >> ispell-local-dictionary.  This is unnecessary as ispell-dictionary can
>> >> be set buffer-locally to the same effect.
>> >
>> > IMO, this would be a step in the wrong direction.  The current code
>> > deliberately allows flexibility: ispell-local-dictionary with
>> > ispell-dictionary as fallback.
>> 
>> In Emacs variables already have an optional buffer-local value with a
>> global fallback value.  I don't understand why you think the spelling
>> language is special in any way.
>
> Buffer-local values with global value different have subtle aspects
> that even some Emacs developers trip upon.  I wouldn't want users to
> need to deal with that.  Also, both variables are defcustom's, and
> that doesn't handle buffer-local and global defaults too well, if at
> all, AFAIK.
>
> In any case, the onus is on you to explain why it is bad to have two
> separate variables, not why it's _possible_ to have just one.

Kristoffer said he was confused about the existence of two similarly
named variables.  Which ones should I modify to achieve a particular
end?  What happens if I set ispell-dictionary locally of give
ispell-local-dictionary a default value?  Why isn't there just one
variable like virtually every other user option?

I also asked myself the same questions at some point.  Perhaps most
people who try to understand the details here do.

>> >  So one could have ispell-dictionary set to the main dictionary the
>> > user wants to use, for whatever language is the main for the user,
>> > with ispell-local-dictionary specific to some file (e.g., as
>> > file-local variable).  If ispell-local-dictionary is removed, users
>> > will need to manually call ispell-change-dictionary each time they
>> > switch to editing a buffer which needs to use a different dictionary
>> > (e.g., due to language change, or because that buffer's text uses some
>> > specialized terminology that requires a special dictionary).
>> 
>> If ispell-local-dictionary is removed, one would do setq-default
>> ispell-dictionary in the init file and setq-local ispell-dictionary to
>> switch to a different language in a specific buffer, just like any other
>> option.
>
> Once again, these are defcustom's, so reasoning about them in terms of
> setq-default etc. is not appropriate.  setq-default and setq-local
> make sense with defvars when we discuss Lisp programs, but here we are
> talking about user options and user customizations.  Asking users to
> use these will probably increase the confusion, not decrease it.

Sure, the end user will use M-x customize or setopt and file/dir-local
variables, which ultimately set default and local values respectively.
This works just fine in my experience; if not, that would be a somewhat
severe bug.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 13 Nov 2025 08:41:14 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 13 03:41:14 2025
Received: from localhost ([127.0.0.1]:54117 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJStG-0002OP-2z
	for submit <at> debbugs.gnu.org; Thu, 13 Nov 2025 03:41:14 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:37478)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vJStC-0002OH-UG
 for 79417 <at> debbugs.gnu.org; Thu, 13 Nov 2025 03:41:11 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vJSt6-0006Gy-EA; Thu, 13 Nov 2025 03:41:05 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=A6+TWsHlyTTGTR/KvQ3AKPRucPhwuNu3smISA769ORM=; b=q1gUpZG/vwC6
 tOEwtyBSIZk2FDE3pOoLdfm59ziduWOg+vHnegxSQ7dOtRNZMwvouDiUySoyE7tteX03chWsMiXlh
 99PYdbUKdLsw1UmyAr2TuTGXmBEPCoXhYTnNX4G7DMhu0pAcQtJr92VxvLSzPr4DWkm4nCnaPxVVL
 XheztGIZuiQtxyfBcqt7tm6OChJXQPY0KpvtsHH6cX7ojda72ZXBAU7++uspz+O9xonrZp4zapFMR
 6tMCyoqrel0Rmx+6OrfrtnZV+9epwVf6jn7clU1v+/knHY4RgXJdiVw1gtU0qLAS7HtISrAXupXCq
 CDpyuAme3K6k9pajkjINhQ==;
Date: Thu, 13 Nov 2025 10:40:45 +0200
Message-Id: <86bjl6s4tu.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Augusto Stoffel <arstoffel@HIDDEN>
In-Reply-To: <87ecq28i21.fsf@HIDDEN> (message from Augusto Stoffel on Thu, 
 13 Nov 2025 09:15:18 +0100)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN> <86fraisc34.fsf@HIDDEN> <87ecq28i21.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, krisbalintona@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Augusto Stoffel <arstoffel@HIDDEN>
> Cc: krisbalintona@HIDDEN,  yandros@HIDDEN,  79417 <at> debbugs.gnu.org,
>   emacs-devel@HIDDEN
> Date: Thu, 13 Nov 2025 09:15:18 +0100
> 
> On Thu, 13 Nov 2025 at 08:03, Eli Zaretskii <eliz@HIDDEN> wrote:
> 
> >> From: Augusto Stoffel <arstoffel@HIDDEN>
> >> Cc: chad <yandros@HIDDEN>,  79417 <at> debbugs.gnu.org,  emacs-devel@HIDDEN
> >> Date: Wed, 12 Nov 2025 20:08:19 +0100
> >> 
> >> On Wed, 12 Nov 2025 at 10:10, Kristoffer Balintona <krisbalintona@HIDDEN> wrote:
> >> 
> >> > - The various *-dictionary user options in ispell confuse users: which
> >> >   ones should they modify to achieve a particular end?
> >> 
> >> Right, the first step to fix this could be to obsolete
> >> ispell-local-dictionary.  This is unnecessary as ispell-dictionary can
> >> be set buffer-locally to the same effect.
> >
> > IMO, this would be a step in the wrong direction.  The current code
> > deliberately allows flexibility: ispell-local-dictionary with
> > ispell-dictionary as fallback.
> 
> In Emacs variables already have an optional buffer-local value with a
> global fallback value.  I don't understand why you think the spelling
> language is special in any way.

Buffer-local values with global value different have subtle aspects
that even some Emacs developers trip upon.  I wouldn't want users to
need to deal with that.  Also, both variables are defcustom's, and
that doesn't handle buffer-local and global defaults too well, if at
all, AFAIK.

In any case, the onus is on you to explain why it is bad to have two
separate variables, not why it's _possible_ to have just one.

> >  So one could have ispell-dictionary set to the main dictionary the
> > user wants to use, for whatever language is the main for the user,
> > with ispell-local-dictionary specific to some file (e.g., as
> > file-local variable).  If ispell-local-dictionary is removed, users
> > will need to manually call ispell-change-dictionary each time they
> > switch to editing a buffer which needs to use a different dictionary
> > (e.g., due to language change, or because that buffer's text uses some
> > specialized terminology that requires a special dictionary).
> 
> If ispell-local-dictionary is removed, one would do setq-default
> ispell-dictionary in the init file and setq-local ispell-dictionary to
> switch to a different language in a specific buffer, just like any other
> option.

Once again, these are defcustom's, so reasoning about them in terms of
setq-default etc. is not appropriate.  setq-default and setq-local
make sense with defvars when we discuss Lisp programs, but here we are
talking about user options and user customizations.  Asking users to
use these will probably increase the confusion, not decrease it.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 13 Nov 2025 08:15:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 13 03:15:28 2025
Received: from localhost ([127.0.0.1]:54063 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJSUK-0001D2-6R
	for submit <at> debbugs.gnu.org; Thu, 13 Nov 2025 03:15:28 -0500
Received: from mail-ed1-x532.google.com ([2a00:1450:4864:20::532]:51586)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <arstoffel@HIDDEN>)
 id 1vJSUH-0001Ci-MK
 for 79417 <at> debbugs.gnu.org; Thu, 13 Nov 2025 03:15:26 -0500
Received: by mail-ed1-x532.google.com with SMTP id
 4fb4d7f45d1cf-6406f3dcc66so866014a12.3
 for <79417 <at> debbugs.gnu.org>; Thu, 13 Nov 2025 00:15:25 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763021719; x=1763626519; darn=debbugs.gnu.org;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=kBSGvOE3utRAHCwShJlurNSqqpmKFsEDNUOWCOrYho0=;
 b=JET93aQQ5GGxYWW8S+p/0Fm/Urt3SK0uZSOswMoSzcb7gBY9FwKDfiwaskwWvbB/lH
 1PPGKJB9w0O86pQcPO98u5B777edCsPOb/3HfYKiljVBdVLigSr3xfk5DcAO7XnkgROu
 cK2bM4Jehgrrb74e1o4bZMdqG2J2zQpLpwWuMH1WIVBHQyos9sJDI3E1i1zSx9GN4i9g
 2hpAzb1eRkvuT4NMuOg0YR7w13DKAI/qwCcGYsCVj1e9TJBU69FgT0mij43qgPqv74JT
 d6XlyhnKDJseRRea1zTDGZDlb9AUomy8Kh9t7NF2UUxypwigL1SfjYW/h3TnrIXVBL+S
 2k2Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763021719; x=1763626519;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=kBSGvOE3utRAHCwShJlurNSqqpmKFsEDNUOWCOrYho0=;
 b=s/pBpSEar3mIHMjGy85ta3sDXaQ4Vf0Bh0XDkH8mAo9P64/J31UqrDjIWz75+Y2fv/
 lhQXkl738L5iyZMhjHJzWw0lacj+yOLY0mN02xLTDpxOGswq3B+sC+yexMtorOwgHHWc
 hCAN1iipRs39nF3fsx21YALuAlCbJlN9TDr9DRWCUgQVxyX0AzkeEwjLllxEdtz1RPda
 9kY5zdz4diFd7KHy7mTKkiQmSWU6k6kEvKP6kL+DvzKShHVLwxWUbpXvZoMzLxTOnmyk
 3TL5mrsXCLbvvmv/M0OoK6ceUUwe4Ykg4Dpa0xzl4WJB6vIvO0+JL4bd9anv9qRBqzmh
 8Vag==
X-Forwarded-Encrypted: i=1;
 AJvYcCWiSwVGC2XIZJdWaqucAljX2mCiCnwm/9a+qz3AykySBIolteScBRMAq6l2Jt/JQvnOiVxSGQ==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yx8jgmIPVay4uSO+IHSsMrKLZqUTILTjCN6WW8OlTJ2+taCwQre
 gY7yw3U0uCcfgs8gGEgenxvmmENYzY4u/WDkqAj6PGK7aA7uvIH4n/5S
X-Gm-Gg: ASbGncth5d+hwp7rKE6MdxgR3Oa+CVmyqitSqax7zzygH93UpP/7pC9v9oUqOpkhRqV
 2K3VswkWXe8XLP2CsCb4w8iiGd9KEO+ows4dNdQV7YPJj98aZxcxU4ijvnSGJAYoViWq610fkcT
 DMrQC0OoVmO/MVeih1/QYD0JIKSJmaREfTaj9NiRLYXz2ITZraDsOyn7O3eb9TLFkk03zXrRtj6
 7JSSZJZbh1zv3d0cSrK4IS6VzcUl+jXmMDpoCnzQCwnUgzYKngs28kDF+sLM/w/jfNCT3mkocjx
 YtLpYIHJlfqA7vz+9WLUECd7UzAR36Ny7bXENVGCXvlNqxVbDp5ZgC69aEjHU6KocoPfNZtu3Lx
 1wg/1j0hjIXZmtipmui1oc75gigr4WSPpu6ZU63dlgTEXIzpb3xHz
X-Google-Smtp-Source: AGHT+IEFuwmjx4ZctOWpg6NVpnic6UHMhMUENqygLP0tNpe87Igs7H2duktvNOC4rXDeSceuItYPtw==
X-Received: by 2002:a17:907:da6:b0:b4b:4f7:7a51 with SMTP id
 a640c23a62f3a-b7331b3bcb6mr703171166b.62.1763021719335; 
 Thu, 13 Nov 2025 00:15:19 -0800 (PST)
Received: from ars3 ([2a02:8109:8a95:9a00::31fb])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-b734fd80a20sm110188166b.46.2025.11.13.00.15.18
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 13 Nov 2025 00:15:18 -0800 (PST)
From: Augusto Stoffel <arstoffel@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <86fraisc34.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN> <86fraisc34.fsf@HIDDEN>
Date: Thu, 13 Nov 2025 09:15:18 +0100
Message-ID: <87ecq28i21.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, krisbalintona@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, 13 Nov 2025 at 08:03, Eli Zaretskii <eliz@HIDDEN> wrote:

>> From: Augusto Stoffel <arstoffel@HIDDEN>
>> Cc: chad <yandros@HIDDEN>,  79417 <at> debbugs.gnu.org,  emacs-devel@HIDDEN
>> Date: Wed, 12 Nov 2025 20:08:19 +0100
>> 
>> On Wed, 12 Nov 2025 at 10:10, Kristoffer Balintona <krisbalintona@HIDDEN> wrote:
>> 
>> > - The various *-dictionary user options in ispell confuse users: which
>> >   ones should they modify to achieve a particular end?
>> 
>> Right, the first step to fix this could be to obsolete
>> ispell-local-dictionary.  This is unnecessary as ispell-dictionary can
>> be set buffer-locally to the same effect.
>
> IMO, this would be a step in the wrong direction.  The current code
> deliberately allows flexibility: ispell-local-dictionary with
> ispell-dictionary as fallback.

In Emacs variables already have an optional buffer-local value with a
global fallback value.  I don't understand why you think the spelling
language is special in any way.

>  So one could have ispell-dictionary set to the main dictionary the
> user wants to use, for whatever language is the main for the user,
> with ispell-local-dictionary specific to some file (e.g., as
> file-local variable).  If ispell-local-dictionary is removed, users
> will need to manually call ispell-change-dictionary each time they
> switch to editing a buffer which needs to use a different dictionary
> (e.g., due to language change, or because that buffer's text uses some
> specialized terminology that requires a special dictionary).

If ispell-local-dictionary is removed, one would do setq-default
ispell-dictionary in the init file and setq-local ispell-dictionary to
switch to a different language in a specific buffer, just like any other
option.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 13 Nov 2025 06:55:25 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 13 01:55:25 2025
Received: from localhost ([127.0.0.1]:53878 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJREr-0006Ha-22
	for submit <at> debbugs.gnu.org; Thu, 13 Nov 2025 01:55:25 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:48374)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vJREn-0006EU-4R
 for 79417 <at> debbugs.gnu.org; Thu, 13 Nov 2025 01:55:23 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vJREh-0004qQ-NT; Thu, 13 Nov 2025 01:55:15 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=6Bu8Bi81hbvCurzPPKuV+w67Y1uCqLjew08wBVlBqwk=; b=rl3QqidwZpU4
 E3Hrg6aKT50dtiAiY8vQTePgouieTSpJl22fJWvVvyLgPOsw+kehVBAEhwSg31nSvR7UN2XwAc12z
 yBXhjLwhCIKIT0d3pvvhGVE/sIq57HucGPL+ULPsMukJHg20n9f7a00P2RABikHCghs8i2iEKGCVn
 F4RvGac4PlAkCPMiQ4Udsg0kZXfmM0YyxYAF/+ntH0E/my6abzg9PlOzFZybcDwRR48eeqg2pyZJD
 zAGJhXfnHi9HvQQDFwyyKXT+nICE4rYpj98JA3uAbIcdSISXiXDEZmr4wlNKVocxSUf9+GTv5vswv
 9mISMpRFd+3s7GegpWl9uw==;
Date: Thu, 13 Nov 2025 08:55:13 +0200
Message-Id: <86ecq2s9pq.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <CANVbq5mRnXrO++PCkXube-8uwuVVb_CKYBYC8N=2DC-xK_rzfA@HIDDEN>
 (message from Kristoffer Balintona on Wed, 12 Nov 2025 12:25:32 -0800)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN>
 <CANVbq5mRnXrO++PCkXube-8uwuVVb_CKYBYC8N=2DC-xK_rzfA@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
> From: Kristoffer Balintona <krisbalintona@HIDDEN>
> Date: Wed, 12 Nov 2025 12:25:32 -0800
> 
> > Right, the first step to fix this could be to obsolete
> > ispell-local-dictionary.  This is unnecessary as ispell-dictionary can
> > be set buffer-locally to the same effect.
> 
> For me, part of why the various *-dictionary options were confusing was
> precisely because it wasn't clear why ispell-dictionary wasn't just a
> buffer-locally set variable. I had assumed that there was a technical
> reasoning to have separate options that I was missing.

The reason is simple: when one starts editing a new buffer where
spell-checking is needed, we don't want the user to set the dictionary
(which in almost all the cases will be the same dictionary: the one
used for the main/only language the user writes in).  This means the
default should be global, not buffer-local.  A buffer-local variable
then allows to tailor specific buffers where the default dictionary is
not TRT.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 13 Nov 2025 06:04:11 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 13 01:04:11 2025
Received: from localhost ([127.0.0.1]:53775 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJQRH-0003ma-6o
	for submit <at> debbugs.gnu.org; Thu, 13 Nov 2025 01:04:11 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:43826)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vJQRE-0003mM-67
 for 79417 <at> debbugs.gnu.org; Thu, 13 Nov 2025 01:04:08 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vJQR8-0005jS-Pu; Thu, 13 Nov 2025 01:04:02 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=NeCkdriTWM2Spb3yi5623X+fqJOZllwlebrnm0cEQak=; b=q/hzcC7avd47
 i8SHZTp8dsSk0SOiv/OVqqZApgD/ipNzVgvAangpV0irmIopMeS6xW4vY4J73S3iJxXRiactOT4Ln
 qxxlsEFKQ+omdr6cUGP/X7jNuD5nbDXjBl3LQl7B2X8zb+FyN1YT6YhbOUYuH9LCAc2kJR3igpv6f
 /i6w4dr5yZrFb4Av1hKI3fITk8GHEhZeMCQRjZ5i6MjuSkQLZJjy23UldmRZUBhmB8H3CODEb4qmH
 UEKen+kAqs+aaFx2Bbgi0J0z7OarcPo2J4HHxYV4PaaoWtxjTIEMBfhkMSKLJ+4KZADZP2Aa9UIEc
 3SnLbTEjt1tPWx9EppV1dA==;
Date: Thu, 13 Nov 2025 08:03:59 +0200
Message-Id: <86fraisc34.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Augusto Stoffel <arstoffel@HIDDEN>
In-Reply-To: <87ikff83x8.fsf@HIDDEN> (message from Augusto Stoffel on Wed, 
 12 Nov 2025 20:08:19 +0100)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, krisbalintona@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Augusto Stoffel <arstoffel@HIDDEN>
> Cc: chad <yandros@HIDDEN>,  79417 <at> debbugs.gnu.org,  emacs-devel@HIDDEN
> Date: Wed, 12 Nov 2025 20:08:19 +0100
> 
> On Wed, 12 Nov 2025 at 10:10, Kristoffer Balintona <krisbalintona@HIDDEN> wrote:
> 
> > - The various *-dictionary user options in ispell confuse users: which
> >   ones should they modify to achieve a particular end?
> 
> Right, the first step to fix this could be to obsolete
> ispell-local-dictionary.  This is unnecessary as ispell-dictionary can
> be set buffer-locally to the same effect.

IMO, this would be a step in the wrong direction.  The current code
deliberately allows flexibility: ispell-local-dictionary with
ispell-dictionary as fallback.  So one could have ispell-dictionary
set to the main dictionary the user wants to use, for whatever
language is the main for the user, with ispell-local-dictionary
specific to some file (e.g., as file-local variable).  If
ispell-local-dictionary is removed, users will need to manually call
ispell-change-dictionary each time they switch to editing a buffer
which needs to use a different dictionary (e.g., due to language
change, or because that buffer's text uses some specialized
terminology that requires a special dictionary).

> > - When flyspell-mode is enabled (underlining misspellings), when adding
> >   a word to the personal dictionary with either flyspell or ispell, the
> >   current misspelled word is no longer a misspelling but later
> >   repetitions of this word (just added to the personal dictionary) are
> >   still underlined but not recognized as misspellings (when you call
> >   ispell-word it reports that the word is correct). One has to call
> >   flyspell-buffer to remove these false underlines.
> > - At least in org-mode buffers[3], the words that flyspell and ispell
> >   recognize as misspellings can differ because ispell ignores words
> >   according to ispell-skip-region-alist whereas flyspell offers
> >   flyspell-generic-check-word-predicate.
> 
> This is a problem indeed.

Patches are welcome to extend flyspell-do-correct so it removes the
highlighting from all the occurrences of the saved word, at least as a
user option.

> > - At least in org-mode buffers, flyspell sometimes highlights words in
> >   comments as misspellings when calling flyspell-correct-word has no
> >   effect (because it is not a misspelling?).

I'd love to see bug reports with examples of this.  I don't think I've
ever seen this kind of problems, and I use Flyspell all the time.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 13 Nov 2025 05:26:38 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Nov 13 00:26:38 2025
Received: from localhost ([127.0.0.1]:53695 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJPqw-00027I-3I
	for submit <at> debbugs.gnu.org; Thu, 13 Nov 2025 00:26:38 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:50712)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vJPqt-000277-QU
 for 79417 <at> debbugs.gnu.org; Thu, 13 Nov 2025 00:26:36 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vJPqo-0002o0-GE; Thu, 13 Nov 2025 00:26:30 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=oZCruFETVOW6iv5NZjPiMZcrQkXHhkpg6d1X26A88Qc=; b=EX2yFZwd7sUV
 ijhZWT3lvO+SJ6AcIS/JZTWlRxOvCPiUBoTlGiOW65sFKrpCpdanmgdrUhE1oQg5AjDaXTh2g/K4s
 NrAXo/jBu0J9VypDOyvGqeZndI5Ksq9gF4hHU403Rt0wfmPuWx6GggBCjt5ycLbrnzxWKM2Te65bo
 T1RjXF5Z0vcckLj72qzeRqwr0LHNRKwmARTpQYxxndys2ZpL7bIK0gvfsvuJQX0rORSr4Q6Nzvwk2
 mol2x8aBALtm49JFOP/WK63lXgpAuSsM7nvKX6G+s+6RrNq3Yb0UeE4QeiAAGagV+yk+yH3aEPcgb
 MjV0NQU1O6S2RJ96fxYIfA==;
Date: Thu, 13 Nov 2025 07:26:27 +0200
Message-Id: <86jyzusdto.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
 (message from Kristoffer Balintona on Wed, 12 Nov 2025 11:10:41 -0800)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
 <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Kristoffer Balintona <krisbalintona@HIDDEN>
> Date: Wed, 12 Nov 2025 11:10:41 -0800
> Cc: arstoffel@HIDDEN, yandros@HIDDEN, 79417 <at> debbugs.gnu.org, 
> 	emacs-devel@HIDDEN
> 
> On Wed, Nov 12 2025, Eli Zaretskii wrote:
> 
> >> Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
> >> From: Kristoffer Balintona <krisbalintona@HIDDEN>
> >> Date: Wed, 12 Nov 2025 10:10:11 -0800
> >>
> >> - Flyspell does not only offers corrections by using the mouse. The only
> >>   way to correct words with the keyboard only is through ispell.
> >
> > This is inaccurate: Flyspell has "C-c $".
> 
> I am aware of flyspell-correct-word-before-point (bound to "C-c $"), but
> in my Emacs it opens a pop up menu that requires mouse interaction.

It pops up a menu, yes.  But you can navigate that menu with keyboard
keys (arrow keys, RET and ESC), you don't have to use the mouse, at
least with some toolkits and on TTY frames.  So all-keyboard
interaction is still possible with Flyspell, if someone must not use
the mouse.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 13 Nov 2025 00:00:24 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 12 19:00:24 2025
Received: from localhost ([127.0.0.1]:52403 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJKlD-0000o9-Pw
	for submit <at> debbugs.gnu.org; Wed, 12 Nov 2025 19:00:24 -0500
Received: from mail-lf1-x136.google.com ([2a00:1450:4864:20::136]:59645)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <krisbalintona@HIDDEN>)
 id 1vJKlB-0000ma-4N
 for 79417 <at> debbugs.gnu.org; Wed, 12 Nov 2025 19:00:22 -0500
Received: by mail-lf1-x136.google.com with SMTP id
 2adb3069b0e04-59457f79859so208522e87.2
 for <79417 <at> debbugs.gnu.org>; Wed, 12 Nov 2025 16:00:21 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1762992014; x=1763596814; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=vbC9pVFCdqLFH0kGJ0MPjj1fjjx2LbOhLoHD0LEiACc=;
 b=bfgUc1DjjjBC9EA+Gdk5UCX6m9oGSG3nbsQElWyz1vYgykRT4uVRAaRy8rEHPJHtTD
 QMLhq9FhXri+inPIEQ+51qCgmU7ZoEg5zzOGr9SV3RfHCb4ajz+tPTSC5zRaNp7/sTtR
 k+YBo1kvdrEH/ekE/5KJLJ7hmwLQ/EzAy7aTYbnIGf1iOs8rZpivGP6eaLdYDXMtb3eM
 5I0t10FV1QhNoWs1oaOoD4xosjT0VtYsBxyBSs1dh1l3ZzSfDyoDAzd0Bz5d/mE80Rge
 1SFZHcXwaWaDqLtvpO2OqukhDPe3WrJhsH+vEFJn8m3tpdnXZR9rZf59JrgfrNzPszcw
 O4oQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1762992014; x=1763596814;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=vbC9pVFCdqLFH0kGJ0MPjj1fjjx2LbOhLoHD0LEiACc=;
 b=X4IG7DKLgVoMaJ2V63Ot+33qUWY5x41Tz9sOGSujHut9ZeCpYtJuwzYTSaYaEAJnGF
 XM2pa/M+QFM/bMWLZHuUez8mSN16YcbJEZmm5K5n0cGxdKFFLHDS4mVeCuvWW1Ra8PMt
 STeo0hYsOchu1gp187f1maq3BuHc+vzPMKnEkEKFnpY88NSreO9yxL1Q4/wrbZPfLBOJ
 cQd1027AklewRzFuKKUER6EmVfVSzTEpmzBh26fUdeG1oApy8zeEUCmqznZ1YK80wOiD
 D2j8CVjs/BT5CvEsLOcPs3CJ2AAwJxXSJKfCZaSRrBc+TqBLghJ2WDGFOWPy3GIx9YmD
 0E+w==
X-Forwarded-Encrypted: i=1;
 AJvYcCXfJ9jq9J57IQljM3tBeIR0Ga8OZOujg3wQa7FZcWz5CJVKiujRLqEUKsDcUE7oq9s8qXpbwQ==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yxfbw4w6IqNbKhzyy363sN45vRcQKE+swOQpC/dCfVk4XeAMhms
 xa0oggN2jqAvgMhLlV2787D9kuwsTsfjgPiUhQ/6AZKncqFTS45WcDHDsPHbiP3+u+zj7Z6WX98
 Qe3blVfjVpzEdqeih/fa3fLaEXM1O4mY=
X-Gm-Gg: ASbGncuf9Gqtzguk0+Ldq02SbH8ZxiKDff3ul1QkG61t1FnFpGAh2yHCDYJLULr8GNY
 KSy9pJB21twvKK2KoDVITPvr62jjbOsBm89lrposToGLoKXl/3prlBRdCAJoEHRHARo+bwuwSI2
 r5uWJ3rXaylXNcTxSfTTG8fJYYzYt1Ft6AQc7fTHIuFCmWcel3rM1TJpoCtVzrJEbZyQZPGgOPc
 d7IDUk7NQ6zGD/o2MpXxFEkZT6KMT1C1te0EyUhFq7cArvoYw9rSfmnKankPWBL9wXU8vY=
X-Google-Smtp-Source: AGHT+IFj9AhkxJqnaAoerAasSuHFY12QdAbOBI7hGqRlDNAyXoEbCVy+t8BN/SWZfY6XXA9cn1m3xOmJmOgHZ1Cu3KQ=
X-Received: by 2002:a05:6512:3e07:b0:594:4a5a:34f with SMTP id
 2adb3069b0e04-59576df8ad8mr1495277e87.18.1762992013985; Wed, 12 Nov 2025
 16:00:13 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 12 Nov 2025 16:00:11 -0800
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 12 Nov 2025 16:00:11 -0800
From: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <86346idev1.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86346idev1.fsf@HIDDEN>
MIME-Version: 1.0
Date: Wed, 12 Nov 2025 16:00:11 -0800
X-Gm-Features: AWmQ_blYI-VNoM2TcWhtHmuRmqb8sBO_IkbZynNBSVj5r-tUEc3qgpLzaxZgxRY
Message-ID: <CANVbq5nQNcqojq9RW+amwT0eehPJ5r_VcLGDrOfrJurejUh6Zg@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
To: Joost Kremers <joostkremers@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org,
 Augusto Stoffel <arstoffel@HIDDEN>, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Nov 13 2025, Joost Kremers wrote:

> On Wed, Nov 12 2025, Kristoffer Balintona wrote:
>> To give you a sense of what I have in mind, I've listed below specific
>> gripes (IMO) and bugs I noticed in ispell + flyspell after having
>> returned to them in these last few days:[1]
>> - As a user, it wasn't clear to me whether to use ispell-word or
>>   flyspell-auto-correct-word. Should I use one in certain cases and the
>>   other in other cases? Is their purpose entirely the same? If so, why
>>   do these two commands defined in different packages, then?
>
> The two commands do slightly different things, and they have different UIs,
> so I guess which one to use depends on personal preference and the situation
> at hand.

That might be the case, yes. But I think main takeaway from my remark
was that there is a confusion in usage (and demarcation of the ispell
and flyspell packages), even after becoming acquainted with both ispell
and flyspell.

> Though I have to say, I've never actually used
> `flyspell-auto-correct-word`. What I do use, a lot in fact, is
> `flyspell-auto-correct-previous-word`.

Did you mean flyspell-correct-word (pop up menu) and
flyspell-auto-correct-previous-word (cycle through suggestions)?

> To me, that is Flyspell's killer feature, the one that I wouldn't want
> to be without. In fact, when jinx first came out, I tried it and liked
> it, it's definitely an improvement over ispell+flyspell in many
> respects. But I went back to ispell+flyspell nonetheless, despite the
> quirks, because jinx lacked a similar feature and Daniel Mendler
> decided against implementing it.

Yes, that feature is quite neat (which is another reason why I think
it's worth investing time to upgrading our built-in ispell/flyspell).
Its convenience reminds me of the convenience dabbrev-expand can bring.

-- 
Kind regards,
Kristoffer




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 12 Nov 2025 23:20:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 12 18:20:04 2025
Received: from localhost ([127.0.0.1]:52181 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJK8B-0007AF-MY
	for submit <at> debbugs.gnu.org; Wed, 12 Nov 2025 18:20:04 -0500
Received: from fout-a7-smtp.messagingengine.com ([103.168.172.150]:51123)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <joostkremers@HIDDEN>)
 id 1vJK85-00079c-Uh
 for 79417 <at> debbugs.gnu.org; Wed, 12 Nov 2025 18:20:01 -0500
Received: from phl-compute-12.internal (phl-compute-12.internal [10.202.2.52])
 by mailfout.phl.internal (Postfix) with ESMTP id C079BEC028E;
 Wed, 12 Nov 2025 18:19:52 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-12.internal (MEProxy); Wed, 12 Nov 2025 18:19:52 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.fm; h=
 cc:cc:content-type:content-type:date:date:from:from:in-reply-to
 :in-reply-to:message-id:mime-version:references:reply-to:subject
 :subject:to:to; s=fm3; t=1762989592; x=1763075992; bh=XEwuArf6mg
 8t/KHXxIkZ60Pu2Diyb7QNi32NYHCTX+4=; b=On0ErCu9iMyO1zrpe+yQSRCpch
 Auv7/Puz7fDpkK2E+MRFitXLJAeHkUXrIk6Xebd5RcF/50UZRP5d8Gn3qwSivgaX
 Ztpt9LOekoCnix8w4kd7/7H9k2cuuaFcMFvqWwW6DgO8CEbx3SD03aEyvQGf42BM
 8o1GhmYgTJmxg1JDXJQN3CbYcxaotABacoW0W0IDRSve+B9uyB9ebR/jZhQvyAsr
 MYOMGEOwVYdnEoAXy3/gi1kHwoROpPFpbIjew1Ais29BZ+f5rlaoSq1jnVY5uc9k
 Ou/ajJiOUIGeX2O55e/7A6fwYVRsDdqsoRYdLJOzRlfMy1rkwxrKbuT7s73g==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-type:content-type:date:date
 :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to
 :message-id:mime-version:references:reply-to:subject:subject:to
 :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=
 1762989592; x=1763075992; bh=XEwuArf6mg8t/KHXxIkZ60Pu2Diyb7QNi32
 NYHCTX+4=; b=dIdwtJ4ZEAl4l1oSzd2zCbLdQZMZnzW5U3Nnng2hzAWebg2eIuf
 AOc+loxzfQLGLrDl6tVUHJRDbGCLYFwKR8dPXnJTIQx/XIbbKlA+iUpFYr0bD2rX
 rQC947QjMauQXw+gUBho6LopjgBcMM0vGLR+HGz4nETBWRJqH/40XX18uNy7VoGe
 mJRH02qlHri/CQAynrzCuX01qwQkEq6uF0m6wDAiP05itRfcVQz/pFsC1YaHhrju
 XPxeP7BSfGEtYhCF3khVCKobihuyxVq0IN5NEm9ivJomnfwK1ow5QlxFcw2E9Tih
 YWNxJFerj5VNTnPCMeYgqI4DG7xM7smnekQ==
X-ME-Sender: <xms:GBYVaZdvdGSbhRpieBnHLEEWoXgxvUBmftv3PEsSPmBek2Z1KUk0Cg>
 <xme:GBYVaeETNk6J4kokSIeV3kuoEPyUUCWcfw1NclcPW8itn4SdPQs69a_Ni5aPoyswJ
 heqYiIFpac7Vwjbs3ZS8Kt1abE_2Y8h14SoV2HyePKStLzvwQ>
X-ME-Received: <xmr:GBYVaa0vYfdwX-FGBcADot1rbTZNHl-qZ3AsEDKVpc88CO-ieiRqOLCNDH1-uvBueZEFSZU>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvtdehfeejucetufdoteggodetrf
 dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu
 rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujf
 gurhephffvvefujghffgffkfggtgesthdtredttdertdenucfhrhhomheplfhoohhsthcu
 mfhrvghmvghrshcuoehjohhoshhtkhhrvghmvghrshesfhgrshhtmhgrihhlrdhfmheqne
 cuggftrfgrthhtvghrnhepfffhleffgfelkedtfeejleegffekteehlefffeffheetkeei
 tdekjeffudeuleejnecuffhomhgrihhnpehgihhthhhusgdrtghomhdpmhgvlhhprgdroh
 hrghenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehj
 ohhoshhtkhhrvghmvghrshesfhgrshhtmhgrihhlrdhfmhdpnhgspghrtghpthhtohephe
 dpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepvghmrggtshdquggvvhgvlhesghhn
 uhdrohhrghdprhgtphhtthhopeejleegudejseguvggssghughhsrdhgnhhurdhorhhgpd
 hrtghpthhtohephigrnhgurhhoshesghhmrghilhdrtghomhdprhgtphhtthhopehkrhhi
 shgsrghlihhnthhonhgrsehgmhgrihhlrdgtohhmpdhrtghpthhtoheprghrshhtohhffh
 gvlhesghhmrghilhdrtghomh
X-ME-Proxy: <xmx:GBYVaenkUyS4DQpCKt9VW79v6RzAqQb1z63rd4XhWeqN7gWPy7QpQg>
 <xmx:GBYVaS-KQyEzst1YFHm8YRjyUH_vz9oXtjACnIkuafA4yyTf9RkIjg>
 <xmx:GBYVabppOAH5aPDGVRcv2j8YWV0RnlH0I4Tly-lUgNxzh7gYqqWgsQ>
 <xmx:GBYVaTlos01n-6PCnx8yhMsZ8JyVbXqld-Zc0imGiF9DMV1yrG9CgA>
 <xmx:GBYVae-zPh59jclpXI1X3merKTXDieYScOCik_BLF4D38nHh8u43In20>
Feedback-ID: ie15541ac:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed,
 12 Nov 2025 18:19:50 -0500 (EST)
From: Joost Kremers <joostkremers@HIDDEN>
To: Augusto Stoffel <arstoffel@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <87ikff83x8.fsf@HIDDEN> (Augusto Stoffel's message of "Wed, 12
 Nov 2025 20:08:19 +0100")
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN>
User-Agent: mu4e 1.12.13; emacs 30.2
Date: Thu, 13 Nov 2025 00:19:48 +0100
Message-ID: <867bvubzzf.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 79417
Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org,
 Kristoffer Balintona <krisbalintona@HIDDEN>, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

On Wed, Nov 12 2025, Augusto Stoffel wrote:
> See also a proposal here which unfortunately was never brought up in
> this mailing list: https://github.com/astoff/jit-spell/issues/20.

As a small addition to that discussion: another use for the document
language is for [typo](https://melpa.org/#/typo).

Also, FWIW, I'd vote for `document-language` and `document-words`. 

-- 
Joost Kremers
Life has its moments




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 12 Nov 2025 23:13:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 12 18:13:19 2025
Received: from localhost ([127.0.0.1]:52142 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJK1f-0006rj-6p
	for submit <at> debbugs.gnu.org; Wed, 12 Nov 2025 18:13:19 -0500
Received: from fhigh-a2-smtp.messagingengine.com ([103.168.172.153]:58115)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <joostkremers@HIDDEN>)
 id 1vJK1c-0006rY-5c
 for 79417 <at> debbugs.gnu.org; Wed, 12 Nov 2025 18:13:17 -0500
Received: from phl-compute-01.internal (phl-compute-01.internal [10.202.2.41])
 by mailfhigh.phl.internal (Postfix) with ESMTP id CFD6D14001ED;
 Wed, 12 Nov 2025 18:13:10 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-01.internal (MEProxy); Wed, 12 Nov 2025 18:13:10 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.fm; h=
 cc:cc:content-type:content-type:date:date:from:from:in-reply-to
 :in-reply-to:message-id:mime-version:references:reply-to:subject
 :subject:to:to; s=fm3; t=1762989190; x=1763075590; bh=TpFNVIO7j6
 ZS18d2sDmyZaha7AmdkXDmk0V+zVZSHwY=; b=F6WcG1bsXHAosiV4lFH2zFlR1X
 66NBMsg9f6b2OTExvYTOGgFZ+be4FHjPDOOR9fCtmBqOHo91V+/TQfW/tdYGZ5wQ
 ehYAI8MoAGI7ZsXmWT9M7kAKJ9OMi2+A4xPnBys0hIwu1DRAhyLiiAZz2dvZNRs4
 9Jc4Ihp26jXYdOelhpt/lEt1eziNNIQBm+W1BqG7XDnRTkv6DFArXe+FU3UCgnjl
 vMmULVgaSSr1ngs/8flh0fUN9BqwaOZ71ZECOz9A+UFWyFBzFa7wWwy1XIferSuq
 d/+uR5eUrmGFUG7rNz0s/gStPIyoed51942RMhYRcnlFk4KpUxDz+E52RhjA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-type:content-type:date:date
 :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to
 :message-id:mime-version:references:reply-to:subject:subject:to
 :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=
 1762989190; x=1763075590; bh=TpFNVIO7j6ZS18d2sDmyZaha7AmdkXDmk0V
 +zVZSHwY=; b=eov39OwEh6aV21vYZT1GQ7SwZiajzuf6ja7dlc9XLtpQlWaG73k
 eXf1Au+5+4ApHr3P/w3YKUCwruZmSn7zUBjunDqy3UgPiruZuQXDhObKf8oLLGLD
 jOfm0M1ZxG/U/AS0zmVv9iq2r0EYwPSyzb1S+k+/G7S48h9Q+GhzMvIbWxli4L5Q
 Mx/+PNvFZYSNJy4qaUU7zdjnq9r5vw0SX1RbrhTr2KPTa6knK9FjAeGSIUAWSNi0
 MJ3bGWReEGrdR3WYFzUIU2YkSkRqO06WtBJ4rR54AguhZC42XVVlpZ8hDvOIEKjk
 C1SwC3N2eB3BJo+0hvFPCqOR6vsrhSkrasQ==
X-ME-Sender: <xms:hhQVaUbcwFk4vKPdwVcRockonpcBQ24kLRBfzjN0Xqz_jChLMlj2nw>
 <xme:hhQVaWSUuVxBwxl2w-yye4nfmsgi3JDJU1XvTZxAMCbn_hcEHtPi6w4TZvTOgTjFU
 fbDBzNwDWKTVrhbW_BminXcbneEM05iempKJyw0-n_j-1No_WM>
X-ME-Received: <xmr:hhQVaXSZmF2MqiIzn88wWf7sYEzxg57UfK8EiSBDCgelinnCBtBF3wZ1Dc5RgJPRW7i-ock>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvtdehfeeiucetufdoteggodetrf
 dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu
 rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujf
 gurhephffvvefujghffgffkfggtgesthdtredttdertdenucfhrhhomheplfhoohhsthcu
 mfhrvghmvghrshcuoehjohhoshhtkhhrvghmvghrshesfhgrshhtmhgrihhlrdhfmheqne
 cuggftrfgrthhtvghrnhepfeekjefgffdtgfffjeduueekteehudfhveethffhheeihfel
 tdfghfegkeeivdehnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilh
 hfrhhomhepjhhoohhsthhkrhgvmhgvrhhssehfrghsthhmrghilhdrfhhmpdhnsggprhgt
 phhtthhopeehpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopegvmhgrtghsqdguvg
 hvvghlsehgnhhurdhorhhgpdhrtghpthhtohepjeelgedujeesuggvsggsuhhgshdrghhn
 uhdrohhrghdprhgtphhtthhopeihrghnughrohhssehgmhgrihhlrdgtohhmpdhrtghpth
 htoheprghrshhtohhffhgvlhesghhmrghilhdrtghomhdprhgtphhtthhopehkrhhishgs
 rghlihhnthhonhgrsehgmhgrihhlrdgtohhm
X-ME-Proxy: <xmx:hhQVaaS4aIiykUk0aO8Syrpc4Z4UMwsmjQv70FqFb-65ocX44ff-gA>
 <xmx:hhQVac6yv84QI3hqKa_JqxjyK1YCljARD3qV7q-lJWeZIqJZ3ZnB4Q>
 <xmx:hhQVaW2PKMCVYxuLnDy5vIiPN74ZdZvJmdmPbJ0xxft1DHAafVzULg>
 <xmx:hhQVaXBH1lYN1ZzFGAU7boJWvOVm5hqIGYo3Gj4-El9XeNAlbHWI8Q>
 <xmx:hhQVaQo3u2FNzOCyLOF4SF2poO8Tn7HrRpavwHVpvk6QLZgtq5FA6mCE>
Feedback-ID: ie15541ac:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed,
 12 Nov 2025 18:13:09 -0500 (EST)
From: Joost Kremers <joostkremers@HIDDEN>
To: Kristoffer Balintona <krisbalintona@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 (Kristoffer Balintona's message of "Wed, 12 Nov 2025 10:10:11 -0800")
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
User-Agent: mu4e 1.12.13; emacs 30.2
Date: Thu, 13 Nov 2025 00:13:06 +0100
Message-ID: <86346idev1.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 79417
Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org,
 Augusto Stoffel <arstoffel@HIDDEN>, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

On Wed, Nov 12 2025, Kristoffer Balintona wrote:
> To give you a sense of what I have in mind, I've listed below specific
> gripes (IMO) and bugs I noticed in ispell + flyspell after having
> returned to them in these last few days:[1]
> - As a user, it wasn't clear to me whether to use ispell-word or
>   flyspell-auto-correct-word. Should I use one in certain cases and the
>   other in other cases? Is their purpose entirely the same? If so, why
>   do these two commands defined in different packages, then?

The two commands do slightly different things, and they have different UIs,
so I guess which one to use depends on personal preference and the situation
at hand.

Though I have to say, I've never actually used
`flyspell-auto-correct-word`. What I do use, a lot in fact, is
`flyspell-auto-correct-previous-word`. To me, that is Flyspell's
killer feature, the one that I wouldn't want to be without. In fact, when
jinx first came out, I tried it and liked it, it's definitely an
improvement over ispell+flyspell in many respects. But I went back to
ispell+flyspell nonetheless, despite the quirks, because jinx lacked a
similar feature and Daniel Mendler decided against implementing it.

I also use `ispell-word` occasionally, when I cannot use
`flyspell-auto-correct-previous-word` or when I want to add a word to my
local dictionary.


-- 
Joost Kremers
Life has its moments




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 12 Nov 2025 20:25:43 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 12 15:25:43 2025
Received: from localhost ([127.0.0.1]:51285 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJHPS-0007y4-V0
	for submit <at> debbugs.gnu.org; Wed, 12 Nov 2025 15:25:43 -0500
Received: from mail-lf1-x134.google.com ([2a00:1450:4864:20::134]:42417)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <krisbalintona@HIDDEN>)
 id 1vJHPP-0007xq-Ub
 for 79417 <at> debbugs.gnu.org; Wed, 12 Nov 2025 15:25:41 -0500
Received: by mail-lf1-x134.google.com with SMTP id
 2adb3069b0e04-5943f39bf9dso86624e87.1
 for <79417 <at> debbugs.gnu.org>; Wed, 12 Nov 2025 12:25:39 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1762979133; x=1763583933; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=fjjAchHYO+TQXiLznosPzscXtPYZYvh6/Ewpucp5h28=;
 b=AdU1YwefmVu5xtQBXgNGbWR2ghZnqw73/DTyJhZ+TpNzzlxcRYiWqT73qTTKmFuFS/
 51wVDsjBhYeBK3zroPnPWj1Tl0QC2syFNGyU3KdfkHnc7HAyTiLBNVe+3mw9SmTSQDt+
 8p4NJ0skhSMTs3+LniOBAUAWmDwqpN3lU/fuLlBt1cXOJkXrQhc6nk6eWYBwYnRTEfOY
 97K1XzyyXMfvxHGyN3Yl0kS+3e61uyk7bSRFPZyhSx2jp2E/Aods6Vd1SRWfDlPLdEi1
 iCcz2M2UdLUGttMRbM6cire3PiU+rKnYTrlzkE6vMMkm39WL47sOUPNrRnm9r9R8ih/B
 prXw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1762979133; x=1763583933;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=fjjAchHYO+TQXiLznosPzscXtPYZYvh6/Ewpucp5h28=;
 b=xRAVif5KwlPdUSxI7D1d/tyS4b8cbQCCj9TMYmrfTQ4s/bmo/7EUTsOxwwSaWqo+mL
 qfx+tTHgISvxGxmtJOpZjSRsOqDtSMAaNO2oc8Vp6eTxDj1ncgZQ17EZ+cUWeo6o9UsG
 u77xuhTEGNTL4Iw+fr8jdcxWLqO6r4LyFWrBJ5vISONtapDHaaYTIeRevMSaphhUZ2hJ
 4BTa2C5AdVnHM4RtqkHyinxgsS56rdT9RZlBoFNC8FKUeQc/br5asuUl1eRU6GVVpZI1
 oduA+TNkN2SMRcwen1hS2PLLfa9r+eR4zxhAu8zt3eQAlG9HXjOkpFiT8r+tbklTQEuj
 ffig==
X-Forwarded-Encrypted: i=1;
 AJvYcCVBQKJTfl5C3C6Co/V0gFmabtqQns3Fry8qeR37skTGu8cTIH760RYNShRdxqxemHLnx6x+zw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yzr7M4/rQhUeqAolNn8i8gh8IoWI6dHkySg2RjZEoot4iJpoWH5
 qUJQEn+ItTke7MP3eHfvyFP1MrtdU99G6Ogup1DxRuaYGUHj6DwKGHR5Qs+KQ7de1kGz39a8ajw
 vkJJwUvBncKTVTCYBrwYo0bS5JgZVpI0=
X-Gm-Gg: ASbGncuYTgucsKgOIFlu8D2PoL/m/Q3Cy6v9pR9pCJ6f1rhYuKm8ZMhCcx9JD2CXfLn
 o+9IUX0MuOUnXDZ8mCY3LJbuSB0gFUGq371SN6OXNDI54VHj27gTTV+px3KIk8+hOYueLPe2yMw
 /oLliXzqhCf6MkH3InvNWTkxL6cmoDfCkBiqcd/WW8eRt+BMDiLe33FxQMERKjr0ZqV0guvLu6F
 MLt14DWs7QMzxrqt3Sa1MRIf7iCs5axFSM5/m5C0v0NTtgfiEUubiXGTDLlAKejWPnC3d4=
X-Google-Smtp-Source: AGHT+IEQs21MKLK7QB69bnmRNnb6U713DuXFFuv391pRJkYVz0LFjH4KSKydO2gw+7h2cjkJLhi5j42zXMQDNPU0tqw=
X-Received: by 2002:ac2:51ca:0:b0:592:fabd:61f2 with SMTP id
 2adb3069b0e04-5957ecbcf46mr203440e87.16.1762979133126; Wed, 12 Nov 2025
 12:25:33 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 12 Nov 2025 12:25:32 -0800
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 12 Nov 2025 12:25:32 -0800
From: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <87ikff83x8.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <87ikff83x8.fsf@HIDDEN>
MIME-Version: 1.0
Date: Wed, 12 Nov 2025 12:25:32 -0800
X-Gm-Features: AWmQ_blRgiYprgxpXK8uUAwtE_EpkWHTZePhr-Ty27NGk9zJgZvN9cwqJBWWLrw
Message-ID: <CANVbq5mRnXrO++PCkXube-8uwuVVb_CKYBYC8N=2DC-xK_rzfA@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
To: Augusto Stoffel <arstoffel@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Wed, Nov 12 2025, Augusto Stoffel wrote:

> On Wed, 12 Nov 2025 at 10:10, Kristoffer Balintona <krisbalintona@HIDDEN> wrote:
>
>> I think the existence of jit-spell again illustrates (in my opinion) my
>> point that we should ideally extend ispell/flyspell to fulfill the user
>> needs and expectations that drove users to install or develop
>> third-party packages.
>
> Sure.  For the record I originally intended to make Flyspell
> asynchronous, and then I realized it would be very difficult to
> implement that in a backwards compatible way, so I made jit-spell an
> independent package.

Good to know.

> Apparently some people around here prefer Flyspell/Ispell as it is,
> but I think you're objectively right that most users prefer something
> more "modern".

I think the (perhaps naive?) ideal should be to get ispell/flyspell to a
state where those users happy while simultaneously making users of
third-party spell-checking packages (jit-spell, jinx, etc.) happy.

>> - As a user, it wasn't clear to me whether to use ispell-word or
>>   flyspell-auto-correct-word. Should I use one in certain cases and the
>>   other in other cases? Is their purpose entirely the same? If so, why
>>   do these two commands defined in different packages, then?
>> - The ispell and ispell-word UI is custom-made. I think using a generic
>>   UI like completing-read or even something like transient (just
>>   spit-balling here) would better serve this purpose, especially when
>>   spell-checking is one of the first things users coming from other
>>   programs expect their text editor[2]. The UI should conform with the
>>   rest of Emacs's facilities IMO.
>> - The popup window for ispell and ispell-word does not obey
>>   display-buffer-alist.
>> - The various *-dictionary user options in ispell confuse users: which
>>   ones should they modify to achieve a particular end?
>
> Right, the first step to fix this could be to obsolete
> ispell-local-dictionary.  This is unnecessary as ispell-dictionary can
> be set buffer-locally to the same effect.

For me, part of why the various *-dictionary options were confusing was
precisely because it wasn't clear why ispell-dictionary wasn't just a
buffer-locally set variable. I had assumed that there was a technical
reasoning to have separate options that I was missing.

>> - When flyspell-mode is enabled (underlining misspellings), when adding
>>   a word to the personal dictionary with either flyspell or ispell, the
>>   current misspelled word is no longer a misspelling but later
>>   repetitions of this word (just added to the personal dictionary) are
>>   still underlined but not recognized as misspellings (when you call
>>   ispell-word it reports that the word is correct). One has to call
>>   flyspell-buffer to remove these false underlines.
>> - At least in org-mode buffers[3], the words that flyspell and ispell
>>   recognize as misspellings can differ because ispell ignores words
>>   according to ispell-skip-region-alist whereas flyspell offers
>>   flyspell-generic-check-word-predicate.
>
> This is a problem indeed.  I would argue Emacs should define an API for
> spellchecking packages and major and minor modes to cooperate in
> deciding what regions of the text to ignore.  I had a proposal drafted
> somewhere; I could post it here although I can't work on it right now.

I think sharing that proposal draft (even if incomplete) would be
worthwhile. If anything, I am interested in reading what you have in
mind, since the idea is intriguing. Currently, jit-spell has
jit-spell-ignored-faces and jinx has jinx-exclude-faces. Ignoring based
on face (or: having a predicate that can check faces) felt adequate to
me.

>> - At least in org-mode buffers, flyspell sometimes highlights words in
>>   comments as misspellings when calling flyspell-correct-word has no
>>   effect (because it is not a misspelling?).
>> - Flyspell does not only offers corrections by using the mouse. The only
>>   way to correct words with the keyboard only is through ispell. (This
>>   amplifies the confusion described above where ispell and flyspell both
>>   have their own means of correcting words.) Ideally, flyspell should
>>   have its own keyboard-centric way of correcting words.
>
> One more gripe I can mention is the LocalWords mechanism, which is
> incompatible with dir-local variables.  It would be better to just use a
> regular file-local variable.

Ah, yes. I agree. In jinx you can save words using file-local variables
(see jinx--save-file) as well as save words using directory-local
variables (see jinx--save-dir).

> See also a proposal here which unfortunately was never brought up in
> this mailing list: https://github.com/astoff/jit-spell/issues/20.

Thanks for sharing your discussion with Daniel Mendler (the author of
jinx). Daniel closed the issue after a few months: do you know if
anything came out of the discussion you had with him?

-- 
Kind regards,
Kristoffer




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 12 Nov 2025 19:10:52 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 12 14:10:52 2025
Received: from localhost ([127.0.0.1]:50917 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJGF1-00052i-R3
	for submit <at> debbugs.gnu.org; Wed, 12 Nov 2025 14:10:52 -0500
Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]:50275)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <krisbalintona@HIDDEN>)
 id 1vJGEz-00052W-3D
 for 79417 <at> debbugs.gnu.org; Wed, 12 Nov 2025 14:10:50 -0500
Received: by mail-lj1-x22a.google.com with SMTP id
 38308e7fff4ca-36295d53a10so54351fa.0
 for <79417 <at> debbugs.gnu.org>; Wed, 12 Nov 2025 11:10:49 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1762974643; x=1763579443; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=cvg1ZXji0fz0+x1mL9T/Wmqx8F1HS1yf+mUaFGgwbLE=;
 b=JGYNv1uc56sLe8shBLuah/EuJr9vPUmD5skgli8rGxeAQzbk+poOm4tAi2Ap9YIrPJ
 c+RAMkog7rj0imgaWxscMJHL/DkvNoqipFvZAmyuwktgfi3Bu0DPHec9b6YqTGd/24rW
 r/yeblsNdMK3LXySsffe2b+zn2/nVwJvpZScmkKCoKAIQEOvykCb3+dcK9T6m2aT0+Cm
 /J6lYUxEY6jRTleKd0ygXGNi7MZair1/0PBtSsSW19pZZoNyljYnypPog0Sl3+bZVyjy
 yaccQA1vtWwAd6FGa+5dR9qJzFHIAQHkrMSSK47ADzd2aWVVzHb0fu/6QgQpGINhGPFh
 5QmA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1762974643; x=1763579443;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=cvg1ZXji0fz0+x1mL9T/Wmqx8F1HS1yf+mUaFGgwbLE=;
 b=QmxMeJiBhtCDHA6ZWA/lsHySqauVG9pJW6mnuNNV/RLasWz/PViz6Povv5sUXEcP/J
 n8NkBe4FA3580J4ZEdXMc7Y/gpvC9frGhDrO664l+br+oolj8m9RPgHfuGFbgbLV2Foz
 x3uLbITThKmfmZqacgjwGUt3fkJjJ0/pwCu+mGZiFdvnr22FJEEqtPxtXAndFe7D9p4j
 KakJqHjN8MzVWOLdpXuBr7dg8U0qXqdwb7jUrh4sN9vNPZSzzBXjJgggpZTvw6S/aX/j
 Ic14oOkgoq7ViqQ/pGCYZsYqfeC4Ajk13MxDG8XUsm5f2iAV6Y232UKhuQL7+AxQY4qq
 5aLQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCUM9hVqM7SL1vvJ+5T0mzdfngBjKODs6ty7jgkOzDy457x7Xr8b2ja1egLuRpPo4y5nzDDdDw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YwD46gIyQUkeGqdjJ9Q1axyKTBzIbYHjlFi247SXUytBnWSkstl
 03ZH+J0nWzwplRDgnBcbp47XKDDzjSK8TGPcXPvfFGWlQyTxggjxZsJXtzb1HibkehavUa+ei3p
 xl/6ju9haNG0Y7E74YVoJj1cvIdJVqI3bugoJdFA=
X-Gm-Gg: ASbGncu4O7za0FwEVgyE4Nz8tZAZwkIoCMkK+Dn2lKegQ2dkHr5fMNJselpRR+YKDRl
 RO5rNnsYXmqRUvX0Ws5mL486h+zRMJusT8fmpYs++/f8Zaa8liimfB1vkkh080ITjyDnL9MfL8z
 yi1cxJ30mEuELl4RDA6ohjKZPpjKo9iEuG2XAPtLzeSG+SXVfCFIK+TIrCBvbnyIxr7nw+UNiFY
 Lp6LcJLmH2W7v0rrTtU4bzqWiTirMt5/PQGKoD2BFEfpw3EEFXcmd4l4osMIT2pRlFkM6MRtgFw
 R5spbg==
X-Google-Smtp-Source: AGHT+IHNxVo8jCikJsB0zfFm6lI2Ia9fWyDnYJ7OJb8FtpKWNg4j/5CnZbf6LjRbcxiovXe9J9BICE3ItfXYgdh5OYk=
X-Received: by 2002:a05:651c:25c4:20b0:37a:95c9:473c with SMTP id
 38308e7fff4ca-37b8c45ac9dmr9942511fa.46.1762974642409; Wed, 12 Nov 2025
 11:10:42 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 12 Nov 2025 11:10:41 -0800
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 12 Nov 2025 11:10:41 -0800
From: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <86ldkbrtin.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ldkbrtin.fsf@HIDDEN>
MIME-Version: 1.0
Date: Wed, 12 Nov 2025 11:10:41 -0800
X-Gm-Features: AWmQ_bkzCdQPo-qcwryW1Zl1lP5-OtP7Lp5EaFVBR0hJFWf0TA7hyTLkHkHNSq4
Message-ID: <CANVbq5m1zBV0M9aRn6kD_BRZ8miOV0rADHJvU+ernWB8CHdKvA@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Wed, Nov 12 2025, Eli Zaretskii wrote:

>> Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
>> From: Kristoffer Balintona <krisbalintona@HIDDEN>
>> Date: Wed, 12 Nov 2025 10:10:11 -0800
>>
>> - Flyspell does not only offers corrections by using the mouse. The only
>>   way to correct words with the keyboard only is through ispell.
>
> This is inaccurate: Flyspell has "C-c $".

I am aware of flyspell-correct-word-before-point (bound to "C-c $"), but
in my Emacs it opens a pop up menu that requires mouse interaction. (Is
it not like that by default? Is my init.el to blame for this behavior?)
I had in mind a UI like in jinx or flyspell-correct[1] where the word
correction candidates are able to be selected by keyboard alone. (In
those packages, completing-read is used.)


Footnotes:
[1] https://github.com/d12frosted/flyspell-correct

-- 
Kind regards,
Kristoffer




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 12 Nov 2025 19:08:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 12 14:08:30 2025
Received: from localhost ([127.0.0.1]:50898 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJGCj-0004uE-Ma
	for submit <at> debbugs.gnu.org; Wed, 12 Nov 2025 14:08:30 -0500
Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]:57601)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <arstoffel@HIDDEN>)
 id 1vJGCh-0004tr-71
 for 79417 <at> debbugs.gnu.org; Wed, 12 Nov 2025 14:08:27 -0500
Received: by mail-ed1-x536.google.com with SMTP id
 4fb4d7f45d1cf-6417313bddaso2119395a12.3
 for <79417 <at> debbugs.gnu.org>; Wed, 12 Nov 2025 11:08:27 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1762974501; x=1763579301; darn=debbugs.gnu.org;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=LbrqARkn2nqaYv8lTmUAyiy6NWkpGs7Z1TE7B27l4Mk=;
 b=DFjA+LZMQkopTaXB+SRlvfRxaIoN2jQGj6M7HD9BOi2nfmO+Uzc5qLt8HlU599Vu6P
 mKixjoUh1ixM3OWyNUhDPXkFBlq0zkC3HrMsQQOOqL71qepAJCIQUuPX+COFyJINtloc
 fmC9JuZuPAx9Ps1gaOJB5nnYiLww9gPMce9BQuXIgcPusNEElnl3YC1lueaJj7pSdgjA
 QSXbuczAyuxa6O1sIqPvB9902gjYo3YLQHq5McAbbNMFvTC1dAj2j0MY4PPMuy4h3M7S
 lqxm4m7fg1SSTDPAM0a6KMj46OVbcgm/JSlV/yciOFkqa5acqC+MWgwno6qaHMkRAule
 5oyA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1762974501; x=1763579301;
 h=mime-version:message-id:date:references:in-reply-to:subject:cc:to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=LbrqARkn2nqaYv8lTmUAyiy6NWkpGs7Z1TE7B27l4Mk=;
 b=xCFsfM7aRjcIlVvkkqzhgl+XNuxKD23lHBxoffCN+2zNT0fR2Je4Y5Q+MVYYgwnhwM
 s6MYS8Rq/bxjeQ6rKQZ7KisL/7SnzZKwEJmkyJHQy20zdPy75DIbxjwf5IxkqI8q+uAu
 B3xQXaaLQ/1O8FzMrMwseyxSyS8WktWCOkn6BELset6GPgHB6PZ/vIA72OM/jq34PeNi
 //Js+5OEmSrgpyD8Sl6SGfK4LaiyVH0ge6e+jUH/jc99qzqS2Eepo3uHkBxSmPwmvHqK
 Cpcff/2/26L9WMPy2l+Y4KOw6muIsMifa2fHfoS+y8eVgkAGYLS6f89MqG354mzkuHTu
 C1sA==
X-Forwarded-Encrypted: i=1;
 AJvYcCXXHeFvvwEREzVhGfEyCsX6okVRDkTbuS2/hUB6+j7JPzxubpxOJEkN1j0rYp7tHcXl2L+eGA==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yx9jHCarpI+1fjpwbjR7AhtwDimrmjSAjV0o3opXxh1ZqoU+W/x
 Kp347A7/M3Zx8eYefyTqnGcnY/EeJ5EoBwOaC+RIRGRXQN50j4Ae8JFg6Au9Nw1v
X-Gm-Gg: ASbGncvZullLrnfIqJ4MqbwbOW0ryDtmppay63gN7yMg0tVl53Nn5jTz+wq/7TzXvR1
 t/JfNW1L+D9kL36QMAYjvUEwvhWl8/SRVQ7neLbnY7Z5Vd7zMxXOBM57Sud2Kc/hBoUmOinvNU0
 b8QSUKMFB4RtDq7PRI7NBj8ks94Qlzwe41VsWse6STyLj2xaxPJ7TCfyLAZroTlnLTQ8OaJ0yHj
 33eRh4Pnc2sOpygw3K2Xq4kjiDDMQsWiFyv/NMKbff66Z84gjGUpy2eLaDGBeYTcbkfnEcKDZpw
 VEi/Hvz8ns9l9rZ3hwxnpxTHmUUvP3wcK3Q2ipaE0Lke1+6N260ECYF6b45iOoVpy0W4muCL+7E
 TK2NhW/vrWbcw3S/7n63jpum1ymWPhn71qBAglxolue9dKxkxGV1w
X-Google-Smtp-Source: AGHT+IEiYG6cXh75BLA+mmxlyYGh3gN3MRqdOR41kX6WenYSZBvAoTc8C8y0KU01hu062IFPGUwYPg==
X-Received: by 2002:a05:6402:27c8:b0:637:e2b8:605b with SMTP id
 4fb4d7f45d1cf-6431a39740dmr3791506a12.5.1762974500662; 
 Wed, 12 Nov 2025 11:08:20 -0800 (PST)
Received: from ars3 ([2a02:8109:8a95:9a00::31fb])
 by smtp.gmail.com with ESMTPSA id
 4fb4d7f45d1cf-6411f86e9d7sm16374805a12.36.2025.11.12.11.08.20
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 12 Nov 2025 11:08:20 -0800 (PST)
From: Augusto Stoffel <arstoffel@HIDDEN>
To: Kristoffer Balintona <krisbalintona@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
Date: Wed, 12 Nov 2025 20:08:19 +0100
Message-ID: <87ikff83x8.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Wed, 12 Nov 2025 at 10:10, Kristoffer Balintona <krisbalintona@HIDDEN> wrote:

> I think the existence of jit-spell again illustrates (in my opinion) my
> point that we should ideally extend ispell/flyspell to fulfill the user
> needs and expectations that drove users to install or develop
> third-party packages.

Sure.  For the record I originally intended to make Flyspell
asynchronous, and then I realized it would be very difficult to
implement that in a backwards compatible way, so I made jit-spell an
independent package.  Apparently some people around here prefer
Flyspell/Ispell as it is, but I think you're objectively right that most
users prefer something more "modern".

> It seems like your main pain-point with ispell + flyspell is perceived
> performance (i.e. IO blocking), right? I agree that that aspect should
> ideally be better, but in my initial email I had more in mind the UX of
> ispell + flyspell.

Yes, it's both the mechanics/performance and the UI.  (AFAIK jinx has
very similar UI as jit-spell.  (Some background on that can be found at
https://github.com/minad/jinx#alternatives -- although I don't agree
with the performance assessments made in there.)

> To give you a sense of what I have in mind, I've listed below specific
> gripes (IMO) and bugs I noticed in ispell + flyspell after having
> returned to them in these last few days:[1]

I have the same gripes, and a few more :-).

> - As a user, it wasn't clear to me whether to use ispell-word or
>   flyspell-auto-correct-word. Should I use one in certain cases and the
>   other in other cases? Is their purpose entirely the same? If so, why
>   do these two commands defined in different packages, then?
> - The ispell and ispell-word UI is custom-made. I think using a generic
>   UI like completing-read or even something like transient (just
>   spit-balling here) would better serve this purpose, especially when
>   spell-checking is one of the first things users coming from other
>   programs expect their text editor[2]. The UI should conform with the
>   rest of Emacs's facilities IMO.
> - The popup window for ispell and ispell-word does not obey
>   display-buffer-alist.
> - The various *-dictionary user options in ispell confuse users: which
>   ones should they modify to achieve a particular end?

Right, the first step to fix this could be to obsolete
ispell-local-dictionary.  This is unnecessary as ispell-dictionary can
be set buffer-locally to the same effect.

> - When flyspell-mode is enabled (underlining misspellings), when adding
>   a word to the personal dictionary with either flyspell or ispell, the
>   current misspelled word is no longer a misspelling but later
>   repetitions of this word (just added to the personal dictionary) are
>   still underlined but not recognized as misspellings (when you call
>   ispell-word it reports that the word is correct). One has to call
>   flyspell-buffer to remove these false underlines.
> - At least in org-mode buffers[3], the words that flyspell and ispell
>   recognize as misspellings can differ because ispell ignores words
>   according to ispell-skip-region-alist whereas flyspell offers
>   flyspell-generic-check-word-predicate.

This is a problem indeed.  I would argue Emacs should define an API for
spellchecking packages and major and minor modes to cooperate in
deciding what regions of the text to ignore.  I had a proposal drafted
somewhere; I could post it here although I can't work on it right now.

> - At least in org-mode buffers, flyspell sometimes highlights words in
>   comments as misspellings when calling flyspell-correct-word has no
>   effect (because it is not a misspelling?).
> - Flyspell does not only offers corrections by using the mouse. The only
>   way to correct words with the keyboard only is through ispell. (This
>   amplifies the confusion described above where ispell and flyspell both
>   have their own means of correcting words.) Ideally, flyspell should
>   have its own keyboard-centric way of correcting words.

One more gripe I can mention is the LocalWords mechanism, which is
incompatible with dir-local variables.  It would be better to just use a
regular file-local variable.

See also a proposal here which unfortunately was never brought up in
this mailing list: https://github.com/astoff/jit-spell/issues/20.

> On the other hand, in my many months of using jinx, I have experienced
> none of the grips described above.
>
> Footnotes:
> [1] Some of these may be because of some mistake or misconfiguration in
>      my init.el, but as far as I know, this is the current behavior of
>      ispell and flyspell on Emacs master.
> [2] Emacs is much more than a mere "text editor," but a text editor is
>      one of the buckets Emacs can fill and that perception is what
>      shapes new users' expectations, which includes a well-functioning
>      and out-of-the-box spell-checker.
> [3] I primarily write in org-mode buffers so the observed experience has
>      been mostly in those buffers, but this issue might show up in other
>      major modes, too.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 12 Nov 2025 19:06:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 12 14:06:37 2025
Received: from localhost ([127.0.0.1]:50883 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJGAv-0004qs-86
	for submit <at> debbugs.gnu.org; Wed, 12 Nov 2025 14:06:37 -0500
Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]:61899)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <krisbalintona@HIDDEN>)
 id 1vJGAt-0004qk-8T
 for 79417 <at> debbugs.gnu.org; Wed, 12 Nov 2025 14:06:35 -0500
Received: by mail-lf1-x129.google.com with SMTP id
 2adb3069b0e04-591ec7af7a1so1112797e87.3
 for <79417 <at> debbugs.gnu.org>; Wed, 12 Nov 2025 11:06:35 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1762974389; x=1763579189; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=fjuhKFmgI3LP57m2SR7isXder5zVsK9e/wf6sDZr2lY=;
 b=EHhhUMrOlP+bkWph/5vw0T5Wbjuw9h/6erZZ/kSGfcJZ/cbcqBHCnue/DsTidiOkx4
 /J2pykNTP9qrkdWVbkl5hWmVerOcYpFdyBINoX69jU1HjLDFPiEGic/GRwGcbfXyJkGn
 L5UEnOzgxBeq8tqsZw90CdMO2+7YZBXqDskZ5M+yzoeEmdGc73PTb45GKHqWPXejSFbq
 IspDJdQ8gVetAjkWDKYucoGtzPBUejrQruYBZQrY8rqD9tIbtMrOWK660HKWALDrGPZs
 eS5MfJC+epxQUEPppdVCW3uhStGKPcz0lqfl81bwy/7ux/KdqJhZYT+FDoh2f1cxnxFL
 oYbw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1762974389; x=1763579189;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=fjuhKFmgI3LP57m2SR7isXder5zVsK9e/wf6sDZr2lY=;
 b=oRDJNMUNSdXELc9k8qm207xleI6Nn7aZCwcHgyHoUvL/VlqW924nmKmI7zHyQyOKge
 incGXMTVfgkKiIsQPRXAltO4+njTVR+gDKSO7IdmAr0kXRTc+6+6yrjNlDpAVa5i5GIQ
 S/71J/wb5dM4z7bD6m3/i+ofMtVfkumArKKJkhksLnB6mnBe4uQcxbH2oeg0yu7tFFJ0
 8VK9/17rRyZMbdxo7aV8EtSN+ABai5Ftd+XIontaq7BP7VIYRUVrF8/0tZ0SD5NmLaH7
 jgEHVCzzMYuV5m7GoXL/HEk727DvLbh1vOz0zEna/TqiJY8E7iuSQKI6xDQCc8cGX3kA
 yctg==
X-Forwarded-Encrypted: i=1;
 AJvYcCUYPZwEfJze7xetuWAu1E2xBmvI0PvIqAuE/omnCwmULR4A1es5DqA/cE9P85DzzOe5rkgUjQ==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YweXFBQclbfFHuv4ozFAkklAD09h4LQfoaZ5rHKwEHiFp4538aj
 DGew3bEXutgfOvOPpXId7BYkFn2qQlkPGaLwqQ4AJJQyFM7LjgXCS3HRkxDqAaxqDzg0fnLd0Ow
 Rd2I1D9teRh+vxuW9F5/pqCz8ZwSEbVM=
X-Gm-Gg: ASbGncsGWuN7O5QTnWYBEZe/Xwa+/jLSvoNhL3N/EppIMzMDMgCA/G994gW59sYqABw
 Nmc92T/razVF9uu/V7Vrz71cVWCxlCw1aeRPrVAUFbog1IOoSqZWfTlkp0U9lOM3rZHnQZGAohC
 FLuASDEhOHy2LRLYY6U4cfig058HVkNrU1Wq46/IZs+v3gEVTWga3dju+Bqz05kDMNCYT4XFMGd
 Aurr7fyZfcft0/dQB9cWup8imYrlNkjaxQ/BxIPTSFBaRRUXyDt0hoIFt22w558+Vtq5bfp3HKh
 Ih6nYg==
X-Google-Smtp-Source: AGHT+IHomM5NQflOw9Dvp+scuY00tQiNnNY2eKrDTdsR7irMuwWbSvfAGmQ+/Y3JGc92Htoqiz5T+aWeTx/dYMG0JSY=
X-Received: by 2002:a05:6512:12c4:b0:594:25e6:8a61 with SMTP id
 2adb3069b0e04-59576df8d00mr1266246e87.16.1762974388565; Wed, 12 Nov 2025
 11:06:28 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 12 Nov 2025 11:06:28 -0800
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 12 Nov 2025 11:06:28 -0800
From: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <86ms4rrtsf.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 <86ms4rrtsf.fsf@HIDDEN>
MIME-Version: 1.0
Date: Wed, 12 Nov 2025 11:06:28 -0800
X-Gm-Features: AWmQ_blm2Xmzi-GSTICFPqHH6D8KBJiOj9_n-TVgk2Eh9R95RcqD8xv2wK20aCQ
Message-ID: <CANVbq5kvV9eMa=NqgsPh=-M8w=hAw4uDndx_t0RyfzxM7goZtg@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Wed, Nov 12 2025, Eli Zaretskii wrote:

>> From: Kristoffer Balintona <krisbalintona@HIDDEN>
>> Date: Wed, 12 Nov 2025 10:10:11 -0800
>> Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
>>
>> - The ispell and ispell-word UI is custom-made.
>
> It isn't.  It deliberately mimics the UI of the spellers themselves.
> Try running the speller interactively outside of Emacs, and you will
> see that it uses almost the same UI.

I see. That makes sense, thanks for the info. I suppose, then, my
comment should be amended. Perhaps, ispell is right to keep it's UI
(although, the window still doesn't obey display-buffer-alist as one
would expect) but flyspell should have a generic UI.

I'd also still say that there is confusion (in general but especially to
newcomers) on which word-correct commands to use (the ones ispell offers
or the ones flyspell offers).

-- 
Kind regards,
Kristoffer




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 12 Nov 2025 18:33:09 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 12 13:33:08 2025
Received: from localhost ([127.0.0.1]:50693 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJFeW-0003QV-JT
	for submit <at> debbugs.gnu.org; Wed, 12 Nov 2025 13:33:08 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:59806)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vJFeR-0003Q5-Cf
 for 79417 <at> debbugs.gnu.org; Wed, 12 Nov 2025 13:33:06 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vJFeF-0001F7-Ux; Wed, 12 Nov 2025 13:32:53 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=Luw3u2CgcA7F977GQL3/VefFzTkuRofIvkQs0QiMfjM=; b=dy3Ko2Bh/ABR
 p+I15cK0nEtBKFxSQFbLHrjlKi6FTpZS+RqBPb8IYKdhFI25QQ+2w6jQ4QDd9zuRpUEJG6p9+qrRC
 DGHVbXzsknjW8ajVY24cJlBGCwcTvUfEQzN0AyGDLD/EhKGm4+0nhdbjPt2tDpnseOCnHiVprvmOS
 YGUODmOBmqDDMEGIaaot8ei3CEKcbBuxUzTgoELMJ+RZ9wSZXybTWxLQ4SSlvudaQDSTGqnH1Wjcm
 hGXIxZtWkAERctvNezaQ3nj6xRSLIkaAMiAh4ThBgOvpE/jheMVOhJHo2lUEvvCXekwkHVzGF6kT4
 gZn9P719aDt5+1nOvFEerQ==;
Date: Wed, 12 Nov 2025 20:32:48 +0200
Message-Id: <86ldkbrtin.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 (message from Kristoffer Balintona on Wed, 12 Nov 2025 10:10:11 -0800)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
> From: Kristoffer Balintona <krisbalintona@HIDDEN>
> Date: Wed, 12 Nov 2025 10:10:11 -0800
> 
> - Flyspell does not only offers corrections by using the mouse. The only
>   way to correct words with the keyboard only is through ispell.

This is inaccurate: Flyspell has "C-c $".




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 12 Nov 2025 18:27:07 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 12 13:27:07 2025
Received: from localhost ([127.0.0.1]:50662 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJFYh-0003DV-4v
	for submit <at> debbugs.gnu.org; Wed, 12 Nov 2025 13:27:07 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:34072)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vJFYe-0003D4-Hc
 for 79417 <at> debbugs.gnu.org; Wed, 12 Nov 2025 13:27:04 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1vJFYZ-0000aK-1l; Wed, 12 Nov 2025 13:26:59 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=QDUTyC8XLkQmhXl7D2iRYacYChQryzpdVFYSOAvuzh0=; b=nBHcUlAR+4YP
 BVHXUNEfeVyJqVoThDZevJCayk5P4FF6BIqWBrtxxpQTsrlzg51NBqhQ8M9mVkowuuhtY6P/Hicgi
 zqqZ9+X2kwjfI5ng/p1AXx898IfioRXTZN0rFs77/WrM4XhV1w2ZfIPTnDtm6RKMX+QCiZRQ6TDs6
 rDsUXzpPYq+QlYQJfKr6Un/0h6aZRP6sqKPm3XoEIRaQ/PPXjm4uqCwssP/KUFLaecxQBnirycfQe
 wPUVhc1D3QoaZKxLuxpssvKP6AOcBGFJpU22CYdYd+Bb0GlE3KUmKlIqklxIvHQfJLJeYqhc6Lhp1
 5iUyPGC4P7uChJwr1aUniA==;
Date: Wed, 12 Nov 2025 20:26:56 +0200
Message-Id: <86ms4rrtsf.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
 (message from Kristoffer Balintona on Wed, 12 Nov 2025 10:10:11 -0800)
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
 <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: yandros@HIDDEN, 79417 <at> debbugs.gnu.org, arstoffel@HIDDEN,
 emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Kristoffer Balintona <krisbalintona@HIDDEN>
> Date: Wed, 12 Nov 2025 10:10:11 -0800
> Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
> 
> - The ispell and ispell-word UI is custom-made.

It isn't.  It deliberately mimics the UI of the spellers themselves.
Try running the speller interactively outside of Emacs, and you will
see that it uses almost the same UI.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 12 Nov 2025 18:10:22 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 12 13:10:22 2025
Received: from localhost ([127.0.0.1]:50582 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJFIT-0002fC-S0
	for submit <at> debbugs.gnu.org; Wed, 12 Nov 2025 13:10:22 -0500
Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]:60851)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <krisbalintona@HIDDEN>)
 id 1vJFIQ-0002f4-W1
 for 79417 <at> debbugs.gnu.org; Wed, 12 Nov 2025 13:10:19 -0500
Received: by mail-lf1-x133.google.com with SMTP id
 2adb3069b0e04-59469969bfeso1160734e87.1
 for <79417 <at> debbugs.gnu.org>; Wed, 12 Nov 2025 10:10:18 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1762971012; x=1763575812; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=7Fw67Gh3rwygQpolKE/OJq3I/kCT/MaEgRSeptx/H2w=;
 b=NsXgdARlUSQDsTXZcIGo5EahXaXXUnOIXddAgbC0MUz6rqE2LMWPVkHVRLS32gpV6/
 CD3AqyhqgkqhYcGoognLYAQJytv6M6NegyeqdYgymPWT8My8X/XcDpwy2tDyVa63EKwY
 EDRATFUwTH1khvtrKupgJOYU2JYywkf6zLQEXLPcwNzgwbmpqG5N2Q9+NwwBLJoRTB+h
 etR7GOD97X1Adve7CSlR/V0MNTAKzl7NPNMd89GM0j2s1gGYrOxKca36a3DiSOjkPLsi
 FQFmjraBFO0xGFSotYY9X4yydwKRhNUKjbPeEx3Sq6JASe0MCF5cc4gwFSUbWOqUH9E2
 qPjg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1762971012; x=1763575812;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=7Fw67Gh3rwygQpolKE/OJq3I/kCT/MaEgRSeptx/H2w=;
 b=u6NZyLNsw/FhBsFfUDfLgbW9Pwbl7TCIK2vSDTswaPe78XViHmUrJQcatB5xZUX2yj
 1kYRkHrXKhAW1bML7faZUFjHw558x8ann0UHFqlfLGnIUYbHoWvSdprbWAKi7Z02f1it
 BxHFJqny0yAIg1Qv12kh0R2s+pAbGiiJlzQDUpDoDd3QggGk0j53KDO6lXgtQaPd8Tnq
 JXKiI1lyt5vFOCu/y2hRPK2aWWb/38C7c/lcDdSkaEZ1iX+hfIpZdsqxd+BgNgqoBlxF
 KxzF6IRzgQc3h/4yoE8UQdU4ZRbQl+4Mnn6d6Gu5iQflJbhTPopEvuKIdD6wpYDhb5HP
 iyJw==
X-Forwarded-Encrypted: i=1;
 AJvYcCXV3SMm2CD+35IPHtwtXik5ZvKp0oz7WrMHm81XDPKNGFSJQV6bSeSYhbrCuKJdIff5xs27uQ==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YwUEedosI7Ho88XfrGVLNM8LD0zlraQyFzSULcfosLGimQPKhi4
 4QHJe/oiMIGs1crf2/rDwPW6ley/Me7e90CoAGuZV6/aT8co9w7flgvfdG0BGIyJciJJXs0u+ge
 nMK+eB2zXhMBgJGm7+injhqnoGwhya4k=
X-Gm-Gg: ASbGnctoWmcDgY86Cl9E1mUmJ0TwcE/Vb6YsxyfQBCpt75ixhBvfCCSBHBjfDgWJ6CT
 Tp7IMDiL/uaHMO+gZN73e672Yr3uGrXwmE5C3Hw0YwpYt4vOD8UQowFhM5uk2kbe5IaDCkHRKFH
 e9bmSm8wdsxksuzVXvwpHuHr0chc520fuPWQBGmUcSyarWSEGpOFfQMtZX3WyfXhy3aqwnyIHDr
 PS1a7Fr+LPCSf2nSCdKh3B5hSGmpaAocJLjczPb338pQqRZPAOUdYcMNf7uwT8WkwNpV60=
X-Google-Smtp-Source: AGHT+IHywrWY2lAeLdQqhliPDZTF/8UT13KFFdoMve+34n3HZye10/w32oH0qsvvwjmH9oXXHqv7bqgIS569I2utWu0=
X-Received: by 2002:a05:6512:3d1b:b0:594:4e9f:98ec with SMTP id
 2adb3069b0e04-59576df94e1mr1290736e87.20.1762971012159; Wed, 12 Nov 2025
 10:10:12 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 12 Nov 2025 10:10:11 -0800
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 12 Nov 2025 10:10:11 -0800
From: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <87ms4r8qbm.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 <87ms4r8qbm.fsf@HIDDEN>
MIME-Version: 1.0
Date: Wed, 12 Nov 2025 10:10:11 -0800
X-Gm-Features: AWmQ_bkgfOAKa4hbaui750jEVK7uYATtV80cOAF1j5QtIe27Ii5dd4LHkNAVzKA
Message-ID: <CANVbq5=LFowVTQ0+jpRCT6ArHMS2jh5S8emO8A923w_1p99f4Q@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell and
 flyspell)?
To: Augusto Stoffel <arstoffel@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Thanks for chiming in.

On Wed, Nov 12 2025, Augusto Stoffel wrote:

> On Mon, 10 Nov 2025 at 21:53, Kristoffer Balintona <krisbalintona@HIDDEN> wrote:
>
>> On Mon, Nov 10 2025, chad wrote:
>>
>>> My understanding is that jinx requires an emacs with dynamic module support
>>> included, plus it needs the user to have installed a separate library
>>> (libenchant), and it needs to be able to compile the glue file during
>>> installation, which means the user needs a functioning dev environment
>>> where emacs can find it. Is that still true?
>>
>> Yes, that's exactly right.
>
> For the record, jit-spell (in ELPA) is similar and doesn't need a
> complied module.

Thanks for sharing. I haven't tried jit-spell yet, but will give it a
try soon.

I think the existence of jit-spell again illustrates (in my opinion) my
point that we should ideally extend ispell/flyspell to fulfill the user
needs and expectations that drove users to install or develop
third-party packages.

> Using a subprocess as jit-spell does of course has some overhead, but at
> least to me performance is more than adequate.  A limitation of the
> ispell pipe communication protocol is that you can't check spelling
> without also computing correction suggestions at the same time, and this
> makes jit-spell use more CPU _outside_ of Emacs.
>
> So IMO in order to "solve" spell checking in Emacs one has to resign
> oneself to linking against some choice of spellchecking library or else
> accept the performance penalty of computing corrections eagerly.

It seems like your main pain-point with ispell + flyspell is perceived
performance (i.e. IO blocking), right? I agree that that aspect should
ideally be better, but in my initial email I had more in mind the UX of
ispell + flyspell.

To give you a sense of what I have in mind, I've listed below specific
gripes (IMO) and bugs I noticed in ispell + flyspell after having
returned to them in these last few days:[1]
- As a user, it wasn't clear to me whether to use ispell-word or
  flyspell-auto-correct-word. Should I use one in certain cases and the
  other in other cases? Is their purpose entirely the same? If so, why
  do these two commands defined in different packages, then?
- The ispell and ispell-word UI is custom-made. I think using a generic
  UI like completing-read or even something like transient (just
  spit-balling here) would better serve this purpose, especially when
  spell-checking is one of the first things users coming from other
  programs expect their text editor[2]. The UI should conform with the
  rest of Emacs's facilities IMO.
- The popup window for ispell and ispell-word does not obey
  display-buffer-alist.
- The various *-dictionary user options in ispell confuse users: which
  ones should they modify to achieve a particular end?
- When flyspell-mode is enabled (underlining misspellings), when adding
  a word to the personal dictionary with either flyspell or ispell, the
  current misspelled word is no longer a misspelling but later
  repetitions of this word (just added to the personal dictionary) are
  still underlined but not recognized as misspellings (when you call
  ispell-word it reports that the word is correct). One has to call
  flyspell-buffer to remove these false underlines.
- At least in org-mode buffers[3], the words that flyspell and ispell
  recognize as misspellings can differ because ispell ignores words
  according to ispell-skip-region-alist whereas flyspell offers
  flyspell-generic-check-word-predicate.
- At least in org-mode buffers, flyspell sometimes highlights words in
  comments as misspellings when calling flyspell-correct-word has no
  effect (because it is not a misspelling?).
- Flyspell does not only offers corrections by using the mouse. The only
  way to correct words with the keyboard only is through ispell. (This
  amplifies the confusion described above where ispell and flyspell both
  have their own means of correcting words.) Ideally, flyspell should
  have its own keyboard-centric way of correcting words.

On the other hand, in my many months of using jinx, I have experienced
none of the grips described above.

Footnotes:
[1] Some of these may be because of some mistake or misconfiguration in
     my init.el, but as far as I know, this is the current behavior of
     ispell and flyspell on Emacs master.
[2] Emacs is much more than a mere "text editor," but a text editor is
     one of the buckets Emacs can fill and that perception is what
     shapes new users' expectations, which includes a well-functioning
     and out-of-the-box spell-checker.
[3] I primarily write in org-mode buffers so the observed experience has
     been mostly in those buffers, but this issue might show up in other
     major modes, too.

-- 
Kind regards,
Kristoffer




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 12 Nov 2025 11:04:40 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Nov 12 06:04:40 2025
Received: from localhost ([127.0.0.1]:48802 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vJ8eW-0004cb-2e
	for submit <at> debbugs.gnu.org; Wed, 12 Nov 2025 06:04:40 -0500
Received: from mail-ed1-x532.google.com ([2a00:1450:4864:20::532]:45127)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <arstoffel@HIDDEN>)
 id 1vJ8eT-0004cV-73
 for 79417 <at> debbugs.gnu.org; Wed, 12 Nov 2025 06:04:37 -0500
Received: by mail-ed1-x532.google.com with SMTP id
 4fb4d7f45d1cf-640bd9039fbso1233397a12.2
 for <79417 <at> debbugs.gnu.org>; Wed, 12 Nov 2025 03:04:37 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1762945471; x=1763550271; darn=debbugs.gnu.org;
 h=mime-version:user-agent:message-id:date:references:in-reply-to
 :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to;
 bh=C0e2VzXsFThoROaAUHfc9fpFI4Lt9rRNYlbhoYSjqbo=;
 b=CPY7BFjOh2/j3MrxF3V9YRoj6gjwqOniI5VUhH51ZX30Y6JMzZW2qDnJ7N7Xifd4xw
 heWpydl+XReyn8X0ZUhqKzbLLpSTXtWjmt97whpe8hXs3YXclkfuIxtWZ4rN3uOa+tL6
 zJg8TnkGrmfEzHJYgLqV3KRkXgoxPWoK7mz94fdjTZIBwtt6126l3dPGdJS1vVJVwRaI
 o65N/yeyD3GE4xTOQHclh6WMpGsSWO43Rcj9DKPZ0F5YLf23OVFmNUzyjN9uGNw+XqDd
 SDkskt5ep6JtjnypS3AvAKfHBiUSUHAyMKQtkrCqm+rqRZ64yw1QDWirpFa3aIZEruwR
 8QcQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1762945471; x=1763550271;
 h=mime-version:user-agent:message-id:date:references:in-reply-to
 :subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject
 :date:message-id:reply-to;
 bh=C0e2VzXsFThoROaAUHfc9fpFI4Lt9rRNYlbhoYSjqbo=;
 b=LnaeqRjFSBKarbTmjVsmKQy+OTPOHn1YN/FIqZHrHRa7a6HYVzYCbDCjIt4Swjtmar
 rIa0cufSNp3Aw3RHsSG6+r3+l9jvY8V9xyLgFIKlabyzCmUDgQEpQntRkLHa5ULRjsbg
 B6DYZVmesOCPvx80zTD+s16UalBD3New6XjTfQ/lKsteDg2KdWrSIiZAnu+f2pa3NR52
 7KMUGxCXTLwVA9P+X1mfTdQcg0HY32faZJWt/nlYrwNoK77/huTu/cGg44qfYa1085y3
 1w7kv6bE8HDIFhSLvsjB+nJhtpgimRiOhsllqXtb9CXLHOaatmkTroMtFqQX+aFqQiT6
 jv3g==
X-Forwarded-Encrypted: i=1;
 AJvYcCVeXXPZ9BKfHJwVlpfLwpINT9jAr18MoyxE3NFEM9Q61IZBo6RLryeSKY3xGKX6RZIbYX35Aw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YzLc1AvVPFgG7Xj9FSUomRfms3a0jGVrCByp1A68mtsraQB7yta
 fTjE2QEIH4YoFPpwc8YNkUiIP8m0N7HZpSlYCeCaWNpfFLEH70Gk87+g
X-Gm-Gg: ASbGncunzaGYBluep/q+01nIL0HzcY3H3XDqk2WFNckJLzZ87sJwP1j0FT2e2itx7U+
 h2wRhebeuTQb6P+Gg/f5nKgC+Dsopm8wAXaYlt7rpSaKCIWVx6Z4KjWlQe9Z3/ahK2bmdcnt9+j
 emyDxWUuTHNeATARuNmaH6bx38qlIjLKrZb6RN+NgxFjA0eyhRWocE+nthzT+j/8R1pXnn5fHWn
 MmYiyeCQ5uKU15CL4VBKkEFK5mO8QCfKEz4zT4yb1fizB+iMSR9+98Y14QXEm6KopBwOdd1iwae
 z8En9lqfHksMjB8++cvREmPCWnzOM18RwQmKohreEYBPP4ODifxJ7ZPxN46i58SvNJrdhiDV1Gp
 1Md/cKPZAgpoVaiHb/7YmL+LLR7/7T7PFI7Dh7wz6uinAJesDdc8o
X-Google-Smtp-Source: AGHT+IHWO9Q9GX17K+pHamJDzQNokV8vO74auRmPeKAhTMequ4LPS/h/dPsToo5IeXicTAJX5NTnng==
X-Received: by 2002:a17:907:3ea9:b0:b04:c373:2833 with SMTP id
 a640c23a62f3a-b7331a60b3cmr289787666b.32.1762945470794; 
 Wed, 12 Nov 2025 03:04:30 -0800 (PST)
Received: from ars3 ([2a02:8109:8a95:9a00::31fb])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-b7327a48bc7sm318199366b.71.2025.11.12.03.04.30
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 12 Nov 2025 03:04:30 -0800 (PST)
From: Augusto Stoffel <arstoffel@HIDDEN>
To: Kristoffer Balintona <krisbalintona@HIDDEN>
Subject: Re: bug#79417: How can we improve built-in spell-checking (ispell
 and flyspell)?
In-Reply-To: <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
 (Kristoffer Balintona's message of "Mon, 10 Nov 2025 21:53:33 -0500")
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
 <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
Date: Wed, 12 Nov 2025 12:04:29 +0100
Message-ID: <87ms4r8qbm.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: chad <yandros@HIDDEN>, 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Mon, 10 Nov 2025 at 21:53, Kristoffer Balintona <krisbalintona@HIDDEN> wrote:

> On Mon, Nov 10 2025, chad wrote:
>
>> My understanding is that jinx requires an emacs with dynamic module support
>> included, plus it needs the user to have installed a separate library
>> (libenchant), and it needs to be able to compile the glue file during
>> installation, which means the user needs a functioning dev environment
>> where emacs can find it. Is that still true?
>
> Yes, that's exactly right.

For the record, jit-spell (in ELPA) is similar and doesn't need a
complied module.

Using a subprocess as jit-spell does of course has some overhead, but at
least to me performance is more than adequate.  A limitation of the
ispell pipe communication protocol is that you can't check spelling
without also computing correction suggestions at the same time, and this
makes jit-spell use more CPU _outside_ of Emacs.

So IMO in order to "solve" spell checking in Emacs one has to resign
oneself to linking against some choice of spellchecking library or else
accept the performance penalty of computing corrections eagerly.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 11 Nov 2025 02:53:44 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Nov 10 21:53:44 2025
Received: from localhost ([127.0.0.1]:41996 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vIeVr-0006pm-SU
	for submit <at> debbugs.gnu.org; Mon, 10 Nov 2025 21:53:44 -0500
Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]:48528)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <krisbalintona@HIDDEN>)
 id 1vIeVo-0006pc-Gr
 for 79417 <at> debbugs.gnu.org; Mon, 10 Nov 2025 21:53:41 -0500
Received: by mail-lf1-x12d.google.com with SMTP id
 2adb3069b0e04-5943b62c47dso3320684e87.1
 for <79417 <at> debbugs.gnu.org>; Mon, 10 Nov 2025 18:53:40 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1762829614; x=1763434414; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date
 :mime-version:references:in-reply-to:from:from:to:cc:subject:date
 :message-id:reply-to;
 bh=TsfqRvNUMccucb8Yi8w5b/XyABbaUNcj1VXHwk1iXa4=;
 b=QRXRAH7FGWtR5tZJjXp+2KPgSAl0Qe5RD+k4cVpQM+AQWALdwUoICmjr7nr08HtQgh
 eEciW+fiuLVngyv03QMPJHmDZhj+1B2lzPdpTUJQeTHUQPx2YBSIUWB/A8afjy4O0Di+
 Yg243xm3fD5M/63d0sAlkAo6Z+y8tDYEY4bf4oV1A9I3MQGqYUhpl8uyF+Cjlp45K07I
 cx4KW3poMbIVJjZqTecwS3V2jxVPOL0KcXdKGmtpasgdAUlz67kn2TaEEi23iAZSXl69
 w+pECvY3CRn/KuSRbSIpH6l4auc8Nllea5J/D9udjL+ULG/iNu8tqES3AS/sapGmG4+e
 UwGw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1762829614; x=1763434414;
 h=content-transfer-encoding:cc:to:subject:message-id:date
 :mime-version:references:in-reply-to:from:x-gm-gg:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=TsfqRvNUMccucb8Yi8w5b/XyABbaUNcj1VXHwk1iXa4=;
 b=Fe82yRLlsKtRj9Ip67gw/Z6/QtpgG0MN3//Ei2Pxg7szvnAMN7vWAAECG+btav70RI
 9BGpGbVkjCLXbwJCgTS+3TsKFV6u4Us1db98WXQbqweSPt5Qo0pD/jnR7wpZCIbnGKlK
 S3D1dg3HkBhaopXPk4KAhaVYjFt6NsdsrzjvL9tgKdLLpU+quyHxwio2zIOcLQsxFMf8
 v/hPPIBdXcotzYONhQLBF245smCI++nMek3p3OiuwsBs+cGVdkf8Crsap0rqt8F3xbmC
 aywHJuZqA6Z6nDL4s0iWfcPuz7WNJ4d0dA4cn0bdNb+xc71fUSCTXwAcAxdEkmIRPwW7
 5oSQ==
X-Gm-Message-State: AOJu0YzNVRjAgoydrytk3cX2WLhCVVavVy+fyARBDeJCBHhCZ+62Wtc+
 SkXy/upQEF5UAEExjbO98pvQTEGN5sVYmu/8eHCX3pFh/lAeafaFJ8QLjnuEKcot0uMO1SBgNM6
 I0ujGnQ5go3S9NdF9emBhLJbk5/C5L6g=
X-Gm-Gg: ASbGncuxF7M+7iAKXcsfGS6aeuDuG7dgb6r6JNVBmYAoYlD4w7eW+JX9/7gtrftPoCE
 5Q8a5mQkTduHiJ0aNwcoEZ9G6YirIC7D0oBf3sLJc5FvvweK59xiWNNMnTv2JKHhKIWSFY2IhdC
 RLh56k0r6cLFfq/cEfWpOceJ39EN2BzyPlVXeQNGjPLfmpVOhnW7PAWIVzTwRxRbcfR9ziQwA3C
 v2BupgbC8rorENgbdsjAsMT7n4uB1p6k1WJGQhQV0C8sbzBMEcLUROJfG8ujbM0zOqQkEc=
X-Google-Smtp-Source: AGHT+IEu0hLcx0J9JzerwUNFBVwzyp0liZqxHntrKaAXbFmtcZnLQF0Yt4n9KAnGZIWvkpLTjdMKFj09LuGpr3Uhx58=
X-Received: by 2002:a05:6512:b92:b0:591:c473:5bc7 with SMTP id
 2adb3069b0e04-5945f2065b2mr3324367e87.50.1762829613622; Mon, 10 Nov 2025
 18:53:33 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Mon, 10 Nov 2025 21:53:33 -0500
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Mon, 10 Nov 2025 21:53:33 -0500
From: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
 <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
MIME-Version: 1.0
Date: Mon, 10 Nov 2025 21:53:33 -0500
X-Gm-Features: AWmQ_bk9dp7rXyTsJ2b1agsTOjKuE9i9uOYMQ65bVIuaHaNV1unzsay8TVzKzIM
Message-ID: <CANVbq5mwRFqOe-xfgiWH=GdvDuKyuKfuEmzDiZmycdXe65DAMA@HIDDEN>
Subject: Re: How can we improve built-in spell-checking (ispell and flyspell)?
 (was: bug#79417: 31.0.50; Improve ispell.el documentation)
To: chad <yandros@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Mon, Nov 10 2025, chad wrote:

> On Mon, Nov 10, 2025 at 4:06=E2=80=AFAM Kristoffer Balintona <
> krisbalintona@HIDDEN> wrote:
>
>> And it is my opinion that jinx fulfills what most users would expect
>> from spell-checking out of the box. It is fast, has a UI that integrates
>> well with other Emacs packages[3], requires zero configuration, and is
>> easily configured/extended if desired.
>
>
> My understanding is that jinx requires an emacs with dynamic module suppo=
rt
> included, plus it needs the user to have installed a separate library
> (libenchant), and it needs to be able to compile the glue file during
> installation, which means the user needs a functioning dev environment
> where emacs can find it. Is that still true?

Yes, that's exactly right.

I think my initial remark might've been misleading: I didn't mean to
suggest that jinx is just a better version of ispell. The very fact that
ispell doesn't need anything aside from a supported spell-checking
program is a virtue jinx doesn't have. I only meant to point to the fact
that when users have been in the position to freely choose between jinx
and ispell + flyspell, many of them end up leaning toward jinx because
it "just works" without any fuss.

And my ultimate reason for mentioning jinx was that there's nothing
blocking us from trying to make the built-in Emacs spell-checking so
good that current jinx users can feel at home without jinx. (Like how in
the last ~5 years many users have swapped over to completion frameworks
that leverage the built-in completing-read, e.g., vertico.)

> Are the people recommending it just not suggesting it for systems
> linux Windows or Android, or is someone else distributing pieces that
> bypass those requirements?

If I had to guess, most of those users probably just mention jinx as
=E2=80=9Cthe best option if you can use it.=E2=80=9D And if I had to guess =
again, I=E2=80=99d
say most Emacs users are likely in a position to meet jinx=E2=80=99s techni=
cal
requirements anyway. (But as I hopefully expressed adequately above,
that's besides the point. My actual point is that I think there's
opportunity for us to improve ispell + flyspell such that it better
meets the expectations of users who go to jinx because of a perceived
lack in ispell + flyspell.)

--=20
Kind regards,
Kristoffer




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 11 Nov 2025 01:31:09 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Nov 10 20:31:09 2025
Received: from localhost ([127.0.0.1]:41504 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vIdDx-0003jB-3l
	for submit <at> debbugs.gnu.org; Mon, 10 Nov 2025 20:31:09 -0500
Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]:42200)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <yandros@HIDDEN>) id 1vIdDr-0003ig-PG
 for 79417 <at> debbugs.gnu.org; Mon, 10 Nov 2025 20:31:07 -0500
Received: by mail-lf1-x12f.google.com with SMTP id
 2adb3069b0e04-592f7e50da2so483987e87.0
 for <79417 <at> debbugs.gnu.org>; Mon, 10 Nov 2025 17:31:03 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1762824657; x=1763429457; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=UpvhvUs9I8tGhupC9mb7q3wKE3eHOGK80oeFR2iPHg8=;
 b=iUsyQoYjonnAlPOcHWPN8DZQvrHoeMN+NErcU+fsL+sjWb0DlhfJnQo7mv0PYyGVDQ
 atr+9XvdA4ZU69JzdqWvJqU0KXlV29+XRjPmDIXOjKbC54hpyjG/1eLUgHemXtt6TsFH
 PwEw/fGZnyoskl+Rhs5EeZRpc9o9Tb4ZBaj+wYEEid0awdI/l6WCqbHVNDhaF41i4wyj
 pzpl8Fi40+dA1Q0osXcqXDCIaxX7HMokhd8TeqmrBuTRjtadsJhiuneb7VKHeRRzrpTY
 jTlZiXntjHE61cAfotAIuSzlTbrAkOOgd5wBpEfbnxn/ZYNF9UASu0eB56xxRmbBhdfY
 IE5g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1762824657; x=1763429457;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=UpvhvUs9I8tGhupC9mb7q3wKE3eHOGK80oeFR2iPHg8=;
 b=sFG8jb3j0Vb7JMkvWkJwt+7bb4KQKFXt39WM1lWUsCRNAKuKiJ3JexbfMlmzgMEzFl
 Lp3WF4zO3YPsAILkztc7QSd4wNj8H++qmG/UiZjfnayLoe/BDYaGZH/9oa7GhMhK4P4B
 dWjGCP9QAYtZn7b4Nar2NHwErgBL7qjrSADFKScqo2tIBQWZ9g0ts9Ge6HWZSkV6MYhk
 5jYLvQTUZwmqFI8i1YzmEzwZH6KadFqGz8ALixrfE1ad2VqDPhlouDNOLxoIk2MpdTAv
 faqrvf8KCRioIOInno/26X9s6o+0Yb8rOHwkC3n/vhPybRfawfUkD6g5UxcwyxEm2Rqc
 YhzA==
X-Gm-Message-State: AOJu0YxenCpfoMHrFcFoCrCDJXabsSs7A22Huyowzi0JGvYFkEC7IdWX
 nU5pCSVRSgeiVKTwPgpdVAy+oLfnGT1LiXzaO3ntUrYcdkujEsHoyM8HslxRFbrJ9quNgkNOwCf
 Q2BBf5K960zaybR0hywJZEo1sMUVXLl0=
X-Gm-Gg: ASbGncsZ0F3uN+GDWAY4qV9IPcTLRXt4b9aUx7I55roB5c2tLgd8zNPP6u6YaWFPt5F
 b/s7Drp42voGSekcj7TPzE2Le+BC7T3hnnUOggHIxDGi2ikpl9oBP5T7rsDoui8PjzAELrH6Zgb
 SWC4ngRCJP7IJMkgcJvkB6H/4JheGLUv2xF4VBq4BEGfP6qFWNI2jY4ogF0ax5MfLApQnksl/qg
 Rca7RTq38IHlGfxQCSf61rDKKFy3vHwyi5qT09lwvOtSgU0BBMi8ICSgSsl
X-Google-Smtp-Source: AGHT+IFfLtpHBTAzIx8I7FMIMST+ImqR8oJt9wE+OIuV6dQS2WUTZ9B8vGKHEAZvfJfg3882F3jMUhvQ60H4m8x51Hk=
X-Received: by 2002:a05:6512:15a6:b0:594:752e:8822 with SMTP id
 2adb3069b0e04-594752e89f7mr160681e87.12.1762824656782; Mon, 10 Nov 2025
 17:30:56 -0800 (PST)
MIME-Version: 1.0
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
 <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
In-Reply-To: <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
From: chad <yandros@HIDDEN>
Date: Mon, 10 Nov 2025 20:30:38 -0500
X-Gm-Features: AWmQ_bngW12R9JDbTTNoJTqn5WhW19XsPZCBg6Dje8tpxShY63a5Klpo3FIFors
Message-ID: <CAO2hHWaTq1HjupV62YY1O+-j2iqjk=5UZAwFF4EK59f1Fa0FAw@HIDDEN>
Subject: Re: How can we improve built-in spell-checking (ispell and flyspell)?
 (was: bug#79417: 31.0.50; Improve ispell.el documentation)
To: Kristoffer Balintona <krisbalintona@HIDDEN>
Content-Type: multipart/alternative; boundary="0000000000007809e5064347998f"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--0000000000007809e5064347998f
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Mon, Nov 10, 2025 at 4:06=E2=80=AFAM Kristoffer Balintona <
krisbalintona@HIDDEN> wrote:

> And it is my opinion that jinx fulfills what most users would expect
> from spell-checking out of the box. It is fast, has a UI that integrates
> well with other Emacs packages[3], requires zero configuration, and is
> easily configured/extended if desired.


My understanding is that jinx requires an emacs with dynamic module support
included, plus it needs the user to have installed a separate library
(libenchant), and it needs to be able to compile the glue file during
installation, which means the user needs a functioning dev environment
where emacs can find it. Is that still true? Are the people recommending it
just not suggesting it for systems linux Windows or Android, or is someone
else distributing pieces that bypass those requirements?

Thanks,
~Chad

--0000000000007809e5064347998f
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><br></div><div class=3D"gmail_quote gmail=
_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Mon, Nov 10, 202=
5 at 4:06=E2=80=AFAM Kristoffer Balintona &lt;<a href=3D"mailto:krisbalinto=
na@HIDDEN">krisbalintona@HIDDEN</a>&gt; wrote:</div><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex">
And it is my opinion that jinx fulfills what most users would expect<br>
from spell-checking out of the box. It is fast, has a UI that integrates<br=
>
well with other Emacs packages[3], requires zero configuration, and is<br>
easily configured/extended if desired.</blockquote><div><br></div><div>My u=
nderstanding is that jinx requires an emacs with dynamic module support inc=
luded, plus it needs the user to have installed a separate library (libench=
ant), and it needs to be able to compile the glue file during installation,=
 which means the user needs a functioning dev environment where emacs can f=
ind it. Is that still true? Are the people recommending it just not suggest=
ing it for systems linux Windows or Android, or is someone else distributin=
g pieces that bypass those requirements?=C2=A0</div><div><br></div><div>Tha=
nks,</div><div>~Chad</div><div><br></div></div></div>

--0000000000007809e5064347998f--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 10 Nov 2025 18:55:31 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Nov 10 13:55:31 2025
Received: from localhost ([127.0.0.1]:39329 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vIX34-0002AG-QK
	for submit <at> debbugs.gnu.org; Mon, 10 Nov 2025 13:55:31 -0500
Received: from fout-a7-smtp.messagingengine.com ([103.168.172.150]:51075)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <rudolf@HIDDEN>)
 id 1vIX32-0002A7-29
 for 79417 <at> debbugs.gnu.org; Mon, 10 Nov 2025 13:55:28 -0500
Received: from phl-compute-03.internal (phl-compute-03.internal [10.202.2.43])
 by mailfout.phl.internal (Postfix) with ESMTP id D3880EC20EF;
 Mon, 10 Nov 2025 13:55:22 -0500 (EST)
Received: from phl-mailfrontend-01 ([10.202.2.162])
 by phl-compute-03.internal (MEProxy); Mon, 10 Nov 2025 13:55:22 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adamkovic.org;
 h=cc:cc:content-transfer-encoding:content-type:content-type
 :date:date:from:from:in-reply-to:in-reply-to:message-id
 :mime-version:references:reply-to:subject:subject:to:to; s=fm1;
 t=1762800922; x=1762887322; bh=x67CGXgIdg+rta6sOhXGqi1daTzwsJhm
 G4ZK/P5OUzM=; b=WJ42foVkw5WdVQjnSpJOCMJI/RC1Ht59kSnSlauvOvmGUvun
 7efZZuNSBCYMgBufqgFl0OLX3zxNqa+eavKZ5/cqNZzt5MBwd5L5bK9biuNc5n/C
 V2VDFgUeDUF3JXD5Zz6/xBHvmOMF1uOs7PgvsRCoFDVkBNvIDcZBcIGoDR7u2mdf
 GWKr1yVJYc0N0M+lHo7Wqp4D8PPoy5ZhkSj2O0kJYM2I6O/9t3QwAc1Rl+GVKZgY
 rNo1TJKZ3lF++NoOHiyP4K0QJqKE3pDhy9ld/shSg3JDHMGaizgqP9h5n5UWo6cX
 I5L8l6DYEWhY9XzBt63qNermnm+BpG4GU9BB0g==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:content-type:date:date:feedback-id:feedback-id
 :from:from:in-reply-to:in-reply-to:message-id:mime-version
 :references:reply-to:subject:subject:to:to:x-me-proxy
 :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1762800922; x=
 1762887322; bh=x67CGXgIdg+rta6sOhXGqi1daTzwsJhmG4ZK/P5OUzM=; b=N
 ktL3eXFRx2mxmILx2dUoRsddSeptCoYmCqfephmPgxTOe4YT9Iks+w/l197v6pii
 qT6twfBEqfWSEnJ7SEJyWWKbRQwL2qQyBBVNWStO6zLX9Y9N/AimYAuBRab5RRXM
 ncaC8DT4FyIAASGjC+yYpyq43VyRfQWuEz0nOW4ZioBzqKdRxou7zaaWPPvdnbIP
 YRGdmkJKaZr1oBOa+M7X4CTriQzIJhjMpv8d1r7p7UF4DM/5xaCOhWMUD4ho0Nxo
 LWMEwJXO3oKoW+GuSpbKBxkmdfUSJQOgcZTW1mdk9vxU3ZPTdEp/r9AbtZSmWSGS
 yf9PLb9Giz8Ex4CaDz0SQ==
X-ME-Sender: <xms:GjUSaWeuK-rbaIYBlvbUC02XIek6_TzUsNe89p9biKzZhB7NXFHpvA>
 <xme:GjUSaXrDD756_s_f_PiRyYPw9q_bUwbmazSc9FFUlqm8EAAQpA80DOM-rN0zWU4Qj
 gpOnoou7z2XXXuG9y1oQhUB-szYXZ8EKzMpjlWy1VPz13rw44sPXg>
X-ME-Received: <xmr:GjUSaU7fS0tEISgCHQZdC-_sG5RT6VMA26n-1LcdJoZYCWyZkbaoTWFSjqYnwgkoCrTZVCiz6HmRSXNWQaoOJ7gnVBVkyU4>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdduleeltdelucetufdoteggodetrf
 dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu
 rghilhhouhhtmecufedttdenucenucfjughrpefhvfevufgjfhffkfggtgfgsehtqhertd
 dttdejnecuhfhrohhmpeftuhguohhlfhcutegurghmkhhovhhitgcuoehruhguohhlfhes
 rggurghmkhhovhhitgdrohhrgheqnecuggftrfgrthhtvghrnhepieeuteehffdugffhge
 egveehvedvtdekffelhfeuledugfetgfffledthfdujeegnecuffhomhgrihhnpegruggr
 mhhkohhvihgtrdhorhhgnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrg
 hilhhfrhhomheprhhuugholhhfsegruggrmhhkohhvihgtrdhorhhgpdhnsggprhgtphht
 thhopeefpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehfohhrpggvmhgrtghspg
 dusehlohgtkhihfiholhhfrdhnvghtpdhrtghpthhtohepjeelgedujeesuggvsggsuhhg
 shdrghhnuhdrohhrgh
X-ME-Proxy: <xmx:GjUSadqroKK9CMLs6RPlBTfmroLoU-bw1L5KCO3yuHoZFoRw0xIoig>
 <xmx:GjUSaWiDKHwEcYSPj9QnZveAbjPymYZEMQMsFZN4MaNmHOTwj3y1AQ>
 <xmx:GjUSaXLkwKHG2mnsapSQkInu_3BLMcILkczNZmtwZr1y1C9vLQs1xA>
 <xmx:GjUSaWC6Sg8dMJvEsn82GRMVb-E6gAf_hNsjsAD5PYFNwrRqrJDwKQ>
 <xmx:GjUSaSUYDJ9lpDf2VEquJkYOHJtVKcOaNr3ikX9HYMudSxJ_lNK2v5aM>
Feedback-ID: i88214938:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon,
 10 Nov 2025 13:55:21 -0500 (EST)
From: Rudolf =?utf-8?Q?Adamkovi=C4=8D?= <rudolf@HIDDEN>
To: Lockywolf <for_emacs_1@HIDDEN>, 79417 <at> debbugs.gnu.org
Subject: Re: bug#79417: 31.0.50; Improve ispell.el documentation
In-Reply-To: <m2y0odbtvp.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <m2y0odbtvp.fsf@HIDDEN>
Date: Mon, 10 Nov 2025 19:55:20 +0100
Message-ID: <m2v7jhbtuv.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 79417
Cc: Lockywolf <for_emacs_1@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Rudolf Adamkovi=C4=8D <rudolf@HIDDEN> writes:

> A-ha!  I knew about the difference between Ispell and Flyspell, but I
> have always seen Ispell as a feature, rather than historical baggage.

s/always/never/

--=20
"To the unknown journeyman
 I promise to show courage
 in upholding my vows

 What is an adventure
 if not the commitment
 to keep going?"

--- Protesilaos Stavrou, To the unknown journeyman, 2025

Rudolf Adamkovi=C4=8D <rudolf@HIDDEN> [he/him]
http://adamkovic.org




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 10 Nov 2025 18:55:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Nov 10 13:55:04 2025
Received: from localhost ([127.0.0.1]:39320 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vIX2e-00024L-4d
	for submit <at> debbugs.gnu.org; Mon, 10 Nov 2025 13:55:04 -0500
Received: from fhigh-a2-smtp.messagingengine.com ([103.168.172.153]:47231)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <rudolf@HIDDEN>)
 id 1vIX2a-00023b-Pt
 for 79417 <at> debbugs.gnu.org; Mon, 10 Nov 2025 13:55:01 -0500
Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45])
 by mailfhigh.phl.internal (Postfix) with ESMTP id 15C4C1400199;
 Mon, 10 Nov 2025 13:54:55 -0500 (EST)
Received: from phl-mailfrontend-02 ([10.202.2.163])
 by phl-compute-05.internal (MEProxy); Mon, 10 Nov 2025 13:54:55 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adamkovic.org;
 h=cc:cc:content-transfer-encoding:content-type:content-type
 :date:date:from:from:in-reply-to:in-reply-to:message-id
 :mime-version:references:reply-to:subject:subject:to:to; s=fm1;
 t=1762800895; x=1762887295; bh=okkR/gCRdrCbII7JfkOvwwIJWPMA2sdI
 WFyklHyhFxA=; b=W0kbDMrAo2J1YCDEf8HAovhvnUabQ6LwZDSK6WJjpYOJX2Hy
 4tj/w6lN9OwCtQafPhnxiReY/AJPBLblBpvA8w8dRE4kHnMeDUHs6AXHaqdLSmqw
 FF6DQ1OrpUohqp8uTiwt/NHNrOoU/TfbvypJOQjZJagril2G+0aaiDGmAdS7DM2d
 CeTiRYM/KtDrBYwYUzF3gXCA12ri6owMXKV0qnl6eNyHgFyeVCXRCgZFi0PBhBiI
 vRahUr/U2bR3CKD8UeiB9mg3oloxqQoXEPkivXPBzHyFfoe7sTFyTZeb772cdLUQ
 N13uA54hTyKd18YB0Dtu+BTbImoUxoX9wfEW7g==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:content-type:date:date:feedback-id:feedback-id
 :from:from:in-reply-to:in-reply-to:message-id:mime-version
 :references:reply-to:subject:subject:to:to:x-me-proxy
 :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1762800895; x=
 1762887295; bh=okkR/gCRdrCbII7JfkOvwwIJWPMA2sdIWFyklHyhFxA=; b=r
 2AXmnJLE3ul3yNfa5mU9l2P6GwhZpcfDMQmV2IUyrjTSDQaHqSwW3BNrIWNiaMKX
 7o2ixmUqEy7Y1em1SRXnW81jQvON2QkgQDjsd4cSF23TAzQl+BpMgyj36rg7ONZI
 QDmeM4wQ5241cpioFsbUiMBcM0EnpEVlXApFxM6XycToYunu4tm4GzhZYHPJ9gNK
 n7e03SbIWBGlOYgg1lBOWGLwH0cCkixvRqAWvaE4N7/1vPAheQG1t0FiVXlxtz24
 QKuY9bAdwzCrmhbMZ2YiYB6R4c2N+cmU5PiZJJ7EE3MDOibYPFTuvHMWpC8HRp5l
 IuhSQxxdf2ee88LCfPRzA==
X-ME-Sender: <xms:_jQSaTVCUwRVHVjYv-FbNmz9xtEJjU2zB_EOr47XyhfudzMHnn41pQ>
 <xme:_jQSaTDGnFXEqe1c-0me9SpG9jUxfw6G0e4Y1bk76uNGSBr0QPvFi06_KhOEdatIi
 x7AMO2YDAhKe0OnksnWs7te_GEUyvAPBmEM4RZ9f3YANC35yoUNty-u>
X-ME-Received: <xmr:_jQSacyKjdZ4c99Om8uVHsKhZy2sBOJSHvZEAKODjYCAVKJVaygzY9t7bzfY85nXLFzLJrqlqLjPFvJwqBlBCBEhnVGO24U>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdduleeltdekucetufdoteggodetrf
 dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu
 rghilhhouhhtmecufedttdenucenucfjughrpefhvfevufgjfhffkfggtgfgsehtqhertd
 dttdejnecuhfhrohhmpeftuhguohhlfhcutegurghmkhhovhhitgcuoehruhguohhlfhes
 rggurghmkhhovhhitgdrohhrgheqnecuggftrfgrthhtvghrnhepieeuteehffdugffhge
 egveehvedvtdekffelhfeuledugfetgfffledthfdujeegnecuffhomhgrihhnpegruggr
 mhhkohhvihgtrdhorhhgnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrg
 hilhhfrhhomheprhhuugholhhfsegruggrmhhkohhvihgtrdhorhhgpdhnsggprhgtphht
 thhopeefpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehfohhrpggvmhgrtghspg
 dusehlohgtkhihfiholhhfrdhnvghtpdhrtghpthhtohepjeelgedujeesuggvsggsuhhg
 shdrghhnuhdrohhrgh
X-ME-Proxy: <xmx:_jQSaYDk0UllaE8EYztprSSI7gcCUx1YxZD8BVjkz63QEQKBWlw1ug>
 <xmx:_jQSaRbGChK2e62HHAZmvW0c_xsf43OKQ7rpgJAjg0IZ077Bj4gQUw>
 <xmx:_jQSaYicZxcMy4LGo-cwp1J_02l6e26Umx-OWcRoqjnSNIhvgFNfpA>
 <xmx:_jQSab7f8rjM672HPSRWtX-w7__Uk7kYaSUMo2VLgUSPTeG8ntFh8A>
 <xmx:_zQSaSqTBIRECtunAC0qoxfEnMdxSt9aIslaKieCmdSf-18344Vyucw0>
Feedback-ID: i88214938:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon,
 10 Nov 2025 13:54:53 -0500 (EST)
From: Rudolf =?utf-8?Q?Adamkovi=C4=8D?= <rudolf@HIDDEN>
To: Lockywolf <for_emacs_1@HIDDEN>, 79417 <at> debbugs.gnu.org
Subject: Re: bug#79417: 31.0.50; Improve ispell.el documentation
In-Reply-To: <87jz27rpsb.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
Date: Mon, 10 Nov 2025 19:54:50 +0100
Message-ID: <m2y0odbtvp.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 79417
Cc: Lockywolf <for_emacs_1@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Lockywolf <for_emacs_1@HIDDEN> writes:

> +Emacs spell-checking subsystem is originally designed for purposeful
> +(synchronous) spell-checking, and expects ``writing'' and ``proofing''
> +to be two separate activities.  If you need less rigorous asynchronous
> +spell-checking, @pxref{On-the-Fly Spell-Checking}.

A-ha!  I knew about the difference between Ispell and Flyspell, but I
have always seen Ispell as a feature, rather than historical baggage.
Your patch is a goldmine of useful information.  Practical and readable
but also theoretic and educational in the best possible way.

And, I may not need Jinx, after all. :)

As Eli said, the text might need a bit (not too much) of tightening, and
splitting into (much) smaller patches, but other than that, this is such
a fantastic addition to Emacs, IMO.

Rudy
--=20
"Thinking is a momentary dismissal of irrelevancies."

--- Richard Buckminster Fuller, 1969

Rudolf Adamkovi=C4=8D <rudolf@HIDDEN> [he/him]
http://adamkovic.org




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 10 Nov 2025 09:02:38 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Nov 10 04:02:38 2025
Received: from localhost ([127.0.0.1]:36858 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vINnI-00076w-Kd
	for submit <at> debbugs.gnu.org; Mon, 10 Nov 2025 04:02:38 -0500
Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]:58655)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <krisbalintona@HIDDEN>)
 id 1vINjt-0006sy-Hk
 for 79417 <at> debbugs.gnu.org; Mon, 10 Nov 2025 03:59:07 -0500
Received: by mail-lf1-x133.google.com with SMTP id
 2adb3069b0e04-5942e61f001so2484372e87.1
 for <79417 <at> debbugs.gnu.org>; Mon, 10 Nov 2025 00:59:05 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1762765137; x=1763369937; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=hNuaoXKDqam2AfRoTxno0mRTKN37dQPDRY8JI8aLIBE=;
 b=gM8YlJ3yb6pnqeYW/7c/K8fE4zD7ydxpupfZNsRdJa5ldfaNQq19nKKS6QHkoAl4Rj
 l3yFCHttoOOpljFBNbokcPldVVzKzYhGnsNDyUIfjIlF74+SCbaRiPgbVWPeomcGBZnn
 RAmJEsVZuLFdv9uLjXAlTAOGNKToHIvtmcS6+EGtRR1VKaGDtmB7KW7cL54jMSy99frj
 e0FwrGupS0f4c+qwZIDLZm0TZRIG3TFhGKQ5fwOttsHzhSOPDte9uEd0Q+HbGKlnKzQs
 jw6YT68wOWmDxUCssF1+DWCkhkY19WPIJah+MeZNS3j4Vf+ToY6qG5DeEBhIUS+mi+Ey
 +iKQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1762765137; x=1763369937;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=hNuaoXKDqam2AfRoTxno0mRTKN37dQPDRY8JI8aLIBE=;
 b=iGDbb7dJBEW8HOx8r0wj7YUn5rInFYSOUCx9ril+/912pkaoYr7VDG+cvyYwy8hnKs
 +8TX0de/Uo2baBhvLV1xEB+Zj83bE8ZkRXoVbRMMoTXM21AbC4lejtrMKI+0CyYXiebL
 LIWub6Oc4kBOJhTRkxH1XUTDwON0LJKe/IPG2jklupIPR0pqWw8RnePsyWLllEFxMmP9
 SNkIEAPyxdV6wZA8P61DPTSAg6QMqUKaze5CPb0z8kN9d37Nb9q1YuUUt+Aknse4axTL
 X3Zz6Zrw8hpD4QjI496DSO8eYA8O1FuirUtI6vb8s8RGp1yBUbv0kfpFR7ryR7XnLLAQ
 6amA==
X-Gm-Message-State: AOJu0Yxch7ETBFnfb9zSdgfyg4wQ/6pxeomhacG/pA5XOM+pGKxfWGFs
 0IzMW3TweMWK/iOm7siUlzQad222UrmEmsYSFN/rgLe3LXxOBDzqivS/348+A4f+p7f2/aQi9mo
 MD4Y8BbjpiUgerv4g+9rQMr7IP8E1rGZ9Wohc
X-Gm-Gg: ASbGnctS7liuUEgvEqZI8Vvmow9aCZZP1eXi0eP5gjuZ4M3H3XaTis4Jz0xSTRekUW4
 6YsYDXvRGcOcyZVNG9+D7125gFV4pzEUSyUSU3EE2wg97bInReWgFmkqfx30R8zIHjAbbmhJlAg
 DTxHaCcMMUZetoERdxgHZyadZ2lY5m0ZkSC7jP1FciuyXs1w01M4jeL8Gb/A3buLDghEAW7eVsF
 cPzQRNDLxALMAtdxvWGzZU0qYMOZnRob++E/OacN6jKT2FD4enAFIKL2wxQnd8QIZTPgV4=
X-Google-Smtp-Source: AGHT+IEYPuy4YgX/rsjQ/vPkIeJaBaKnJR6PQqgBjYH5/qErUeV4yi4ZXqq27AIgd14PZje9OC3DU2ZfWutW3DpI4bo=
X-Received: by 2002:a05:6512:3d03:b0:594:292f:bbe9 with SMTP id
 2adb3069b0e04-5945f1b7403mr1805335e87.36.1762765136413; Mon, 10 Nov 2025
 00:58:56 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Mon, 10 Nov 2025 03:58:55 -0500
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Mon, 10 Nov 2025 03:58:55 -0500
From: Kristoffer Balintona <krisbalintona@HIDDEN>
In-Reply-To: <87cy7xhi2k.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
 <86ikhqbfrt.fsf@HIDDEN> <87cy7xhi2k.fsf@HIDDEN>
MIME-Version: 1.0
Date: Mon, 10 Nov 2025 03:58:55 -0500
X-Gm-Features: AWmQ_blAZlzHaRO1H-8N9TkSuhVCqVN3BAQDnmqjy74YxV31_Op95AjEnrpgRlE
Message-ID: <CANVbq5mBD2tH6TA_iUuBj0vFXJx=6Ci1nb4Snn9YyJqXQDFHEA@HIDDEN>
Subject: How can we improve built-in spell-checking (ispell and flyspell)?
 (was: bug#79417: 31.0.50; Improve ispell.el documentation)
To: Lockywolf <for_emacs_1@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: 79417 <at> debbugs.gnu.org, emacs-devel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hello Lockywolf,

Thank you for work on this patch! I am just another Emacs user, but I
would like to chime in to give some feedback on your patch as well as
share my own opinions on the state of spell-checking in Emacs.


Regarding feedback on your patch:

For the most part, I agree with Eli's comments. The various reasons you
had to include specific pieces of information in the manual are, I
think, evidence that the information about ispell is lacking. But like
Eli, I think much of the detailed specifics should be mostly be included
in docstrings and even the ispell file commentary. As I see it, the
Emacs manual is meant to be more like an entry-point or overview of
functionality. So the version we have right now is more-or-less good
enough, I think.

Still: I think most of the information you've put into words should be
included in the form of detailed docstrings. These docstrings will be
visible to users by the typical means: the describe-* commands and
customize-* commands.


Regarding the state of spell-checking in Emacs:

As I understand, a large part of your motivation to assemble this patch
was how convoluted and obtuse ispell is to the newcomer.
You wrote:
> Personally I embarked on the job of implementing ispell.el tests with
> the goal of writing good documentation, because I found the existing
> one insufficient. For years I failed to make ispell.el do what I
> expected a spell-checker module to do.
And I agree. Nearly all my personal learnings about ispell (that weren't
documented at all or were inadequately documented) were included in your
patch.

But I think the solution would not be to document the rough edges of
ispell but to fix/improve them. (Eli somewhat expressed this at points
in his feedback.)

You hit the nail on the head by mentioning how the creation of
third-party packages like jinx[1] and spell-fu[2] --- which completely
reimplement spell-checking in Emacs, as opposed to extending what is
already there --- is proof that users throughout the years have found
the built-in spell-checking lacking.
> As we can see, melpa has several packages essentially duplicating
> ispell.el's (+flyspell) functionality, such as "jinx", or "spell-fu", or
> "flycheck-ispell", largely because people, seemingly, failed to
> understand how to use ispell.el.
These last 2 or 3 years in particular I have noticed that in online
forums like Reddit, users almost only recommend jinx as the
spell-checking package. I almost never hear flyspell recommended over
jinx nowadays in those spaces (where users keep up with new packages),
and I don't recall ever hearing anyone mention ispell...

And it is my opinion that jinx fulfills what most users would expect
from spell-checking out of the box. It is fast, has a UI that integrates
well with other Emacs packages[3], requires zero configuration, and is
easily configured/extended if desired. All users need to know is
jinx-mode and jinx-correct, really. Whatever degree ispell + flyspell
fit that description, I think many new users would say jinx does it
better.[4] (In fact, that we have spell-checking functionality spread
across two packages seems confusing and even unnecessary.) This isn't to
say ispell and flyspell cannot be used in the same ways and for the same
purposes as jinx can, only that jinx appears simpler to weild and more
cleanly written.

These are just my two cents. I would be curious to hear other users of
ispell, flyspell, or jinx chime in, too. I suppose some specific
questions could be:
- How can we improve built-in spell-checking?
- What is lacking from ispell and flyspell?
- What improvements to UI could we take from third-party packages like
  jinx?


Footnotes:
[1] https://github.com/minad/jinx
[2] https://codeberg.org/ideasman42/emacs-spell-fu
[3] As far as I know, with respect to spelling correction, flyspell only
     has a mouse interface. And ispell implements a custom interface
     instead of using completing-read or something like
     read-multiple-choice.
[4] Relevantly, I recently came across this GitHub discussion
     (https://github.com/minad/jinx/discussions/200) where the author of
     ispell's Enchant (the spell checking program) support expressed how
     he's recently discovered jinx and liked it enough that the author
     of jinx should consider replacing the built-in ispell with it.

On Thu, Sep 11 2025, Lockywolf wrote:

> Eli Zaretskii <eliz@HIDDEN> writes:
>
>> Thanks, but this is too massive an addition for it to be accepted
>> as-is.  The "Spelling" node is already 200+ lines long, and your
>> changes add 250 lines more.
>
> Let us adjust it to make it acceptable then!
>
> Personally I embarked on the job of implementing ispell.el tests with
> the goal of writing good documentation, because I found the existing one
> insufficient.  For years I failed to make ispell.el do what I expected
> a spell-checker module to do.
>
> As we can see, melpa has several packages essentially duplicating
> ispell.el's (+flyspell) functionality, such as "jinx", or "spell-fu", or
> "flycheck-ispell", largely because people, seemingly, failed to
> understand how to use ispell.el.
>
>>This is too much for these features,
>> which are relatively minor, as Emacs features go.
>
> While the feature itself is not large, it adds a lot of convenience if
> implemented properly and a lot of frustration if it does not do what is
> natural and expected.  I also think that alleged simplicity of the
> feature is a mis-perception, because human languages vastly exceed
> formal ones in complexity.  Moreover, Emacs is not just used by people
> editing programs, it is also widely used by documentation writers and
> publishers, for whom a customizable and flexible spell-checker is one of
> the first things they are looking for in a text editor.
>
>> Would you agree to make the patch smaller, only mention important
>> features and issues, and describe those as succinctly as possible,
>> leaving the rest to the doc strings of the relevant commands and
>> variables?
>
> I am quite happy to make the patch smaller, as long as it remains being
> easily readable by people opening it while using Emacs for the first
> time.  A spell-checker is such a commonplace feature that users are
> often asking for it on the very first day.
>
>> For example, why do we need to expand the documentation of
>> ispell-kill-ispell beyond what it already says?
>
> Firstly, I don think that there should be a need for a public
> ispell-kill-ispell command, so I would be happy to delete this part
> altogether. It should be called ispell--kill-ispell, and only be used
> internally. But, unfortunately, the user, at the moment, needs to be
> aware of it, because in a very common scenario the notification area is
> full with messages "Ispell process killed" and "Starting new Ispell
> process with ... dictionary". The scenario is the following: the user
> has two buffers open, one editing text in language A, another editing
> text in language B, and both have flyspell enabled.  This is not just
> confusing, it also noticeably slows down buffer switching.  This is
> probably not possible to avoid, because otherwise Emacs would have to
> keep a running spell-checker process per buffer, which is too much, or
> keep a pool of processes for the most recently used buffers, which is
> complicated, but in any case, this is not the only use-case for making
> the user aware of the fact that "some kind of background process is
> running and you might have to kill it manually if something goes wrong".
>
> Of course, it would have been much better if this function could be
> entirely removed from the public interface and the two start/kill
> messages be hidden from *Messages* unless some kind of a debug switch is
> enabled, but doing that is hard, and having one paragraph in the manual
> clariflying the issue seems like a small price to pay.
>
>> And why do we need to
>> describe how and in which directories to install dictionaries --
>> people should either a distro or, if they know what they are doing,
>> install the dictionaries themselves using the documentation provided
>> with the speller;
>
> Because dictionaries are given to the user as completions in the
> M-x change-ispell-dictionary command, which takes them from the
> ispell-dictionary-base-alist variable, which contains dictionaries which
> are not installed. This leads to a very confusing behaviour: the user is
> suggested to use, say, a "british" dictionary, whereas, in fact such
> a dicionary does not exist, and ispell.el generates errors. The
> situation becomes even more confusing, because other engines might
> actually have the "british" dictionary, so setting "british" with
> International Ispell works (because it is in the
> ispell-dictionary-base-alist) while using it fails, but with aspell
> setting the "british" dictionary fails (because there is no such
> dictionary in "aspell dicts") while actually using it (setf
> ispell-dictionary "british" without ispell-change-dictionary) works,
> because aspell is smart enough choose an english dictionary when called
> like "aspell -d british -a".
>
> Dictionary choice is a huge source of confusion, that is why I spend so
> much text explaining it.
>
>>we don't want to track changes in those
>> installations and update our manual each time they change.
>
> We are already doing that with the variable
> ispell-dictionary-base-alist, and the other code to get dictionary lists
> from the backends.  And, of course, it is de-synchronised with the
> upsteam of the spell-checker programs.  In my experience, explaining it
> in the manual with a necessary warning "things may change, examine the
> spell-checker documentation" is better than trying to be overly too
> smart in the code. After all, if the user just gives us the path to the
> correct dictionary, and we have to avoid extracting that info from the
> backends, it reduces the amount of heuristics in our code and makes
> things simpler. The user is doing it just once, and we have to ensure
> and test the work of ispell.el in various environments and different
> circumstances.
>
>> Or why
>> expand the description of local and personal dictionaries so much --
>> does the existing text lack some important information?
>
> Yes. When I was reading it the first time, I thought that
> "ispell-dictionary" is the dictionary shipped by the OS vendor, and the
> "ispell-personal-dictionary" is the dictionary I have to purchase
> elsewhere. For example, ispell-dictionary would be the systemwide
> English, and ispell-personal-dictionary would be the dictionary for
> Russian I could buy from, say, Abbyy or PROMT.
>
> In fact, ispell-personal-dictionary is not even a dictionary, it is a
> wordlist.
>
> It is also not immediately obvious whether it is better to have a
> personal dictionary per language (or per the spell-checking program), or
> the same personal dictionary for all dictionaries (or spell-checking
> programs).
>
> Moreover, the information about "Local Words" as a great alternative to
> a personal dictionary is entirely missing from the manual.
>
>> Same question
>> about selecting dictionaries for non-default languages.
>
> This is very important. Firstly, the information about the "Local
> IspellDict:" keyword is entirely missing from the present manual, even
> though it is a very useful tool.
>
> There is a huge confusion with the local dictionary variable.
>
> When both ispell-dictionary and ispell-local-dictionary are nil, ispell
> would use the so-called "default" dictionary, that is call the
> spell-checker program without the "-d" switch, which is fine in many
> cases.
>
> Now assume your ispell-dictionary is fr_FR, and your
> ispell-local-dictionary is ru_RU, and you call M-x
> ispell-change-dictionary RET nil RET.
>
> You would expect that ispell be called with a "default" dictionary,
> without -d switch, but, in fact, the opposite happens, ispell is called
> with -d fr_FR.
>
> This issue would not have appeared if ispell-dictionary would just
> become buffer-local when set, but this is not the case.
>
> The original design of ispell.el expects this issue to be solved by the
> "Local IspellDict: " keyword most of the time, but the information about
> it is missing from the manual.
>
>> Or why
>> describe the Ispell faces in the manual?
>
> Well, I added it because flyspell-mode changes the ispell.el highlight
> face from default "isearch" to "flyspell-error". This is
> hugely confusing, and I wanted to explain to the readers why this
> happens. And documenting this behaviour for flyspell-mode, I found
> myself referring to ispell-highlight-face, therefore needing to document
> it as well.
>
> If this behaviour is removed, ispell-highlight-face and flyspell-error
> become completely disjoint, this elaboration is unnecessary and can be
> removed.
>
>> Or the complete new section
>> about word-completion using ispell -- is that really so important to
>> warrant so much text?
>
> Yes, it is very important.
>
> At the moment, ispell.el has five dictionary defcustoms:
> ispell-dictionary, ispell-local-dictionary, ispell-personal-dictionary,
> ispell-complete-word-dict, and ispell-alternate-dictionary, and asome of
> them can become buffer-local.
>
> This is VERY confusing for a user, and deserves a thorough explanation.
>
> Completion functionality, while itself being very simple, appears in a
> lot of places: in the ispell menu, in CAPF functions, in
> hippie-expansion, and various third-party packages, such as
> company-mode, various completion frameworks, which are too numerous to
> enumerate.
>
> So, suppose, in the simplest default case, I am editing a file written
> in French, and invoke some completion command: my word is completed in
> Spanish. Bah! I made a mistake, my ispell-complete-word-dict is set to a
> Spanish wordlist. I run (setq-local ispell-complete-word-dict nil), and
> retry completion. Ah, what is going on, my word is completed in English,
> because ispell-alternate-dictionary is pointing to the Webster
> /usr/share/dict/words, which I didn't even know existed.
>
> It is better to be safe than sorry and to tell the user precisely what
> is going on.
>
>> And I'm not sure I understand the need for so much reshuffling of the
>> existing text.  Perhaps if we don't extend existing descriptions so
>> much, the need to move the text around so much will also disappear?
>
> The current narrative of the manual starts from a seldom-expected
> nowadays feature of querying the backend to correct a word. This is not
> what most people expect from a spell-checking tool in 2025. First and
> foremost people expect to have their typos highlighted. Most people
> never even use the corrective feature, preferring to re-write the word
> themselves instead.
>
> However, using (asynchronous) flyspell-mode in Emacs is impossible
> without understanding the logic of synchronous spell-checking of
> ispell.el.
>
> Therefore, I tried to re-structure the narrative of the section in a
> layered way: more advanced features, building on top of simpler
> features, come later.
>
> Hence, the structure is the following:
>
> 1. Set up the engine. This is impossible to avoid, for any of the
> use-cases covered by the section. This section is short.
> 2. Set up the dictionaries. This is extremely confusing, and without
> properly set up dictionaries nothing else works, so it is better to give
> this subsubsection to the user first, while they is not yet tired and
> capable of reading attentively.
> 2a. In fact, the user may already stop here, if they are using some
> other front-end, not flyspell-mode or ispell.el's interactive features.
> 3. Proofreading section describes the actual paradigm of working with
> UNIX spellcheckers as backends. Of course it requires the engine and the
> dictionary to be configured correctly, but does not require
> flyspell-mode, hence comes earlier. It is also quite in handy to the
> users of flyspell, because, even though flyspell-mode has its own
> correction features, those open a GUI menu, which are not that
> convenient to use, so I suspect that most people would still use M-$ to
> open the ispell.el's corrections buffer, so it is better to introduce it
> earlier.
> 4. The Completion section describes a part of ispell.el, but is not as
> important as the Proofreading part, and hence comes later as it is a
> dedicated subsubsection, it can be skipped, and the user can go to the
> flyspell-mode directly.
> 5. Flyspell-mode is the most high-level layer, with asynchronous process
> running, and GUI menus involved, hence comes last.
>
> Now that I am writing it, I am realising that the Prooofreading
> functionality calls the Completion functionality (the "l" key in the
> interactive buffer), but not the other way round. It might be better to
> make the Completion subsubsection to come earlier.
>
>> I also don't like using @subsections that have no nodes: they make the
>> manual harder to navigate.  If we must introduce new subsections,
>> let's make each one of them a separate node.
>
> No problem. New patch attached (nodes added, but faces not yet removed).
> [... 647 lines elided]

-- 
Kind regards,
Kristoffer




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 11 Sep 2025 06:05:59 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Sep 11 02:05:59 2025
Received: from localhost ([127.0.0.1]:41817 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uwaRR-0008Tm-NI
	for submit <at> debbugs.gnu.org; Thu, 11 Sep 2025 02:05:58 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:50732)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uwaRP-0008TO-0K
 for 79417 <at> debbugs.gnu.org; Thu, 11 Sep 2025 02:05:56 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1uwaRJ-00011z-4E; Thu, 11 Sep 2025 02:05:49 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=HE+8U5fjuxVqq+XGcNVaXJpvw91OOvgXexaNoUdfvfQ=; b=Bs3jgfXjpfyu
 LT/Xe3qihMCFF0IF6gsG/WdR6OfzS/uFv1rhZneIbD3cJqdsIYkesg/eLkglCzhFQ0CT6NJsj+yrD
 xYptmqXi+1niAAUV8W1/62xVp24TeXLYAEvXfyA05Xu3jXXAFcbJAwXOLTci1+rC2VrryCJN8rkVW
 blloJS7yzMH4QcH8edarv35V3M0b3lVuSG90gW+EkgC6R9LbrqnUPr09+1WOFlKwBjwfLX40QjyIu
 MIq6N1XUqUQxYJgbc4qnwdcXqqp74I7tAQ2e+JvZzEgO/8eXwyHuTfxOiooSWZ3ocCU1zyiwFm4vh
 xNwHaZ5dN/dxN5FgH1kQ1g==;
Date: Thu, 11 Sep 2025 09:05:13 +0300
Message-Id: <86a531v812.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Lockywolf <for_emacs_1@HIDDEN>
In-Reply-To: <87cy7xhi2k.fsf@HIDDEN> (message from Lockywolf on
 Thu, 11 Sep 2025 09:52:03 +0800)
Subject: Re: bug#79417: 31.0.50; Improve ispell.el documentation
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
 <87cy7xhi2k.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: 79417 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Lockywolf <for_emacs_1@HIDDEN>
> Cc: Lockywolf <for_emacs_1@HIDDEN>,  79417 <at> debbugs.gnu.org
> Date: Thu, 11 Sep 2025 09:52:03 +0800
> 
> > For example, why do we need to expand the documentation of
> > ispell-kill-ispell beyond what it already says?
> 
> Firstly, I don think that there should be a need for a public
> ispell-kill-ispell command, so I would be happy to delete this part
> altogether. It should be called ispell--kill-ispell, and only be used
> internally. But, unfortunately, the user, at the moment, needs to be
> aware of it, because in a very common scenario the notification area is
> full with messages "Ispell process killed" and "Starting new Ispell
> process with ... dictionary". The scenario is the following: the user
> has two buffers open, one editing text in language A, another editing
> text in language B, and both have flyspell enabled.  This is not just
> confusing, it also noticeably slows down buffer switching.  This is
> probably not possible to avoid, because otherwise Emacs would have to
> keep a running spell-checker process per buffer, which is too much, or
> keep a pool of processes for the most recently used buffers, which is
> complicated, but in any case, this is not the only use-case for making
> the user aware of the fact that "some kind of background process is
> running and you might have to kill it manually if something goes wrong".
> 
> Of course, it would have been much better if this function could be
> entirely removed from the public interface and the two start/kill
> messages be hidden from *Messages* unless some kind of a debug switch is
> enabled, but doing that is hard, and having one paragraph in the manual
> clariflying the issue seems like a small price to pay.

If the problem is the messages emitted by ispell-kill-ispell, we could
make it do its job silently when invoked non-interactively.  Would
that solve the problem, and allow us to leave the description of
ispell-kill-ispell in the manual alone?  (We cannot easily remove or
rename what has been an interactive command for so long, but if the
problem is the messages, I don't think removal or renaming is
necessary.)

We could also make ispell-change-dictionary be silent when invoked
non-interactively, although in this case I'd think the message is
useful (so maybe we should have a user option to disable it, for those
who are annoyed).

IOW, this doesn't sound like a documentation problem.

> > And why do we need to
> > describe how and in which directories to install dictionaries --
> > people should either a distro or, if they know what they are doing,
> > install the dictionaries themselves using the documentation provided
> > with the speller; 
> 
> Because dictionaries are given to the user as completions in the
> M-x change-ispell-dictionary command, which takes them from the
> ispell-dictionary-base-alist variable, which contains dictionaries which
> are not installed. This leads to a very confusing behaviour: the user is
> suggested to use, say, a "british" dictionary, whereas, in fact such
> a dicionary does not exist, and ispell.el generates errors.

If that is the problem, let's change ispell-change-dictionary not to
suggest dictionaries that aren't installed, or show something like
"(not installed)" after dictionaries that are not installed.  This is
not a documentation problem, either.

> Dictionary choice is a huge source of confusion, that is why I spend so
> much text explaining it.

If our commands cause confusion, we should fix those commands, not
explain their confusing operation.

> >we don't want to track changes in those
> > installations and update our manual each time they change.
> 
> We are already doing that with the variable
> ispell-dictionary-base-alist, and the other code to get dictionary lists
> from the backends.

With any backend but Ispell, ispell-dictionary-base-alist is filled by
querying the speller.  This is exactly what we should do, and it
doesn't entail stating the results in the manual.  The speller will
always correctly tell Emacs what are the dictionaries, so asking it
doesn't add any maintenance burden for us.  Having the directories in
the manual _is_ a maintenance burden, and I'd like to avoid it.

If we can do something similar with the recent versions of Ispell,
let's do it (in the code).  In any case, concluding from this that we
need to describe in the manual the directories where dictionaries are
installed is IMO wrong.

> And, of course, it is de-synchronised with the
> upsteam of the spell-checker programs.  In my experience, explaining it
> in the manual with a necessary warning "things may change, examine the
> spell-checker documentation" is better than trying to be overly too
> smart in the code. After all, if the user just gives us the path to the
> correct dictionary, and we have to avoid extracting that info from the
> backends, it reduces the amount of heuristics in our code and makes
> things simpler. The user is doing it just once, and we have to ensure
> and test the work of ispell.el in various environments and different
> circumstances.

Users should not need to specify the directories where dictionaries
are installed, they should only specify the name of the dictionary to
use.  The code in ispell.el should be able to find the directory.
AFAIK, with all the backends except Ispell, it already does so; if
there are problems with that, let's fix the code to eliminate those
problems.

> > Or why
> > expand the description of local and personal dictionaries so much --
> > does the existing text lack some important information?
> 
> Yes. When I was reading it the first time, I thought that
> "ispell-dictionary" is the dictionary shipped by the OS vendor, and the
> "ispell-personal-dictionary" is the dictionary I have to purchase
> elsewhere. For example, ispell-dictionary would be the systemwide
> English, and ispell-personal-dictionary would be the dictionary for
> Russian I could buy from, say, Abbyy or PROMT.

Maybe we should just say that the personal dictionary adds the user's
personal words to the standard dictionary.  Would that be sufficient?
We could say that in the doc string of ispell-personal-dictionary.

> In fact, ispell-personal-dictionary is not even a dictionary, it is a
> wordlist.

This is an implementation detail, not really relevant to users.  We
don't (and shouldn't) explain how the standard dictionary is
implemented, so neither should we explain how personal dictionaries
are implemented.

> It is also not immediately obvious whether it is better to have a
> personal dictionary per language (or per the spell-checking program), or
> the same personal dictionary for all dictionaries (or spell-checking
> programs).

The default is spell-checker dependent, AFAIK.  Hunspell, for example,
creates a personal dictionary for each language.  If necessary for
people who customize this option, we can recommend in the doc string
to use separate values for different languages (although this is not
convenient if one changes languages frequently, and thus best left to
the backend).  In any case, it should be enough to document this in
the doc string.

> Moreover, the information about "Local Words" as a great alternative to
> a personal dictionary is entirely missing from the manual.

We could add that, but the description should be much shorter.  All
that's needed is a mention of the local variable and its usage by
ispell.e.

> > Same question
> > about selecting dictionaries for non-default languages.
> 
> This is very important. Firstly, the information about the "Local
> IspellDict:" keyword is entirely missing from the present manual, even
> though it is a very useful tool.

Again, a single sentence should be enough.

> There is a huge confusion with the local dictionary variable.
> 
> When both ispell-dictionary and ispell-local-dictionary are nil, ispell
> would use the so-called "default" dictionary, that is call the
> spell-checker program without the "-d" switch, which is fine in many
> cases.
> 
> Now assume your ispell-dictionary is fr_FR, and your
> ispell-local-dictionary is ru_RU, and you call M-x
> ispell-change-dictionary RET nil RET.

It doesn't make much sense to do this, but again, the place to
document what this special case does is in the doc string, not in the
manual.  FWIW, I spell-check in several languages, but never invoke
ispell-change-dictionary with the argument of nil.

> > Or why
> > describe the Ispell faces in the manual?
> 
> Well, I added it because flyspell-mode changes the ispell.el highlight
> face from default "isearch" to "flyspell-error". This is
> hugely confusing, and I wanted to explain to the readers why this
> happens. And documenting this behaviour for flyspell-mode, I found
> myself referring to ispell-highlight-face, therefore needing to document
> it as well.

I see no reason to have this in the manual.  Not everything that has
relevance to spell-checking must be in the manual: we have other
documentation facilities in Emacs that can and should be used by
someone who studies the spell-checking capabilities.

> If this behaviour is removed, ispell-highlight-face and flyspell-error
> become completely disjoint, this elaboration is unnecessary and can be
> removed.

They can be found by apropos commands and customize-group.  We do
this with most (all?) of the other faces.

> > Or the complete new section
> > about word-completion using ispell -- is that really so important to
> > warrant so much text?
> 
> Yes, it is very important.
> 
> At the moment, ispell.el has five dictionary defcustoms:
> ispell-dictionary, ispell-local-dictionary, ispell-personal-dictionary,
> ispell-complete-word-dict, and ispell-alternate-dictionary, and asome of
> them can become buffer-local.
> 
> This is VERY confusing for a user, and deserves a thorough explanation.

Why is that confusing?  If their doc strings do a poor job, let's
improve those doc strings.

> Completion functionality, while itself being very simple, appears in a
> lot of places: in the ispell menu, in CAPF functions, in
> hippie-expansion, and various third-party packages, such as
> company-mode, various completion frameworks, which are too numerous to
> enumerate.
> 
> So, suppose, in the simplest default case, I am editing a file written
> in French, and invoke some completion command: my word is completed in
> Spanish. Bah! I made a mistake, my ispell-complete-word-dict is set to a
> Spanish wordlist. I run (setq-local ispell-complete-word-dict nil), and
> retry completion. Ah, what is going on, my word is completed in English,
> because ispell-alternate-dictionary is pointing to the Webster
> /usr/share/dict/words, which I didn't even know existed.
> 
> It is better to be safe than sorry and to tell the user precisely what
> is going on.

Let's first see how the related doc strings can be improved, and take
it from there.  I'm not yet convinced we need to dedicate so much text
to word completion.  The completion command(s) (which you didn't name
in the above, btw) should tell in their doc strings which dictionaries
and word lists they use, and in what order.  If they don't, let's
first improve that, instead of putting that burden on the manual.

> > I also don't like using @subsections that have no nodes: they make the
> > manual harder to navigate.  If we must introduce new subsections,
> > let's make each one of them a separate node.
> 
> No problem. New patch attached (nodes added, but faces not yet removed).

I suggest first to discuss an agree on what should and shouldn't be in
the manual, and what should be fixed in other places (code and doc
strings).  Only after we have an agreement, it would make sense to
post a patch according to the agreements.

Thanks.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 11 Sep 2025 01:52:53 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Sep 10 21:52:53 2025
Received: from localhost ([127.0.0.1]:41205 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uwWUT-0006nA-PA
	for submit <at> debbugs.gnu.org; Wed, 10 Sep 2025 21:52:53 -0400
Received: from coconut.lockywolf.net ([213.165.252.157]:37246)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <for_emacs_1@HIDDEN>)
 id 1uwWUE-0006mg-Me
 for 79417 <at> debbugs.gnu.org; Wed, 10 Sep 2025 21:52:44 -0400
Received: from laptop.lockywolf.net (unknown
 [IPv6:2408:824e:d2e:8ed0:3cf7:f217:ceff:d8a4])
 by coconut.lockywolf.net (Postfix) with ESMTPSA id E171E38BF9;
 Thu, 11 Sep 2025 09:52:30 +0800 (CST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lockywolf.net;
 s=2024-10-06; t=1757555553;
 bh=zAjAXO9hHLyGfJRVVhDqfFx5x/OL3pW4pcqZBaY42YI=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date;
 b=AY6b0G9XJ96R62Ayd+QqyqujTTfYIjFltNNRj2IIgvVMuW03h91kU3LZX0S5ZH+O9
 UIPHAmbAVPAVhMXPG16DdYXSwRTnGOCBn0t2YwU2N82/AW8kpbRG4+YLxdM0UY/TTA
 5X7KH3MuPwR9xwDbxNkaww6bWZZp/C6onOPzj0RlxOOZuXKUrGYiARS/YWJMG47m8W
 TC4VjRNLPjHVVAa6WymWZRXOlS7qTvgALT/c7wR6UwOuwCojhn2DbCJPHAXhgoDIrG
 R+hTEMYBGCyE/ok1izAoVnHPFOgUj/Ag3CM8C+DfovpUaeZebwvFFW8odlpU49kgQ1
 ZTI10U0KPUySA==
From: Lockywolf <for_emacs_1@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#79417: 31.0.50; Improve ispell.el documentation
In-Reply-To: <86ikhqbfrt.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN> <86ikhqbfrt.fsf@HIDDEN>
User-Agent: mu4e 1.12.9; emacs 31.0.50
Date: Thu, 11 Sep 2025 09:52:03 +0800
Message-ID: <87cy7xhi2k.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: 79417 <at> debbugs.gnu.org, Lockywolf <for_emacs_1@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: multipart/signed; boundary="==-=-=";
	micalg=pgp-sha256; protocol="application/pgp-signature"

--==-=-=
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

Eli Zaretskii <eliz@HIDDEN> writes:

> Thanks, but this is too massive an addition for it to be accepted
> as-is.  The "Spelling" node is already 200+ lines long, and your
> changes add 250 lines more.

Let us adjust it to make it acceptable then!

Personally I embarked on the job of implementing ispell.el tests with
the goal of writing good documentation, because I found the existing one
insufficient.  For years I failed to make ispell.el do what I expected
a spell-checker module to do.

As we can see, melpa has several packages essentially duplicating
ispell.el's (+flyspell) functionality, such as "jinx", or "spell-fu", or
"flycheck-ispell", largely because people, seemingly, failed to
understand how to use ispell.el.

>This is too much for these features,
> which are relatively minor, as Emacs features go.

While the feature itself is not large, it adds a lot of convenience if
implemented properly and a lot of frustration if it does not do what is
natural and expected.  I also think that alleged simplicity of the
feature is a mis-perception, because human languages vastly exceed
formal ones in complexity.  Moreover, Emacs is not just used by people
editing programs, it is also widely used by documentation writers and
publishers, for whom a customizable and flexible spell-checker is one of
the first things they are looking for in a text editor.

> Would you agree to make the patch smaller, only mention important
> features and issues, and describe those as succinctly as possible,
> leaving the rest to the doc strings of the relevant commands and
> variables?

I am quite happy to make the patch smaller, as long as it remains being
easily readable by people opening it while using Emacs for the first
time.  A spell-checker is such a commonplace feature that users are
often asking for it on the very first day.

> For example, why do we need to expand the documentation of
> ispell-kill-ispell beyond what it already says?

Firstly, I don think that there should be a need for a public
ispell-kill-ispell command, so I would be happy to delete this part
altogether. It should be called ispell--kill-ispell, and only be used
internally. But, unfortunately, the user, at the moment, needs to be
aware of it, because in a very common scenario the notification area is
full with messages "Ispell process killed" and "Starting new Ispell
process with ... dictionary". The scenario is the following: the user
has two buffers open, one editing text in language A, another editing
text in language B, and both have flyspell enabled.  This is not just
confusing, it also noticeably slows down buffer switching.  This is
probably not possible to avoid, because otherwise Emacs would have to
keep a running spell-checker process per buffer, which is too much, or
keep a pool of processes for the most recently used buffers, which is
complicated, but in any case, this is not the only use-case for making
the user aware of the fact that "some kind of background process is
running and you might have to kill it manually if something goes wrong".

Of course, it would have been much better if this function could be
entirely removed from the public interface and the two start/kill
messages be hidden from *Messages* unless some kind of a debug switch is
enabled, but doing that is hard, and having one paragraph in the manual
clariflying the issue seems like a small price to pay.

> And why do we need to
> describe how and in which directories to install dictionaries --
> people should either a distro or, if they know what they are doing,
> install the dictionaries themselves using the documentation provided
> with the speller;=20

Because dictionaries are given to the user as completions in the
M-x change-ispell-dictionary command, which takes them from the
ispell-dictionary-base-alist variable, which contains dictionaries which
are not installed. This leads to a very confusing behaviour: the user is
suggested to use, say, a "british" dictionary, whereas, in fact such
a dicionary does not exist, and ispell.el generates errors. The
situation becomes even more confusing, because other engines might
actually have the "british" dictionary, so setting "british" with
International Ispell works (because it is in the
ispell-dictionary-base-alist) while using it fails, but with aspell
setting the "british" dictionary fails (because there is no such
dictionary in "aspell dicts") while actually using it (setf
ispell-dictionary "british" without ispell-change-dictionary) works,
because aspell is smart enough choose an english dictionary when called
like "aspell -d british -a".

Dictionary choice is a huge source of confusion, that is why I spend so
much text explaining it.

>we don't want to track changes in those
> installations and update our manual each time they change.

We are already doing that with the variable
ispell-dictionary-base-alist, and the other code to get dictionary lists
from the backends.  And, of course, it is de-synchronised with the
upsteam of the spell-checker programs.  In my experience, explaining it
in the manual with a necessary warning "things may change, examine the
spell-checker documentation" is better than trying to be overly too
smart in the code. After all, if the user just gives us the path to the
correct dictionary, and we have to avoid extracting that info from the
backends, it reduces the amount of heuristics in our code and makes
things simpler. The user is doing it just once, and we have to ensure
and test the work of ispell.el in various environments and different
circumstances.

> Or why
> expand the description of local and personal dictionaries so much --
> does the existing text lack some important information?

Yes. When I was reading it the first time, I thought that
"ispell-dictionary" is the dictionary shipped by the OS vendor, and the
"ispell-personal-dictionary" is the dictionary I have to purchase
elsewhere. For example, ispell-dictionary would be the systemwide
English, and ispell-personal-dictionary would be the dictionary for
Russian I could buy from, say, Abbyy or PROMT.

In fact, ispell-personal-dictionary is not even a dictionary, it is a
wordlist.

It is also not immediately obvious whether it is better to have a
personal dictionary per language (or per the spell-checking program), or
the same personal dictionary for all dictionaries (or spell-checking
programs).

Moreover, the information about "Local Words" as a great alternative to
a personal dictionary is entirely missing from the manual.

> Same question
> about selecting dictionaries for non-default languages.

This is very important. Firstly, the information about the "Local
IspellDict:" keyword is entirely missing from the present manual, even
though it is a very useful tool.

There is a huge confusion with the local dictionary variable.

When both ispell-dictionary and ispell-local-dictionary are nil, ispell
would use the so-called "default" dictionary, that is call the
spell-checker program without the "-d" switch, which is fine in many
cases.

Now assume your ispell-dictionary is fr_FR, and your
ispell-local-dictionary is ru_RU, and you call M-x
ispell-change-dictionary RET nil RET.

You would expect that ispell be called with a "default" dictionary,
without -d switch, but, in fact, the opposite happens, ispell is called
with -d fr_FR.

This issue would not have appeared if ispell-dictionary would just
become buffer-local when set, but this is not the case.

The original design of ispell.el expects this issue to be solved by the
"Local IspellDict: " keyword most of the time, but the information about
it is missing from the manual.

> Or why
> describe the Ispell faces in the manual?

Well, I added it because flyspell-mode changes the ispell.el highlight
face from default "isearch" to "flyspell-error". This is
hugely confusing, and I wanted to explain to the readers why this
happens. And documenting this behaviour for flyspell-mode, I found
myself referring to ispell-highlight-face, therefore needing to document
it as well.

If this behaviour is removed, ispell-highlight-face and flyspell-error
become completely disjoint, this elaboration is unnecessary and can be
removed.

> Or the complete new section
> about word-completion using ispell -- is that really so important to
> warrant so much text?

Yes, it is very important.

At the moment, ispell.el has five dictionary defcustoms:
ispell-dictionary, ispell-local-dictionary, ispell-personal-dictionary,
ispell-complete-word-dict, and ispell-alternate-dictionary, and asome of
them can become buffer-local.

This is VERY confusing for a user, and deserves a thorough explanation.

Completion functionality, while itself being very simple, appears in a
lot of places: in the ispell menu, in CAPF functions, in
hippie-expansion, and various third-party packages, such as
company-mode, various completion frameworks, which are too numerous to
enumerate.

So, suppose, in the simplest default case, I am editing a file written
in French, and invoke some completion command: my word is completed in
Spanish. Bah! I made a mistake, my ispell-complete-word-dict is set to a
Spanish wordlist. I run (setq-local ispell-complete-word-dict nil), and
retry completion. Ah, what is going on, my word is completed in English,
because ispell-alternate-dictionary is pointing to the Webster
/usr/share/dict/words, which I didn't even know existed.

It is better to be safe than sorry and to tell the user precisely what
is going on.

> And I'm not sure I understand the need for so much reshuffling of the
> existing text.  Perhaps if we don't extend existing descriptions so
> much, the need to move the text around so much will also disappear?

The current narrative of the manual starts from a seldom-expected
nowadays feature of querying the backend to correct a word. This is not
what most people expect from a spell-checking tool in 2025. First and
foremost people expect to have their typos highlighted. Most people
never even use the corrective feature, preferring to re-write the word
themselves instead.

However, using (asynchronous) flyspell-mode in Emacs is impossible
without understanding the logic of synchronous spell-checking of
ispell.el.

Therefore, I tried to re-structure the narrative of the section in a
layered way: more advanced features, building on top of simpler
features, come later.

Hence, the structure is the following:

1. Set up the engine. This is impossible to avoid, for any of the
use-cases covered by the section. This section is short.
2. Set up the dictionaries. This is extremely confusing, and without
properly set up dictionaries nothing else works, so it is better to give
this subsubsection to the user first, while they is not yet tired and
capable of reading attentively.
2a. In fact, the user may already stop here, if they are using some
other front-end, not flyspell-mode or ispell.el's interactive features.
3. Proofreading section describes the actual paradigm of working with
UNIX spellcheckers as backends. Of course it requires the engine and the
dictionary to be configured correctly, but does not require
flyspell-mode, hence comes earlier. It is also quite in handy to the
users of flyspell, because, even though flyspell-mode has its own
correction features, those open a GUI menu, which are not that
convenient to use, so I suspect that most people would still use M-$ to
open the ispell.el's corrections buffer, so it is better to introduce it
earlier.
4. The Completion section describes a part of ispell.el, but is not as
important as the Proofreading part, and hence comes later as it is a
dedicated subsubsection, it can be skipped, and the user can go to the
flyspell-mode directly.
5. Flyspell-mode is the most high-level layer, with asynchronous process
running, and GUI menus involved, hence comes last.

Now that I am writing it, I am realising that the Prooofreading
functionality calls the Completion functionality (the "l" key in the
interactive buffer), but not the other way round. It might be better to
make the Completion subsubsection to come earlier.

> I also don't like using @subsections that have no nodes: they make the
> manual harder to navigate.  If we must introduce new subsections,
> let's make each one of them a separate node.

No problem. New patch attached (nodes added, but faces not yet removed).


--==-=-=
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iHUEARYIAB0WIQSWBebxCAoqaJP8N/j71sGyD+xtqgUCaMIrWQAKCRD71sGyD+xt
qjHTAQCgJs4/wL+a3wAMDmvPOqsgS/T8wQU/0lG8B4U2aZ3NsQEA3l5TufIEsiFQ
WixzY0sJ1pcDrL1AIj6iq1NotwvEjwc=
=+7pK
-----END PGP SIGNATURE-----
--==-=-=--

--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=0001-Improve-ispell-mode-and-flyspell-mode-documentation.patch

From 59085ac9abb11809cb17ac70aba53d5cda6dd418 Mon Sep 17 00:00:00 2001
From: Lockywolf <for_emacs_1@HIDDEN>
Date: Wed, 10 Sep 2025 10:05:31 +0800
Subject: [PATCH] Improve ispell-mode and flyspell-mode documentation.

* doc/emacs/fixit.texi (Checking and Correcting Spelling):
 1. Fix documentation errors for various ispell-* functions.
 2. Document ispell-minor-mode
 3. Document ispell word completion functionality
 4. Document LocalWords syntax
 5. Expand dictionary selection documentation
---
 doc/emacs/fixit.texi | 473 ++++++++++++++++++++++++++++++++++---------
 1 file changed, 373 insertions(+), 100 deletions(-)

diff --git a/doc/emacs/fixit.texi b/doc/emacs/fixit.texi
index f240057aa69..924075f4a60 100644
--- a/doc/emacs/fixit.texi
+++ b/doc/emacs/fixit.texi
@@ -263,20 +263,224 @@ Spelling
 @xref{Top, Aspell,, aspell, The Aspell Manual}.
 @end ifnottex
 
+Note, however, that this section will only help you fix spelling errors,
+not grammatical or punctuation errors.
+
 @vindex ispell-program-name
+@defvar ispell-program-name
+Choose the default spell-checking program by customizing this variable.
+@end defvar
   If you have only one of the spelling checker programs installed,
 Emacs will find it when you invoke for the first time one of the
 commands described here.  If you have more than one of them installed,
 you can control which one is used by customizing the variable
-@code{ispell-program-name}.
+@code{ispell-program-name} or adding the following line into your init
+file: @code{(setopt ispell-program-name "hunspell")}.
+
+@cindex @code{ispell} program
+@findex ispell-kill-ispell
+@deffn Command ispell-kill-ispell
+Kill the spell-checker subprocess.
+@end deffn
+
+Once started, the spell-checker subprocess continues
+to run, waiting for something to do, so that subsequent spell-checking
+commands complete more quickly.  If you want to get rid of the
+process, use @w{@kbd{M-x ispell-kill-ispell}}.  This is not usually
+necessary, since the process uses no processor time except when you do
+spelling correction, but might come in handy when the process is used
+for the purposes other than interactive spell-checking by externally
+installed packages.
+
+Note that if you use Flyspell-mode for on-the-fly spell-checking
+@pxref{flyspell-mode}, and you frequently switch between buffers using
+different spell-checking dictionaries, the spell-checking program will
+be restarted on each buffer switch, which might be slowing down Emacs if
+creating new processes is expensive on your Operating System.
+
+@node Dictionary Selection
+@subsection Spelling Dictionary Selection
+@cindex spell-checking dictionary
+
+In addition to having the spell checker program installed it is also
+important to have spellchecking dictionaries matching the language and
+orthography of your preferred writing installed system-wide.  You can
+check if a dictionary supporting the language you need to have checked
+is present by examining the contents of the library directories, usually
+printed by the commands in the left column in the following table.  The
+typical values for GNU/Linux are shown in the right column.
+@table @samp
+@item @code{ispell -vv}
+@code{/usr/lib64/ispell}
+@item @code{aspell config}
+@code{/usr/lib64/aspell/}
+@item Hunspell
+@code{/usr/share/hunspell/}
+@item Enchant
+Uses dictionaries from either Aspell or Hunspell.
+@end table
+Dictionaries typically consist of two files, one @code{.aff} file with
+the grammar, and one @code{.hash} or @code{.dict} with the dictionary.
+
+  Spell-checkers look up spelling in two dictionaries: @emph{the dictionary
+installed together with the spell-checker program} (or as a system
+add-on) and your @emph{personal dictionary}, which is usually empty when you
+have not been using spell-checking for a long time.
+
+@cindex spell-checking different languages
+@cindex language for spell-checking
+  Usually, a dictionary used by a spell-checker is for a specific
+language.  The default language is determined from your system's
+environment and locale.  Both the standard dictionary and your personal
+dictionary should be changed if you want to spell-check text in a
+different language.  You can use the @code{ispell-change-dictionary}
+command for that.
+
+@vindex ispell-dictionary
+@vindex ispell-local-dictionary
+@findex ispell-change-dictionary
+@defopt ispell-dictionary
+@defoptx ispell-local-dictionary
+The value of this variables shows the current selected spell-checking
+dictionary.
+@end defopt
+@deffn Command ispell-change-dictionary dictionary &optional globalp
+Change the spell-checking dictionary (language) for the current buffer.
+With a prefix argument change it globally instead.
+@end deffn
+
+  The system-wide dictionary (language) used by the spell-checker is
+chosen by using the command @w{@kbd{M-x ispell-change-dictionary}}.
+When called with a prefix argument or, in the lisp code, with
+@code{(ispell-change-dictionary "en_UK" t)}, it sets the value of the
+dictionary used for all new buffers saved in the variable
+@code{ispell-dictionary}, and without prefix argument it sets it
+buffer-locally, setting the variable @code{ispell-local-dictionary}.
+
+  Alternatively, it is possible to override the buffer-local value for
+the dictionary by adding @code{"Local IspellDict: en_UK"} at the bottom
+of the buffer, within a comment line, and reverting the buffer.  This is
+useful if the same file has to be shared by multiple developers, some of
+which do not use Emacs.  This value is usually passed to the spell
+checker program using the @code{-d} command-line switch.
+
+If both @code{ispell-dictionary} and @code{ispell-local-dictionary} are
+@code{nil}, that is, if a dictionary has never been changed, the system
+will call the spell-checking program without explicitly selecting a
+dictionary (language), and the language to be checked will be determined
+by the spell-checking program itself.  This may be useful if you prefer
+to set the language there, so that all client programs using the same
+backend spell-checking program would have the same default setting.
+
+@cindex spell-checking multi-lingual text
+@findex ispell-hunspell-add-multi-dic
+@deffn Command ispell-hunspell-add-multi-dic
+Define a multi-language dictionary to be used with Hunspell.
+@end deffn
+  Hunspell is special in that it supports spell-checking using several
+different dictionaries in parallel.  To use this feature, invoke the
+@w{@kbd{M-x ispell-hunspell-add-multi-dic}} command before you start
+using Hunspell for a particular combination of dictionaries.  This
+command prompts for the dictionary combination, which should be a
+comma-separated list of language-specific dictionary names, such as
+@samp{en_US,de_DE,ru_RU}.  Thereafter, you can spell-check text which
+mixes these languages without changing the dictionaries each time.
+(Caveat: when several languages use the same script, it is possible that
+a word that is mis-spelled in one language is found as a valid spelling
+in the dictionary of another language; in that case, the mis-spelled
+word might be missed.)
+
+For example, you can add the following to your Emacs init file:
+@lisp
+(use-package ispell
+   ;; uses (setopt ispell-set-spellchecker-params)
+  (setopt ispell-program-name "hunspell")
+  (ispell-hunspell-add-multi-dic "en_GB-ise,russian_aot_yo")
+  (ispell-change-dictionary "en_GB-ise,russian_aot_yo" t))
+@end lisp
+
+@vindex ispell-personal-dictionary
+@defvar ispell-personal-dictionary
+The value of this variable is either the name or the full path to the
+personal dictionary passed to the spell-checking program using the
+@code{-p} command-line switch.
+@end defvar
+
+  A ``personal dictionary'' is the file where you can add your own words
+to, for example, account for imperfections of the system-wide dictionary
+or to avoid less known proper nouns being marked as misspelled.  Your
+personal dictionary is specified by the variable
+@code{ispell-personal-dictionary}.  If that is @code{nil}, the spelling
+program looks for a personal dictionary in a default location, which is
+specific to each spell-checker.  In particular Aspell will save the
+personal dictionary in @code{~/.aspell.<language_name>.pws}, Ispell uses
+@code{~/.ispell_<language-name>}, but it will also pick up a file with
+the same name if it is present in the current directory, so check the
+manual to your spell-checking program.  A directory-local personal
+dictionary may happen to be useful for the case when you are
+contributing to a project which uses many domain-specific words which
+you might normally consider containing typos.
+
+@cindex adding spell-checking exceptions
+@cindex spell-checking exceptions
+@anchor{spell-checking local words}
+As opposed to defining a personal dictionary, which would be decoupled
+from the file being checked, sometimes it is advantageous to keep
+spelling exceptions stored in the same file, especially if the syntax
+used in the file allows that.  File-local exceptions can be added
+interactively when using one of the proofreading commands
+(@pxref{Proofreading}), or manually by writing exceptions at the bottom
+of the file following the keyword @code{"LocalWords: "}.  This allows
+preserving the list of exceptions when sending the file over electronic
+mail to your collaborators.
+
+It is also possible to add exceptions for the duration of the running
+Emacs session, using the interactive proofreading interface
+(@pxref{Proofreading}).  These words will be lost after Emacs is
+restarted, so you are free to experiment with spelling exceptions
+without the fear that a careless addition might end up in a missed typo.
+
+@node Proofreading
+@subsection Synchronous Spell-Checking (Proofreading)
+@cindex proofreading
+@cindex spell-checking (synchronous)
+@anchor{Proofreading}
+
+Emacs spell-checking subsystem is originally designed for purposeful
+(synchronous) spell-checking, and expects ``writing'' and ``proofing''
+to be two separate activities.  If you need less rigorous asynchronous
+spell-checking, @pxref{On-the-Fly Spell-Checking}.
+
+Proofreading in Emacs is usually broken into ``sessions'', which consist
+of selecting a piece of text in one way or another (for example, a
+region or a whole buffer) and feeding it all (sometimes de-formatted
+inside Emacs) to the spell-checking program, prompting the user for
+an action when a typo is discovered.
+
+Throughout the spelling session, the prompted word in question will be
+highlighted using the @code{ispell-highlight-face}, which can be
+customized.
+
+@deffn Face ispell-highlight-face
+@vindex ispell-highlight-face
+@anchor{ispell-highlight-face}
+Face to use for highlighting spelling mistakes as identified by
+@code{ispell-word} and similar functions.
+@end deffn
+
+@subsubsection Calling the Spell-Checker
 
 @table @kbd
 @item M-$
+@itemx M-x @code{ispell-word}
+@anchor{ispell-word}
 Check and correct spelling of the word at point (@code{ispell-word}).
 If the region is active, do it for all words in the region instead.
+(This is the most frequently used command.)
 @item C-u M-$
+@itemx M-x @code{ispell-continue}
 If a previous spelling operation was interrupted, continue that
-operation (@code{ispell-continue}).
+operation.
 @item M-x ispell
 Check and correct spelling of all words in the buffer.  If the region
 is active, do it for all words in the region instead.
@@ -286,25 +490,18 @@ Spelling
 Check and correct spelling in the region.
 @item M-x ispell-message
 Check and correct spelling in a draft mail message, excluding cited
-material.
+material, header fields (@code{To:, From:, Cc:}).
 @item M-x ispell-comments-and-strings
 Check and correct spelling of comments and strings in the buffer or region.
 @item M-x ispell-comment-or-string-at-point
 Check the comment or string at point.
-@item M-x ispell-change-dictionary @key{RET} @var{dict} @key{RET}
-Restart the spell-checker process, using @var{dict} as the dictionary.
-@item M-x ispell-kill-ispell
-Kill the spell-checker subprocess.
-@item M-@key{TAB}
-@itemx @key{ESC} @key{TAB}
-@itemx C-M-i
-Complete the word before point based on the spelling dictionary and
-other completion sources (@code{completion-at-point}).
-@item M-x flyspell-mode
-Enable Flyspell mode, which highlights all misspelled words.
-@item M-x flyspell-prog-mode
-Enable Flyspell mode for comments and strings only.
 @end table
+@defvar ispell-check-comments
+@vindex ispell-check-comments
+Adjust the aforementioned commands' behaviour in modes based on
+@code{text-mode}, but using a lot of structured markup, such as
+@code{org-mode}.
+@end defvar
 
 @kindex M-$
 @findex ispell-word
@@ -325,18 +522,30 @@ Spelling
 @findex ispell-comments-and-strings
 @findex ispell-comment-or-string-at-point
 @cindex spell-checking the active region
-  Similarly, the command @kbd{M-x ispell} performs spell-checking in
-the region if one is active, or in the entire buffer otherwise.  The
+  Similarly, the command @kbd{M-x ispell} performs spell-checking in the
+region if one is active, or in the entire buffer otherwise.  The
 commands @w{@kbd{M-x ispell-buffer}} and @w{@kbd{M-x ispell-region}}
 explicitly perform spell-checking on the entire buffer or the region
 respectively.  To check spelling in an email message you are writing,
 use @w{@kbd{M-x ispell-message}}; that command checks the whole buffer,
-except for material that is indented or appears to be cited from other
-messages.  @xref{Sending Mail}.  When dealing with source code, you
+except for material that is indented, appears to be cited from other
+messages, or belongs to the email message formal syntax (@code{To:,
+From:, Cc:}).  @xref{Sending Mail}.  When dealing with source code, you
 can use @kbd{M-x ispell-comments-and-strings} or @w{@kbd{M-x
 ispell-comment-or-string-at-point}} to check only comments or string
 literals.
 
+  By default in modes based on @code{text-mode}, the aforementioned
+commands will perform spell-checking on all of the text, even if is
+commented-out.  Sometimes, however, you might want to comment-out pieces
+of structural markup, such as @code{org-mode}'s tags, which might not be
+proper words, but due to being commented-out are indistinguishable from
+normal comment text.  To prevent checking of comments in text modes, set
+@code{ispell-check-comments} to @code{nil}.  Setting it to
+@code{'exclusive} will make the spell-checker check @emph{only} comments.
+
+@subsubsection Correcting Spelling Mistakes
+@cindex spell-checking (correcting mistakes)
   When one of these commands encounters what appears to be an
 incorrect word, it asks you what to do.  It usually displays a list of
 numbered @dfn{near-misses}---words that are close to the incorrect word.
@@ -355,7 +564,8 @@ Spelling
 
 @item r @var{new} @key{RET}
 Replace the word, just this time, with @var{new}.  (The replacement
-string will be rescanned for more spelling errors.)
+string will be rescanned for more spelling errors, thus marking other
+of the occurrences of the same spelling as correct.)
 
 @item R @var{new} @key{RET}
 Replace the word with @var{new}, and do a @code{query-replace} so you
@@ -368,11 +578,13 @@ Spelling
 
 @item A
 Accept the incorrect word---treat it as correct, but only in this
-editing session and for this buffer.
+file. (This adds @code{LocalWords: } syntax to the file footer
+(@pxref{spell-checking local words}).)
 
 @item i
-Insert this word in your personal dictionary file so that it will be
-considered correct from now on, even in future sessions.
+Insert this word in your personal dictionary file (the spell-checking
+program does the insertion) so that it will be considered correct from
+now on, even in future sessions and even outside Emacs.
 
 @item m
 Like @kbd{i}, but you can also specify dictionary completion
@@ -383,10 +595,10 @@ Spelling
 file.
 
 @item l @var{word} @key{RET}
-Look in the dictionary for words that match @var{word}.  These words
-become the new list of near-misses; you can select one of them as
-the replacement by typing a digit.  You can use @samp{*} in @var{word} as a
-wildcard.
+Look up the words that match @var{word} in the completion dictionary
+(@pxref{plain-text completion}).  These words become the new list of
+near-misses; you can select one of them as the replacement by typing a
+digit.  You can use @samp{*} in @var{word} as a wildcard.
 
 @item C-g
 @itemx X
@@ -416,6 +628,52 @@ Spelling
 
 @item ?
 Show the list of options.
+@end table
+
+@node Plain-Text Completion
+@subsection Plain-Text Word Completion
+@cindex completion (plain-text)
+@cindex completion (words)
+@cindex word completion
+@anchor{plain-text completion}
+Emacs also supports words completion based on a simple plain-text list
+of words separated by newlines, with no support for morphology.  Despite
+being quite primitive, this mechanism is often the only way of
+assistance a text editor can provide for the user writing a text without
+spending a lot of computational resources on syntactic and semantic
+analysis of the text.
+
+@vindex ispell-complete-word-dict
+@defvar ispell-complete-word-dict
+@defvarx ispell-alternate-dictionary
+  Primary and fallback dictionary for plain-text completion.
+@end defvar
+
+  A separate (from @code{ispell-dictionary} and
+@code{ispell-local-dictionary}) dictionary is used for plain-text word
+completion.  The variable @code{ispell-complete-word-dict} specifies the
+file name of this dictionary.  The completion dictionary must be
+different because it cannot use the information about roots and affixes
+of the words, which spell-checking uses to detect variations of words.
+For some languages, there is a spell-checking dictionary but no word
+completion dictionary.  The variable @code{ispell-alternate-dictionary}
+serves the same purpose, but points to the system-wide dictionary, which
+is usually pre-installed by your Operating System vendor.  On GNU/Linux
+this is often a wordlist extracted from the Webster dictionary (with
+definitions removed), shipped with some older editions of UNIX,
+installed at @code{/usr/share/dict/words}.  The ``GNU Miscfiles''
+project provides a (relatively limited) sample of such a wordlist if
+necessary.
+
+@table @kbd
+@item M-@key{TAB}
+@itemx @key{ESC} @key{TAB}
+@itemx C-M-i
+@itemx @kbd{Tools -> Spell Checking -> Complete Word}
+@itemx @kbd{Tools -> Spell Checking -> Complete Word Fragment}
+Complete the word before point based on the spelling dictionary and
+other completion sources (@code{completion-at-point},
+@code{ispell-complete-word}, @code{ispell-complete-word-interior-frag}).
 @end table
 
   Use the command @kbd{M-@key{TAB}} (@code{completion-at-point}) to
@@ -424,68 +682,25 @@ Spelling
 window manager intercepts @kbd{M-@key{TAB}}, type @w{@kbd{@key{ESC}
 @key{TAB}}} or @kbd{C-M-i}.)
 
-@cindex @code{ispell} program
-@findex ispell-kill-ispell
-  Once started, the spell-checker subprocess continues
-to run, waiting for something to do, so that subsequent spell-checking
-commands complete more quickly.  If you want to get rid of the
-process, use @w{@kbd{M-x ispell-kill-ispell}}.  This is not usually
-necessary, since the process uses no processor time except when you do
-spelling correction.
-
-@vindex ispell-dictionary
-@vindex ispell-local-dictionary
-@vindex ispell-personal-dictionary
-@findex ispell-change-dictionary
-  Spell-checkers look up spelling in two dictionaries:
-the standard dictionary and your personal dictionary.  The standard
-dictionary is specified by the variable @code{ispell-local-dictionary}
-or, if that is @code{nil}, by the variable @code{ispell-dictionary}.
-If both are @code{nil}, the spelling program's default dictionary is
-used.  The command @w{@kbd{M-x ispell-change-dictionary}} sets the
-standard dictionary for the buffer and then restarts the subprocess,
-so that it will use a different standard dictionary.  Your personal
-dictionary is specified by the variable
-@code{ispell-personal-dictionary}.  If that is @code{nil}, the
-spelling program looks for a personal dictionary in a default
-location, which is specific to each spell-checker.
-
-@cindex spell-checking different languages
-@cindex language for spell-checking
-  Usually, a dictionary used by a spell-checker is for a specific
-language.  The default language is determined from your system's
-environment and locale.  Both the standard dictionary and your personal
-dictionary should be changed if you want to spell-check text in a
-different language.  You can use the @code{ispell-change-dictionary}
-command for that.
-
-@cindex spell-checking multi-lingual text
-@findex ispell-hunspell-add-multi-dic
-  Hunspell is special in that it supports spell-checking using several
-different dictionaries in parallel.  To use this feature, invoke the
-@kbd{M-x ispell-hunspell-add-multi-dic} command before you start using
-Hunspell for a particular combination of dictionaries.  This command
-prompts for the dictionary combination, which should be a
-comma-separated list of language-specific dictionary names, such as
-@samp{en_US,de_DE,ru_RU}.  Thereafter, you can spell-check text which
-mixes these languages without changing the dictionaries each time.
-(Caveat: when several languages use the same script, it is possible that
-a word that is mis-spelled in one language is found as a valid spelling
-in the dictionary of another language; in that case, the mis-spelled
-word might be missed.)
-
-@vindex ispell-complete-word-dict
-  A separate dictionary is used for word completion.  The variable
-@code{ispell-complete-word-dict} specifies the file name of this
-dictionary.  The completion dictionary must be different because it
-cannot use the information about roots and affixes of the words, which
-spell-checking uses to detect variations of words.  For some
-languages, there is a spell-checking dictionary but no word completion
-dictionary.
+@node Asynchronous Spell-Checking
+@subsection Asynchronous (On-the-Fly) Spell-Checking
+@cindex on-the-fly spell-checking
+@cindex spell-checking (on-the-fly)
+@anchor{On-the-Fly Spell-Checking}
 
 @cindex Flyspell mode
 @cindex mode, Flyspell
 @findex flyspell-mode
+@anchor{flyspell-mode}
+@table @kbd
+@item M-x flyspell-mode
+Enable Flyspell mode, which highlights all misspelled words.  (Most
+useful in modes based on @code{text-mode}.)
+
+Note that @code{flyspell-mode}, when enabled, will change the value of
+@code{ispell-highlight-face} (@pxref{ispell-highlight-face}).
+@end table
+
   Flyspell mode is a minor mode that performs automatic spell-checking
 of the text you type as you type it.  When it finds a word that it
 does not recognize, it highlights that word.  Type @w{@kbd{M-x
@@ -493,31 +708,89 @@ Spelling
 enable Flyspell mode in all text mode buffers, add
 @code{flyspell-mode} to @code{text-mode-hook}.  @xref{Hooks}.  Note
 that, as Flyspell mode needs to check each word across which you move,
-it will slow down cursor motion and scrolling commands.  It also
-doesn't automatically check the text you didn't type or move across;
-use @code{flyspell-region} or @code{flyspell-buffer} for that.
+it will slow down cursor motion and scrolling commands.
 
 @vindex flyspell-check-changes
-  Normally, Flyspell mode highlights misspelled words that you typed or
-modified, but also words you move across without changing them.  But if
-you customize the variable @code{flyspell-check-changes} to a
+@defvar flyspell-check-changes
+Enable spell-checking words you move across.
+@end defvar
+@deffn Face flyspell-error
+@deffnx Face flyspell-duplicate
+@vindex flyspell-error
+@vindex flyspell-duplicate
+These two faces define how the spelling mistake will be highlighted
+by @code{flyspell-mode}, the first being used for highlighting first
+occurrences of errors, and the second used for all subsequent identical
+misspellings.  These will override @code{ispell-highlight-face}.
+@end deffn
+@deffn Command flyspell-region
+@deffnx Command flyspell-buffer
+Highlight spelling mistakes in a region or in a buffer.
+@end deffn
+  Normally, Flyspell mode highlights both misspelled words that you
+typed or modified, and also words you move across without changing them.
+But if you customize the variable @code{flyspell-check-changes} to a
 non-@code{nil} value, Flyspell mode will check only the words you typed
-or edited in some way.
+or edited in some way. It @emph{doesn't automatically check the text you
+didn't type or move across}; use @code{flyspell-region} or
+@code{flyspell-buffer} for that.
+
 
 @findex flyspell-correct-word
-@findex flyspell-auto-correct-word
 @findex flyspell-correct-word-before-point
+@findex flyspell-auto-correct-word
+@table @kbd
+@item @kbd{mouse-2}
+@itemx @code{(flyspell-correct-word)}
+Display a menu of possible correction using mouse.
+@item @kbd{C-c $}
+@itemx @code{(flyspell-correct-word-before-point)}
+Display a menu of possible corrections using keyboard.
+@item @kbd{M-@key{TAB}}
+@itemx @kbd{C-M-i}
+@itemx @kbd{@key{ESC} @key{TAB}}
+@itemx @kbd{C-.}
+@itemx (@code{flyspell-auto-correct-word})
+Automatically correct word before point.
+@end table
   When Flyspell mode highlights a word as misspelled, you can click on
 it with @kbd{mouse-2} (@code{flyspell-correct-word}) to display a menu
 of possible corrections and actions.  If you want this menu on
-@kbd{mouse-3} instead, enable @code{context-menu-mode}.  In addition,
-@kbd{C-.} or @kbd{@key{ESC} @key{TAB}} (@code{flyspell-auto-correct-word})
-will propose various successive corrections for the word at point, and
-@w{@kbd{C-c $}} (@code{flyspell-correct-word-before-point}) will pop
-up a menu of possible corrections.  Of course, you can always correct
-the misspelled word by editing it manually in any way you like.
+@kbd{mouse-3} instead, enable @code{context-menu-mode}.  Note, however,
+that @code{flyspell-mode} needs to be enable @emph{after}
+@code{context-menu-mode}, because it will @emph{redefine} the context
+menu already installed there by other modes.  In addition, @kbd{C-.} or
+@kbd{@key{ESC} @key{TAB}} (@code{flyspell-auto-correct-word}) will
+propose various successive corrections for the word at point, and
+@w{@kbd{C-c $}} (@code{flyspell-correct-word-before-point}) will pop up
+a menu of possible corrections.  Of course, you can always correct the
+misspelled word by editing it manually in any way you like, or use
+@w{@kbd{M-$}} @pxref{ispell-word}.
+
+@cindex Ispell Minor Mode
+@cindex mode, Ispell Minor
+@anchor{ispell-minor-mode}
+@findex ispell-minor-mode
+@table @kbd
+@item M-x ispell-minor-mode
+Enable spell-checking of the last typed word only.
+@end table
+
+If @code{flyspell-mode} proves to be too burdensome for your computer,
+or if it is producing too many false positives and visually clutters
+your display, @code{ispell-minor-mode} is a much more lightweight
+alternative, which only checks the last word as you are typing it, and
+shows a brief message in the echo area.
 
+@cindex Flyspell Prog mode
+@cindex mode, Flyspell Prog
+@anchor{flyspell-prog-mode}
 @findex flyspell-prog-mode
+@table @kbd
+@item M-x flyspell-prog-mode
+Enable Flyspell mode for comments and strings only. (Most useful for
+modes based on @code{prog-mode}.)
+@end table
   Flyspell Prog mode works just like ordinary Flyspell mode, except
 that it only checks words in comments and string constants.  This
 feature is useful for editing programs.  Type @w{@kbd{M-x
-- 
2.46.4


--=-=-=
Content-Type: text/plain


> May I suggest that, instead of posting a jumbo patch, you post a list
> of problems you see with important details and aspects of
> spell-checking, as they are currently documented (or not documented)
> in the manual, and we could then discuss these one by one and decide
> whether and how each one of them should be fixed?  If nothing else, it
> will allow us to discuss the problems first, rather than start from a
> full-blown solution.

I never thought about this patch as "jumbo". As you said, it's just 250
lines, less than a single function of ispell.el (ispell-command-loop is
279 lines, ispell-region is 153 lines), and is less than 5% of
ispell.el+flyspell.el, which are 4345+2411=6756 lines long (5096 without
comments and empty lines).

After all, the whole documentation to Elisp ratio for Emacs is

find lisp -iname '*.el' -exec cat {} + | \
  grep --binary-files=text -v '^;' | \
  grep --binary-files=text -v '^$' | wc -l
1671287

find doc -iname '*.texi' -exec cat {} + | \
  grep --binary-files=text -v '^%' |  \
  grep --binary-files=text -v '^$' | wc -l
354929

echo '354929/1671287' | bc -l
.21

So, roughly speaking ispell.el's documentation is 4 times terser than
Emacs' on average.

Even if you add all of the C code (which is much sparser documented)
without removing comments:

find src lisp \( -iname '*.el' -or -iname '*.c' \) -exec cat {} + | \
  grep --binary-files=text -v '^;' | \
  grep --binary-files=text -v '^$' | wc -l
2110316

echo '354929/2110316' | bc -l
.16

This is still three times more elaborate and detailed than the spelling
documentation in fixit.texi


-- 
Your sincerely,
Vladimir Nikishkin (MiEr, lockywolf)
(Laptop)

--=-=-=--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 10 Sep 2025 13:26:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Sep 10 09:26:17 2025
Received: from localhost ([127.0.0.1]:37379 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uwKq1-00083H-4E
	for submit <at> debbugs.gnu.org; Wed, 10 Sep 2025 09:26:17 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:46806)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uwKpx-00082x-9D
 for 79417 <at> debbugs.gnu.org; Wed, 10 Sep 2025 09:26:13 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1uwKpr-0006MD-ES; Wed, 10 Sep 2025 09:26:07 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=Pz0LdGg51BymK+PeO3ZO8HQw80LcNnWCv8ytcsfAo9Y=; b=l0jfwfxBkmfK
 PczwZcNV+LgNDZ5r2HH6iISnTkn4LxkQaraA0T2R1x9Foui4CrA02hUFd8eojNGpBOqKfMAWmhRHw
 dNAX4vM8wuKRyI3iSMmPJLczWwaXWYXCXWXAUgIDUtCALCXsL6ZXSF8UlirB3OwBm+deDRaJILYkB
 h5yotCYGeouWaPNlrwxZUJZWB9hGBtRXS2QXyL9HZ328zq/YaCHopZSkN9vHdphiJJOUcI8rZVyDj
 +9CYRpC+KzLk7GjIAsmMsg2jyaaE+cPVenKHF1yc+LLLGjxSw63dCrm/NjbZK2Nv/vW708qli16H2
 mVkrZpFW2QZ2/uNXzmGf0Q==;
Date: Wed, 10 Sep 2025 16:25:58 +0300
Message-Id: <86ikhqbfrt.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Lockywolf <for_emacs_1@HIDDEN>
In-Reply-To: <87jz27rpsb.fsf@HIDDEN> (message from Lockywolf on
 Wed, 10 Sep 2025 10:43:00 +0800)
Subject: Re: bug#79417: 31.0.50; Improve ispell.el documentation
References: <87ecsft5qu.fsf@HIDDEN>
 <87jz27rpsb.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79417
Cc: 79417 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Cc: Lockywolf <for_emacs_1@HIDDEN>
> From: Lockywolf <for_emacs_1@HIDDEN>
> Date: Wed, 10 Sep 2025 10:43:00 +0800
> 
> Apologies, the previous patch got mangled, please see the patch attached
> to this message.

Thanks, but this is too massive an addition for it to be accepted
as-is.  The "Spelling" node is already 200+ lines long, and your
changes add 250 lines more.  This is too much for these features,
which are relatively minor, as Emacs features go.

Would you agree to make the patch smaller, only mention important
features and issues, and describe those as succinctly as possible,
leaving the rest to the doc strings of the relevant commands and
variables?  For example, why do we need to expand the documentation of
ispell-kill-ispell beyond what it already says?  And why do we need to
describe how and in which directories to install dictionaries --
people should either a distro or, if they know what they are doing,
install the dictionaries themselves using the documentation provided
with the speller; we don't want to track changes in those
installations and update our manual each time they change.  Or why
expand the description of local and personal dictionaries so much --
does the existing text lack some important information?  Same question
about selecting dictionaries for non-default languages.  Or why
describe the Ispell faces in the manual?  Or the complete new section
about word-completion using ispell -- is that really so important to
warrant so much text?

And I'm not sure I understand the need for so much reshuffling of the
existing text.  Perhaps if we don't extend existing descriptions so
much, the need to move the text around so much will also disappear?

I also don't like using @subsections that have no nodes: they make the
manual harder to navigate.  If we must introduce new subsections,
let's make each one of them a separate node.

May I suggest that, instead of posting a jumbo patch, you post a list
of problems you see with important details and aspects of
spell-checking, as they are currently documented (or not documented)
in the manual, and we could then discuss these one by one and decide
whether and how each one of them should be fixed?  If nothing else, it
will allow us to discuss the problems first, rather than start from a
full-blown solution.

Thanks.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at 79417 <at> debbugs.gnu.org:


Received: (at 79417) by debbugs.gnu.org; 10 Sep 2025 02:43:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 09 22:43:17 2025
Received: from localhost ([127.0.0.1]:34861 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uwAnj-0006jR-FH
	for submit <at> debbugs.gnu.org; Tue, 09 Sep 2025 22:43:17 -0400
Received: from coconut.lockywolf.net ([213.165.252.157]:49030)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <for_emacs_1@HIDDEN>)
 id 1uwAnd-0006jB-Vl
 for 79417 <at> debbugs.gnu.org; Tue, 09 Sep 2025 22:43:12 -0400
Received: from laptop.lockywolf.net (unknown
 [IPv6:2408:824e:d2e:8ed0:aafc:415e:4cd2:7b90])
 by coconut.lockywolf.net (Postfix) with ESMTPSA id 2200537D8F;
 Wed, 10 Sep 2025 10:43:05 +0800 (CST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lockywolf.net;
 s=2024-10-06; t=1757472187;
 bh=OiVJxqLLxBdFr4HjDG06slAtlyOLVMAKWfD/aMDmJZk=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date;
 b=jj2BijJe1ewaCfBHObe/7evYK78gdBgXBcTr+VVWeLb8xTFX3vxlQCTYIoBtIfRay
 jsyZrrFI4HYytUFo7/58KLkJivU4ijeeuMO4AooAzjBlSMEPLdCKyuZKtmxt7nzDYn
 JWUzbz4UFe8D1ortI1/NyfXVNlBtB3kzcWmUN6ATay/mDqtySVr6Rx0KrLKJO1BTTi
 K01EXxSks8FT28z6JR8WHM4ei27zreVLJMRv7j1EPfr9W1fT6oCRB+Z67aWiKrEqfv
 RfiiNW+CbdvgaFp2Ri55HI6XFhgLFatEoGN5IO6qc/DirFCfiZuBaN5SV26JBRjtt6
 RnnAnrJXXUm1A==
From: Lockywolf <for_emacs_1@HIDDEN>
To: 79417 <at> debbugs.gnu.org.
Subject: Re: 31.0.50; Improve ispell.el documentation
In-Reply-To: <87ecsft5qu.fsf@HIDDEN>
References: <87ecsft5qu.fsf@HIDDEN>
User-Agent: mu4e 1.12.9; emacs 31.0.50
Date: Wed, 10 Sep 2025 10:43:00 +0800
Message-ID: <87jz27rpsb.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79417
Cc: Lockywolf <for_emacs_1@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: multipart/signed; boundary="==-=-=";
	micalg=pgp-sha256; protocol="application/pgp-signature"

--==-=-=
Content-Type: text/plain


Apologies, the previous patch got mangled, please see the patch attached
to this message.


--==-=-=
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iHUEARYIAB0WIQSWBebxCAoqaJP8N/j71sGyD+xtqgUCaMDltgAKCRD71sGyD+xt
qqaQAP9VW2uKy5ua74c2yBbX3Zz6HOARt/wc/ueXaszP18NiIQEAxc5LZOGnr01q
rA8Rm6+KwQP5r30GwUevwy4VfW4zRw8=
=r1XL
-----END PGP SIGNATURE-----
--==-=-=--

--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=0001-Improve-ispell-mode-and-flyspell-mode-documentation.patch

From 199ba4f08bf746a233a0bafd7bea62da77b88eea Mon Sep 17 00:00:00 2001
From: Lockywolf <for_emacs_1@HIDDEN>
Date: Wed, 10 Sep 2025 10:05:31 +0800
Subject: [PATCH] Improve ispell-mode and flyspell-mode documentation.

* doc/emacs/fixit.texi (Checking and Correcting Spelling):
 1. Fix documentation errors for various ispell-* functions.
 2. Document ispell-minor-mode
 3. Document ispell word completion functionality
 4. Document LocalWords syntax
 5. Expand dictionary selection documentation
---
 doc/emacs/fixit.texi | 468 ++++++++++++++++++++++++++++++++++---------
 1 file changed, 369 insertions(+), 99 deletions(-)

diff --git a/doc/emacs/fixit.texi b/doc/emacs/fixit.texi
index f240057aa69..17fa71b7def 100644
--- a/doc/emacs/fixit.texi
+++ b/doc/emacs/fixit.texi
@@ -263,20 +263,222 @@ Spelling
 @xref{Top, Aspell,, aspell, The Aspell Manual}.
 @end ifnottex
 
+Note, however, that this section will only help you fix spelling errors,
+not grammatical or punctuation errors.
+
 @vindex ispell-program-name
+@defvar ispell-program-name
+Choose the default spell-checking program by customizing this variable.
+@end defvar
   If you have only one of the spelling checker programs installed,
 Emacs will find it when you invoke for the first time one of the
 commands described here.  If you have more than one of them installed,
 you can control which one is used by customizing the variable
-@code{ispell-program-name}.
+@code{ispell-program-name} or adding the following line into your init
+file: @code{(setopt ispell-program-name "hunspell")}.
+
+@cindex @code{ispell} program
+@findex ispell-kill-ispell
+@deffn Command ispell-kill-ispell
+Kill the spell-checker subprocess.
+@end deffn
+
+Once started, the spell-checker subprocess continues
+to run, waiting for something to do, so that subsequent spell-checking
+commands complete more quickly.  If you want to get rid of the
+process, use @w{@kbd{M-x ispell-kill-ispell}}.  This is not usually
+necessary, since the process uses no processor time except when you do
+spelling correction, but might come in handy when the process is used
+for the purposes other than interactive spell-checking by externally
+installed packages.
+
+Note that if you use Flyspell-mode for on-the-fly spell-checking
+@pxref{flyspell-mode}, and you frequently switch between buffers using
+different spell-checking dictionaries, the spell-checking program will
+be restarted on each buffer switch, which might be slowing down Emacs if
+creating new processes is expensive on your Operating System.
+
+@subsection Spelling Dictionary Selection
+@cindex spell-checking dictionary
+
+In addition to having the spell checker program installed it is also
+important to have spellchecking dictionaries matching the language and
+orthography of your preferred writing installed system-wide.  You can
+check if a dictionary supporting the language you need to have checked
+is present by examining the contents of the library directories, usually
+printed by the commands in the left column in the following table.  The
+typical values for GNU/Linux are shown in the right column.
+@table @samp
+@item @code{ispell -vv}
+@code{/usr/lib64/ispell}
+@item @code{aspell config}
+@code{/usr/lib64/aspell/}
+@item Hunspell
+@code{/usr/share/hunspell/}
+@item Enchant
+Uses dictionaries from either Aspell or Hunspell.
+@end table
+Dictionaries typically consist of two files, one @code{.aff} file with
+the grammar, and one @code{.hash} or @code{.dict} with the dictionary.
+
+  Spell-checkers look up spelling in two dictionaries: @emph{the dictionary
+installed together with the spell-checker program} (or as a system
+add-on) and your @emph{personal dictionary}, which is usually empty when you
+have not been using spell-checking for a long time.
+
+@cindex spell-checking different languages
+@cindex language for spell-checking
+  Usually, a dictionary used by a spell-checker is for a specific
+language.  The default language is determined from your system's
+environment and locale.  Both the standard dictionary and your personal
+dictionary should be changed if you want to spell-check text in a
+different language.  You can use the @code{ispell-change-dictionary}
+command for that.
+
+@vindex ispell-dictionary
+@vindex ispell-local-dictionary
+@findex ispell-change-dictionary
+@defopt ispell-dictionary
+@defoptx ispell-local-dictionary
+The value of this variables shows the current selected spell-checking
+dictionary.
+@end defopt
+@deffn Command ispell-change-dictionary dictionary &optional globalp
+Change the spell-checking dictionary (language) for the current buffer.
+With a prefix argument change it globally instead.
+@end deffn
+
+  The system-wide dictionary (language) used by the spell-checker is
+chosen by using the command @w{@kbd{M-x ispell-change-dictionary}}.
+When called with a prefix argument or, in the lisp code, with
+@code{(ispell-change-dictionary "en_UK" t)}, it sets the value of the
+dictionary used for all new buffers saved in the variable
+@code{ispell-dictionary}, and without prefix argument it sets it
+buffer-locally, setting the variable @code{ispell-local-dictionary}.
+
+  Alternatively, it is possible to override the buffer-local value for
+the dictionary by adding @code{"Local IspellDict: en_UK"} at the bottom
+of the buffer, within a comment line, and reverting the buffer.  This is
+useful if the same file has to be shared by multiple developers, some of
+which do not use Emacs.  This value is usually passed to the spell
+checker program using the @code{-d} command-line switch.
+
+If both @code{ispell-dictionary} and @code{ispell-local-dictionary} are
+@code{nil}, that is, if a dictionary has never been changed, the system
+will call the spell-checking program without explicitly selecting a
+dictionary (language), and the language to be checked will be determined
+by the spell-checking program itself.  This may be useful if you prefer
+to set the language there, so that all client programs using the same
+backend spell-checking program would have the same default setting.
+
+@cindex spell-checking multi-lingual text
+@findex ispell-hunspell-add-multi-dic
+@deffn Command ispell-hunspell-add-multi-dic
+Define a multi-language dictionary to be used with Hunspell.
+@end deffn
+  Hunspell is special in that it supports spell-checking using several
+different dictionaries in parallel.  To use this feature, invoke the
+@w{@kbd{M-x ispell-hunspell-add-multi-dic}} command before you start
+using Hunspell for a particular combination of dictionaries.  This
+command prompts for the dictionary combination, which should be a
+comma-separated list of language-specific dictionary names, such as
+@samp{en_US,de_DE,ru_RU}.  Thereafter, you can spell-check text which
+mixes these languages without changing the dictionaries each time.
+(Caveat: when several languages use the same script, it is possible that
+a word that is mis-spelled in one language is found as a valid spelling
+in the dictionary of another language; in that case, the mis-spelled
+word might be missed.)
+
+For example, you can add the following to your Emacs init file:
+@lisp
+(use-package ispell
+   ;; uses (setopt ispell-set-spellchecker-params)
+  (setopt ispell-program-name "hunspell")
+  (ispell-hunspell-add-multi-dic "en_GB-ise,russian_aot_yo")
+  (ispell-change-dictionary "en_GB-ise,russian_aot_yo" t))
+@end lisp
+
+@vindex ispell-personal-dictionary
+@defvar ispell-personal-dictionary
+The value of this variable is either the name or the full path to the
+personal dictionary passed to the spell-checking program using the
+@code{-p} command-line switch.
+@end defvar
+
+  A ``personal dictionary'' is the file where you can add your own words
+to, for example, account for imperfections of the system-wide dictionary
+or to avoid less known proper nouns being marked as misspelled.  Your
+personal dictionary is specified by the variable
+@code{ispell-personal-dictionary}.  If that is @code{nil}, the spelling
+program looks for a personal dictionary in a default location, which is
+specific to each spell-checker.  In particular Aspell will save the
+personal dictionary in @code{~/.aspell.<language_name>.pws}, Ispell uses
+@code{~/.ispell_<language-name>}, but it will also pick up a file with
+the same name if it is present in the current directory, so check the
+manual to your spell-checking program.  A directory-local personal
+dictionary may happen to be useful for the case when you are
+contributing to a project which uses many domain-specific words which
+you might normally consider containing typos.
+
+@cindex adding spell-checking exceptions
+@cindex spell-checking exceptions
+@anchor{spell-checking local words}
+As opposed to defining a personal dictionary, which would be decoupled
+from the file being checked, sometimes it is advantageous to keep
+spelling exceptions stored in the same file, especially if the syntax
+used in the file allows that.  File-local exceptions can be added
+interactively when using one of the proofreading commands
+(@pxref{Proofreading}), or manually by writing exceptions at the bottom
+of the file following the keyword @code{"LocalWords: "}.  This allows
+preserving the list of exceptions when sending the file over electronic
+mail to your collaborators.
+
+It is also possible to add exceptions for the duration of the running
+Emacs session, using the interactive proofreading interface
+(@pxref{Proofreading}).  These words will be lost after Emacs is
+restarted, so you are free to experiment with spelling exceptions
+without the fear that a careless addition might end up in a missed typo.
+
+@subsection Synchronous Spell-Checking (Proofreading)
+@cindex proofreading
+@cindex spell-checking (synchronous)
+@anchor{Proofreading}
+
+Emacs spell-checking subsystem is originally designed for purposeful
+(synchronous) spell-checking, and expects ``writing'' and ``proofing''
+to be two separate activities.  If you need less rigorous asynchronous
+spell-checking, @pxref{On-the-Fly Spell-Checking}.
+
+Proofreading in Emacs is usually broken into ``sessions'', which consist
+of selecting a piece of text in one way or another (for example, a
+region or a whole buffer) and feeding it all (sometimes de-formatted
+inside Emacs) to the spell-checking program, prompting the user for
+an action when a typo is discovered.
+
+Throughout the spelling session, the prompted word in question will be
+highlighted using the @code{ispell-highlight-face}, which can be
+customized.
+
+@deffn Face ispell-highlight-face
+@vindex ispell-highlight-face
+@anchor{ispell-highlight-face}
+Face to use for highlighting spelling mistakes as identified by
+@code{ispell-word} and similar functions.
+@end deffn
+
+@subsubsection Calling the Spell-Checker
 
 @table @kbd
 @item M-$
+@itemx M-x @code{ispell-word}
+@anchor{ispell-word}
 Check and correct spelling of the word at point (@code{ispell-word}).
 If the region is active, do it for all words in the region instead.
+(This is the most frequently used command.)
 @item C-u M-$
+@itemx M-x @code{ispell-continue}
 If a previous spelling operation was interrupted, continue that
-operation (@code{ispell-continue}).
+operation.
 @item M-x ispell
 Check and correct spelling of all words in the buffer.  If the region
 is active, do it for all words in the region instead.
@@ -286,25 +488,18 @@ Spelling
 Check and correct spelling in the region.
 @item M-x ispell-message
 Check and correct spelling in a draft mail message, excluding cited
-material.
+material, header fields (@code{To:, From:, Cc:}).
 @item M-x ispell-comments-and-strings
 Check and correct spelling of comments and strings in the buffer or region.
 @item M-x ispell-comment-or-string-at-point
 Check the comment or string at point.
-@item M-x ispell-change-dictionary @key{RET} @var{dict} @key{RET}
-Restart the spell-checker process, using @var{dict} as the dictionary.
-@item M-x ispell-kill-ispell
-Kill the spell-checker subprocess.
-@item M-@key{TAB}
-@itemx @key{ESC} @key{TAB}
-@itemx C-M-i
-Complete the word before point based on the spelling dictionary and
-other completion sources (@code{completion-at-point}).
-@item M-x flyspell-mode
-Enable Flyspell mode, which highlights all misspelled words.
-@item M-x flyspell-prog-mode
-Enable Flyspell mode for comments and strings only.
 @end table
+@defvar ispell-check-comments
+@vindex ispell-check-comments
+Adjust the aforementioned commands' behaviour in modes based on
+@code{text-mode}, but using a lot of structured markup, such as
+@code{org-mode}.
+@end defvar
 
 @kindex M-$
 @findex ispell-word
@@ -325,18 +520,30 @@ Spelling
 @findex ispell-comments-and-strings
 @findex ispell-comment-or-string-at-point
 @cindex spell-checking the active region
-  Similarly, the command @kbd{M-x ispell} performs spell-checking in
-the region if one is active, or in the entire buffer otherwise.  The
+  Similarly, the command @kbd{M-x ispell} performs spell-checking in the
+region if one is active, or in the entire buffer otherwise.  The
 commands @w{@kbd{M-x ispell-buffer}} and @w{@kbd{M-x ispell-region}}
 explicitly perform spell-checking on the entire buffer or the region
 respectively.  To check spelling in an email message you are writing,
 use @w{@kbd{M-x ispell-message}}; that command checks the whole buffer,
-except for material that is indented or appears to be cited from other
-messages.  @xref{Sending Mail}.  When dealing with source code, you
+except for material that is indented, appears to be cited from other
+messages, or belongs to the email message formal syntax (@code{To:,
+From:, Cc:}).  @xref{Sending Mail}.  When dealing with source code, you
 can use @kbd{M-x ispell-comments-and-strings} or @w{@kbd{M-x
 ispell-comment-or-string-at-point}} to check only comments or string
 literals.
 
+  By default in modes based on @code{text-mode}, the aforementioned
+commands will perform spell-checking on all of the text, even if is
+commented-out.  Sometimes, however, you might want to comment-out pieces
+of structural markup, such as @code{org-mode}'s tags, which might not be
+proper words, but due to being commented-out are indistinguishable from
+normal comment text.  To prevent checking of comments in text modes, set
+@code{ispell-check-comments} to @code{nil}.  Setting it to
+@code{'exclusive} will make the spell-checker check @emph{only} comments.
+
+@subsubsection Correcting Spelling Mistakes
+@cindex spell-checking (correcting mistakes)
   When one of these commands encounters what appears to be an
 incorrect word, it asks you what to do.  It usually displays a list of
 numbered @dfn{near-misses}---words that are close to the incorrect word.
@@ -355,7 +562,8 @@ Spelling
 
 @item r @var{new} @key{RET}
 Replace the word, just this time, with @var{new}.  (The replacement
-string will be rescanned for more spelling errors.)
+string will be rescanned for more spelling errors, thus marking other
+of the occurrences of the same spelling as correct.)
 
 @item R @var{new} @key{RET}
 Replace the word with @var{new}, and do a @code{query-replace} so you
@@ -368,11 +576,13 @@ Spelling
 
 @item A
 Accept the incorrect word---treat it as correct, but only in this
-editing session and for this buffer.
+file. (This adds @code{LocalWords: } syntax to the file footer
+(@pxref{spell-checking local words}).)
 
 @item i
-Insert this word in your personal dictionary file so that it will be
-considered correct from now on, even in future sessions.
+Insert this word in your personal dictionary file (the spell-checking
+program does the insertion) so that it will be considered correct from
+now on, even in future sessions and even outside Emacs.
 
 @item m
 Like @kbd{i}, but you can also specify dictionary completion
@@ -383,10 +593,10 @@ Spelling
 file.
 
 @item l @var{word} @key{RET}
-Look in the dictionary for words that match @var{word}.  These words
-become the new list of near-misses; you can select one of them as
-the replacement by typing a digit.  You can use @samp{*} in @var{word} as a
-wildcard.
+Look up the words that match @var{word} in the completion dictionary
+(@pxref{plain-text completion}).  These words become the new list of
+near-misses; you can select one of them as the replacement by typing a
+digit.  You can use @samp{*} in @var{word} as a wildcard.
 
 @item C-g
 @itemx X
@@ -416,6 +626,51 @@ Spelling
 
 @item ?
 Show the list of options.
+@end table
+
+@subsection Plain-Text Word Completion
+@cindex completion (plain-text)
+@cindex completion (words)
+@cindex word completion
+@anchor{plain-text completion}
+Emacs also supports words completion based on a simple plain-text list
+of words separated by newlines, with no support for morphology.  Despite
+being quite primitive, this mechanism is often the only way of
+assistance a text editor can provide for the user writing a text without
+spending a lot of computational resources on syntactic and semantic
+analysis of the text.
+
+@vindex ispell-complete-word-dict
+@defvar ispell-complete-word-dict
+@defvarx ispell-alternate-dictionary
+  Primary and fallback dictionary for plain-text completion.
+@end defvar
+
+  A separate (from @code{ispell-dictionary} and
+@code{ispell-local-dictionary}) dictionary is used for plain-text word
+completion.  The variable @code{ispell-complete-word-dict} specifies the
+file name of this dictionary.  The completion dictionary must be
+different because it cannot use the information about roots and affixes
+of the words, which spell-checking uses to detect variations of words.
+For some languages, there is a spell-checking dictionary but no word
+completion dictionary.  The variable @code{ispell-alternate-dictionary}
+serves the same purpose, but points to the system-wide dictionary, which
+is usually pre-installed by your Operating System vendor.  On GNU/Linux
+this is often a wordlist extracted from the Webster dictionary (with
+definitions removed), shipped with some older editions of UNIX,
+installed at @code{/usr/share/dict/words}.  The ``GNU Miscfiles''
+project provides a (relatively limited) sample of such a wordlist if
+necessary.
+
+@table @kbd
+@item M-@key{TAB}
+@itemx @key{ESC} @key{TAB}
+@itemx C-M-i
+@itemx @kbd{Tools -> Spell Checking -> Complete Word}
+@itemx @kbd{Tools -> Spell Checking -> Complete Word Fragment}
+Complete the word before point based on the spelling dictionary and
+other completion sources (@code{completion-at-point},
+@code{ispell-complete-word}, @code{ispell-complete-word-interior-frag}).
 @end table
 
   Use the command @kbd{M-@key{TAB}} (@code{completion-at-point}) to
@@ -424,68 +679,25 @@ Spelling
 window manager intercepts @kbd{M-@key{TAB}}, type @w{@kbd{@key{ESC}
 @key{TAB}}} or @kbd{C-M-i}.)
 
-@cindex @code{ispell} program
-@findex ispell-kill-ispell
-  Once started, the spell-checker subprocess continues
-to run, waiting for something to do, so that subsequent spell-checking
-commands complete more quickly.  If you want to get rid of the
-process, use @w{@kbd{M-x ispell-kill-ispell}}.  This is not usually
-necessary, since the process uses no processor time except when you do
-spelling correction.
-
-@vindex ispell-dictionary
-@vindex ispell-local-dictionary
-@vindex ispell-personal-dictionary
-@findex ispell-change-dictionary
-  Spell-checkers look up spelling in two dictionaries:
-the standard dictionary and your personal dictionary.  The standard
-dictionary is specified by the variable @code{ispell-local-dictionary}
-or, if that is @code{nil}, by the variable @code{ispell-dictionary}.
-If both are @code{nil}, the spelling program's default dictionary is
-used.  The command @w{@kbd{M-x ispell-change-dictionary}} sets the
-standard dictionary for the buffer and then restarts the subprocess,
-so that it will use a different standard dictionary.  Your personal
-dictionary is specified by the variable
-@code{ispell-personal-dictionary}.  If that is @code{nil}, the
-spelling program looks for a personal dictionary in a default
-location, which is specific to each spell-checker.
-
-@cindex spell-checking different languages
-@cindex language for spell-checking
-  Usually, a dictionary used by a spell-checker is for a specific
-language.  The default language is determined from your system's
-environment and locale.  Both the standard dictionary and your personal
-dictionary should be changed if you want to spell-check text in a
-different language.  You can use the @code{ispell-change-dictionary}
-command for that.
-
-@cindex spell-checking multi-lingual text
-@findex ispell-hunspell-add-multi-dic
-  Hunspell is special in that it supports spell-checking using several
-different dictionaries in parallel.  To use this feature, invoke the
-@kbd{M-x ispell-hunspell-add-multi-dic} command before you start using
-Hunspell for a particular combination of dictionaries.  This command
-prompts for the dictionary combination, which should be a
-comma-separated list of language-specific dictionary names, such as
-@samp{en_US,de_DE,ru_RU}.  Thereafter, you can spell-check text which
-mixes these languages without changing the dictionaries each time.
-(Caveat: when several languages use the same script, it is possible that
-a word that is mis-spelled in one language is found as a valid spelling
-in the dictionary of another language; in that case, the mis-spelled
-word might be missed.)
 
-@vindex ispell-complete-word-dict
-  A separate dictionary is used for word completion.  The variable
-@code{ispell-complete-word-dict} specifies the file name of this
-dictionary.  The completion dictionary must be different because it
-cannot use the information about roots and affixes of the words, which
-spell-checking uses to detect variations of words.  For some
-languages, there is a spell-checking dictionary but no word completion
-dictionary.
+@subsection Asynchronous (On-the-Fly) Spell-Checking
+@cindex on-the-fly spell-checking
+@cindex spell-checking (on-the-fly)
+@anchor{On-the-Fly Spell-Checking}
 
 @cindex Flyspell mode
 @cindex mode, Flyspell
 @findex flyspell-mode
+@anchor{flyspell-mode}
+@table @kbd
+@item M-x flyspell-mode
+Enable Flyspell mode, which highlights all misspelled words.  (Most
+useful in modes based on @code{text-mode}.)
+
+Note that @code{flyspell-mode}, when enabled, will change the value of
+@code{ispell-highlight-face} (@pxref{ispell-highlight-face}).
+@end table
+
   Flyspell mode is a minor mode that performs automatic spell-checking
 of the text you type as you type it.  When it finds a word that it
 does not recognize, it highlights that word.  Type @w{@kbd{M-x
@@ -493,31 +705,89 @@ Spelling
 enable Flyspell mode in all text mode buffers, add
 @code{flyspell-mode} to @code{text-mode-hook}.  @xref{Hooks}.  Note
 that, as Flyspell mode needs to check each word across which you move,
-it will slow down cursor motion and scrolling commands.  It also
-doesn't automatically check the text you didn't type or move across;
-use @code{flyspell-region} or @code{flyspell-buffer} for that.
+it will slow down cursor motion and scrolling commands.
 
 @vindex flyspell-check-changes
-  Normally, Flyspell mode highlights misspelled words that you typed or
-modified, but also words you move across without changing them.  But if
-you customize the variable @code{flyspell-check-changes} to a
+@defvar flyspell-check-changes
+Enable spell-checking words you move across.
+@end defvar
+@deffn Face flyspell-error
+@deffnx Face flyspell-duplicate
+@vindex flyspell-error
+@vindex flyspell-duplicate
+These two faces define how the spelling mistake will be highlighted
+by @code{flyspell-mode}, the first being used for highlighting first
+occurrences of errors, and the second used for all subsequent identical
+misspellings.  These will override @code{ispell-highlight-face}.
+@end deffn
+@deffn Command flyspell-region
+@deffnx Command flyspell-buffer
+Highlight spelling mistakes in a region or in a buffer.
+@end deffn
+  Normally, Flyspell mode highlights both misspelled words that you
+typed or modified, and also words you move across without changing them.
+But if you customize the variable @code{flyspell-check-changes} to a
 non-@code{nil} value, Flyspell mode will check only the words you typed
-or edited in some way.
+or edited in some way. It @emph{doesn't automatically check the text you
+didn't type or move across}; use @code{flyspell-region} or
+@code{flyspell-buffer} for that.
+
 
 @findex flyspell-correct-word
-@findex flyspell-auto-correct-word
 @findex flyspell-correct-word-before-point
+@findex flyspell-auto-correct-word
+@table @kbd
+@item @kbd{mouse-2}
+@itemx @code{(flyspell-correct-word)}
+Display a menu of possible correction using mouse.
+@item @kbd{C-c $}
+@itemx @code{(flyspell-correct-word-before-point)}
+Display a menu of possible corrections using keyboard.
+@item @kbd{M-@key{TAB}}
+@itemx @kbd{C-M-i}
+@itemx @kbd{@key{ESC} @key{TAB}}
+@itemx @kbd{C-.}
+@itemx (@code{flyspell-auto-correct-word})
+Automatically correct word before point.
+@end table
   When Flyspell mode highlights a word as misspelled, you can click on
 it with @kbd{mouse-2} (@code{flyspell-correct-word}) to display a menu
 of possible corrections and actions.  If you want this menu on
-@kbd{mouse-3} instead, enable @code{context-menu-mode}.  In addition,
-@kbd{C-.} or @kbd{@key{ESC} @key{TAB}} (@code{flyspell-auto-correct-word})
-will propose various successive corrections for the word at point, and
-@w{@kbd{C-c $}} (@code{flyspell-correct-word-before-point}) will pop
-up a menu of possible corrections.  Of course, you can always correct
-the misspelled word by editing it manually in any way you like.
+@kbd{mouse-3} instead, enable @code{context-menu-mode}.  Note, however,
+that @code{flyspell-mode} needs to be enable @emph{after}
+@code{context-menu-mode}, because it will @emph{redefine} the context
+menu already installed there by other modes.  In addition, @kbd{C-.} or
+@kbd{@key{ESC} @key{TAB}} (@code{flyspell-auto-correct-word}) will
+propose various successive corrections for the word at point, and
+@w{@kbd{C-c $}} (@code{flyspell-correct-word-before-point}) will pop up
+a menu of possible corrections.  Of course, you can always correct the
+misspelled word by editing it manually in any way you like, or use
+@w{@kbd{M-$}} @pxref{ispell-word}.
+
+@cindex Ispell Minor Mode
+@cindex mode, Ispell Minor
+@anchor{ispell-minor-mode}
+@findex ispell-minor-mode
+@table @kbd
+@item M-x ispell-minor-mode
+Enable spell-checking of the last typed word only.
+@end table
+
+If @code{flyspell-mode} proves to be too burdensome for your computer,
+or if it is producing too many false positives and visually clutters
+your display, @code{ispell-minor-mode} is a much more lightweight
+alternative, which only checks the last word as you are typing it, and
+shows a brief message in the echo area.
 
+@cindex Flyspell Prog mode
+@cindex mode, Flyspell Prog
+@anchor{flyspell-prog-mode}
 @findex flyspell-prog-mode
+@table @kbd
+@item M-x flyspell-prog-mode
+Enable Flyspell mode for comments and strings only. (Most useful for
+modes based on @code{prog-mode}.)
+@end table
   Flyspell Prog mode works just like ordinary Flyspell mode, except
 that it only checks words in comments and string constants.  This
 feature is useful for editing programs.  Type @w{@kbd{M-x
-- 
2.46.4


--=-=-=
Content-Type: text/plain



-- 
Your sincerely,
Vladimir Nikishkin (MiEr, lockywolf)
(Laptop)

--=-=-=--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 10 Sep 2025 02:13:29 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 09 22:13:29 2025
Received: from localhost ([127.0.0.1]:34751 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uwAKs-00052c-PD
	for submit <at> debbugs.gnu.org; Tue, 09 Sep 2025 22:13:29 -0400
Received: from lists.gnu.org ([2001:470:142::17]:55888)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <for_emacs_1@HIDDEN>)
 id 1uwAKn-00052D-Hj
 for submit <at> debbugs.gnu.org; Tue, 09 Sep 2025 22:13:23 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <for_emacs_1@HIDDEN>)
 id 1uwAKh-0008Lo-Tw
 for bug-gnu-emacs@HIDDEN; Tue, 09 Sep 2025 22:13:15 -0400
Received: from coconut.lockywolf.net ([213.165.252.157])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <for_emacs_1@HIDDEN>)
 id 1uwAKc-0001tV-J4
 for bug-gnu-emacs@HIDDEN; Tue, 09 Sep 2025 22:13:15 -0400
Received: from laptop.lockywolf.net (unknown [58.19.0.46])
 by coconut.lockywolf.net (Postfix) with ESMTPSA id 73CE438A00
 for <bug-gnu-emacs@HIDDEN>; Wed, 10 Sep 2025 10:13:05 +0800 (CST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lockywolf.net;
 s=2024-10-06; t=1757470386;
 bh=h41xziWW/RXIs62Fb4ndAhwnRaZ3P4G0HShAwEoYXZQ=;
 h=From:To:Subject:Date;
 b=jP4ccF1kKjTsuvJlwrnpbJJ79NMQGKcU9A6T7moRfTklvmRvSTrSDy8IbiMNqirpK
 WzerVEovHDihYoki79Gzyb0uiwvAHEARArvtvZanITle0IcCuS00TE2vJ237bUHbks
 wAr1fE4ZLt9ivNnBLjyfwXHlquPHJyOmB+val/eOO3vc9Tr9311+h+V46vbQkGVq2i
 utH9r3u3fYTX2oAAgsdhaIEL3XG7cCrMyfpRHr9ewVXNgeedbVFn5rREYTrpyYZ7dw
 4kFb/Bm4GA62kgjjdGoBjOlV1B/RVOaDkTWUicD1Y7Crl0wBCz2bJGS2m4Nvl1+W3f
 PzaeIobeOSzDA==
From: Lockywolf <for_emacs_1@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Subject: 31.0.50; Improve ispell.el documentation
User-Agent: mu4e 1.12.9; emacs 31.0.50
X-Debbugs-Cc: 
Date: Wed, 10 Sep 2025 10:12:57 +0800
Message-ID: <87ecsft5qu.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
Received-SPF: pass client-ip=213.165.252.157;
 envelope-from=for_emacs_1@HIDDEN; helo=coconut.lockywolf.net
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.9 (/)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.1 (/)

--=-=-=
Content-Type: text/plain

Dear Emacs developers,

The following patch contains what I consider to be an improvement to the
Emacs Manual with respect to the ~ispell.el~ spell-checking component.

The patch is attached.


--=-=-=
Content-Type: text/x-patch; charset=utf-8
Content-Disposition: attachment;
 filename=0001-Add-tests-to-inspell.el-interactive-functions.patch
Content-Transfer-Encoding: quoted-printable

From e5661b558e1ea0c4dbcc1ceef0c0c760ec5060f3 Mon Sep 17 00:00:00 2001
From: Lockywolf <for_emacs_1@HIDDEN>
Date: Mon, 8 Sep 2025 13:13:25 +0800
Subject: [PATCH] Add tests to inspell.el interactive functions.

* test/lisp/textmodes/ispell-tests/ispell-tests.el:
  Add tests for
  1. ispell-kill-ispell
  2. ispell-region
  3. ispell-buffer
  4. ispell-change-dictionary
  5. ispell-comments-and-strings
  6. ispell-comment-or-string-at-point
  7. ispell-pdict-save
  8. ispell-lookup-words
  9. ispell-complete-word
  10. ispell-complete-word-interior-frag
  11. ispell-completion-at-point
  12. ispell-minor-mode
  13. ispell-message
* test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el:
  1. ispell-word
---
 lisp/textmodes/ispell.el                      |   3 +-
 .../ispell-resources/fake-aspell-new.bash     |  64 +-
 .../ispell-tests/ispell-aspell-tests.el       | 106 +++
 .../ispell-tests/ispell-hunspell-tests.el     |   5 +
 .../ispell-international-ispell-tests.el      |   3 +
 .../ispell-tests/ispell-tests-common.el       |  41 +-
 .../textmodes/ispell-tests/ispell-tests.el    | 653 +++++++++++++++---
 7 files changed, 758 insertions(+), 117 deletions(-)

diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index ad7c8571f67..b37d07f5e62 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -1803,7 +1803,8 @@ ispell-accept-output
     (if (null ispell-process)
 	(error "No Ispell process to read output from!")
       (let ((buf ispell-output-buffer)
-	    ispell-output)
+	    (ispell-output nil))
+
 	(if (not (bufferp buf))
 	    (setq ispell-filter nil)
 	  (with-current-buffer buf
diff --git a/test/lisp/textmodes/ispell-resources/fake-aspell-new.bash b/te=
st/lisp/textmodes/ispell-resources/fake-aspell-new.bash
index 7dd935bac3c..e3fd91d5196 100755
--- a/test/lisp/textmodes/ispell-resources/fake-aspell-new.bash
+++ b/test/lisp/textmodes/ispell-resources/fake-aspell-new.bash
@@ -1,5 +1,15 @@
 #!/bin/bash
=20
+#exec aspell "$@"
+
+#rm -rf ~/lwf_mock-aspell.log
+
+#printf 'date=3D"%s"\n' "$(date --iso=3Dseconds)" > /tmp/lwf_mock-aspell.l=
og
+
+#printf 'args=3D"%s"\n' "$*" >> /tmp/lwf_mock-aspell.log || { printf "lwf:=
ERROR\n" ; exit 3 ; }
+
+# coproc aspell { aspell "$@" ; }
+
 vv=3D
=20
 show_vv()
@@ -7,13 +17,51 @@ show_vv()
     printf  '%s\n' "@(#) International Ispell Version 3.1.20 (but really A=
spell 0.60.0)"
 }
=20
-imitate_repl()
+imitate_pipe()
+{
+    local a
+    declare -A sessiondict
+    show_vv
+    while read a ; do
+	#printf 'pipe=3D"%s"\n' "$a" >> /tmp/lwf_mock-aspell.log
+	if [[ "$a" =3D=3D '' ]] ; then
+	    printf ''
+	elif [[ "$a" =3D=3D '+' || "$a" =3D=3D '~nroff' || "$a" =3D=3D '~tex' || =
"$a" =3D=3D '!' || "$a" =3D=3D '-' || "$a" =3D=3D '%' ]] ; then
+	    printf ''
+	elif [[ "${a:0:1}" =3D=3D '@' ]] ; then
+	    sessiondict["${a:1}"]=3D"true"
+	    printf ''
+	else
+	    for b in $a ; do
+		if [[ "$b" =3D=3D '^' ]] ; then
+		    printf ''
+		elif [[ ${sessiondict[$b]} =3D=3D 'true' || ${sessiondict[${b#^}]} =3D=
=3D 'true' ]] ; then
+		    printf '*\n'
+		elif [[ "$b" =3D=3D '^tarampampamtararam' || "$b" =3D=3D 'tarampampamtar=
aram' ]] ; then
+		    printf '# tarampampamtararam 0\n' # wrong word
+		elif [[ "$b" =3D=3D '^badworddd' || "$b" =3D=3D 'badworddd' ]] ; then
+		    printf '# badworddd 0\n' # wrong word
+		elif [[ "$b" =3D=3D '^hellooooooo' || "$b" =3D=3D 'hellooooooo' ]] ; then
+		    printf '# hellooooooo 0\n' # wrong word
+		elif [[ "$b" =3D=3D '^' ]] ; then
+		    printf '\n'
+		else
+		    printf "*\n"
+		fi
+	    done
+	    printf '\n'
+	fi
+    done
+}
+
+imitate_interactive()
 {
+    exit 6
     while true ; do
 	read a
-#	printf 'debug=3D"%s"\n' "$a"
+#	printf 'interactive=3D"%s"\n' "$a" >> /tmp/lwf_mock-aspell.log
 	if [[ "$a" =3D=3D '' ]] ; then
-	    printf ''
+	    printf '\n'
 	elif [[ "$a" =3D=3D 'tarampampamtararam' ]] ; then
 	    printf '# tarampampamtararam 0\n\n' # wrong word
 	else
@@ -22,16 +70,16 @@ imitate_repl()
     done
 }
=20
-show_vv
=20
 while :; do
     case $1 in
         -vv|-v)
-            #show_vv # for ispell.el error detection
+            show_vv # for ispell.el version detection
             exit
             ;;
         -a)       # imitate REPL
-	    imitate_repl
+	    imitate_pipe
+	    exit
             ;;
 	-?*)
             printf 'WARN: Unknown option (ignored): %s\n' "$1" >&2
@@ -41,3 +89,7 @@ while :; do
     esac
     shift
 done
+
+printf 'Usage: aspell [options] <command>\n'
+
+#printf 'this place should be unreachable\n' >> /tmp/lwf_mock-aspell.log
diff --git a/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el b/test=
/lisp/textmodes/ispell-tests/ispell-aspell-tests.el
index c24d284f426..f8f954fd430 100644
--- a/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el
+++ b/test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el
@@ -25,9 +25,15 @@
 ;;; Code:
=20
 (require 'ispell)
+(require 'ert-x)
=20
+(eval-when-compile
+  (defconst ispell-tests-lib (expand-file-name "test/lisp/textmodes/ispell=
-tests/ispell-tests-common.el" source-directory))
+  (load ispell-tests-lib))
 (load (expand-file-name "test/lisp/textmodes/ispell-tests/ispell-tests-com=
mon.el" source-directory))
=20
+(declare-function letopt (expand-file-name "test/lisp/textmodes/ispell-tes=
ts/ispell-tests-common.el" source-directory) t t)
+
 (ert-deftest ispell/aspell/ispell-check-version/works ()
   "Test that aspell is correctly detected."
   (skip-unless (and (executable-find "aspell")
@@ -68,6 +74,106 @@ ispell/aspell/ispell-check-version/version-lowlow
         (set-variable 'ispell-last-program-name
                       test-saved-ispell-last-program-name)))))
=20
+(ert-deftest ispell/aspell/ispell-word/english/correct ()
+"This test checks that Russian spellchecking works for Aspell."
+  (skip-unless (executable-find "aspell"))
+  (skip-unless (equal
+                0
+                (call-process "aspell" nil nil nil "-vv")))
+  (skip-unless (equal
+                0
+                (with-temp-buffer
+                  (insert "test")
+                  (call-process-region
+                   nil
+                   nil
+                   "aspell" nil t nil "-a" "-denglish"))))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let ((default-directory temporary-file-directory))
+      (letopt ((ispell-program-name "aspell")
+               (ispell-dictionary "english"))
+        (ignore-errors (ispell-kill-ispell t t))
+        (with-temp-buffer
+          (insert
+           "hello\n")
+          (goto-char 0)
+          (ispell-change-dictionary "english")
+          (let ((debugmessage ""))
+            (ert-with-message-capture lres
+              (let ((ispell-check-only t))
+                (ispell-word)
+                (setf debugmessage lres)
+                ;;(should (string-match "is correct" lres))
+                ))
+            (message "lwf:lres=3D%s" debugmessage)))
+        'passed
+        )))
+  )
+
+(ert-deftest ispell/aspell/ispell-word/english/incorrect ()
+"This test checks that Russian spellchecking works for Aspell."
+  (skip-unless (executable-find "aspell"))
+  (skip-unless (equal
+                0
+                (call-process "aspell" nil nil nil "-vv")))
+  (skip-unless (equal
+                0
+                (with-temp-buffer
+                  (insert "test")
+                  (call-process-region
+                   nil
+                   nil
+                   "aspell" nil t nil "-a" "-denglish"))))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let ((default-directory temporary-file-directory))
+      (letopt ((ispell-program-name "aspell")
+               (ispell-dictionary "english"))
+        (ignore-errors (ispell-kill-ispell t t))
+        (with-temp-buffer
+          (insert
+           ;; there is no such a word in English, I swear.
+           "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+           )
+          (goto-char 0)
+          (ispell-change-dictionary "english")
+          (ert-with-message-capture lres
+            (let ((ispell-check-only t))
+              (ispell-word))
+            (should (string-match "is incorrect" lres))))
+        'passed
+        )))
+  )
+
+(ert-deftest ispell/aspell/ispell-word/english/wrong-language ()
+  "This test checks that Russian spellchecking works for Aspell."
+  :expected-result :failed
+  (skip-unless (executable-find "aspell"))
+  (skip-unless (equal
+                0
+                (call-process "aspell" nil nil nil "-vv")))
+  (skip-unless (equal
+                0
+                (with-temp-buffer
+                  (insert "test")
+                  (call-process-region nil nil "aspell" nil '("*scratch*" =
t) nil "-a" "-denglish"))))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let ((default-directory temporary-file-directory))
+      (letopt ((ispell-program-name "aspell"))
+        (ignore-errors (ispell-kill-ispell t t))
+        (with-temp-buffer
+          (insert
+           ;; giving Aspell a wrong language should not fail
+           "=D0=BF=D1=80=D0=B8=D0=B2=D0=B5=D1=82\n"
+           )
+          (goto-char 0)
+          (ispell-change-dictionary "english")
+          (ert-with-message-capture lres
+            (let ((ispell-check-only t))
+              (ispell-word))
+            (should (not (string-match "Error" lres)))))
+        'passed
+        )))
+  )
=20
 (provide 'tests-ispell-aspell)
 ;;; tests-ispell-aspell.el ends here
diff --git a/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el b/te=
st/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el
index ae3d6e303b3..ebdf10cc3f4 100644
--- a/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el
+++ b/test/lisp/textmodes/ispell-tests/ispell-hunspell-tests.el
@@ -26,6 +26,11 @@
=20
 (require 'ispell)
=20
+(eval-when-compile
+  (defconst ispell-tests-lib (expand-file-name "test/lisp/textmodes/ispell=
-tests/ispell-tests-common.el" source-directory))
+  (load ispell-tests-lib))
+
+
 (load (expand-file-name "test/lisp/textmodes/ispell-tests/ispell-tests-com=
mon.el" source-directory))
 (ert-deftest ispell/hunspell/ispell-word/english/check-only ()
 "This test checks that Russian spellchecking works for Hunspell."
diff --git a/test/lisp/textmodes/ispell-tests/ispell-international-ispell-t=
ests.el b/test/lisp/textmodes/ispell-tests/ispell-international-ispell-test=
s.el
index f232f26d10d..bcd19e105a3 100644
--- a/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el
+++ b/test/lisp/textmodes/ispell-tests/ispell-international-ispell-tests.el
@@ -25,6 +25,9 @@
 ;;; Code:
=20
 (require 'ispell)
+(eval-when-compile
+  (defconst ispell-tests-lib (expand-file-name "test/lisp/textmodes/ispell=
-tests/ispell-tests-common.el" source-directory))
+  (load ispell-tests-lib))
=20
 (load (expand-file-name "test/lisp/textmodes/ispell-tests/ispell-tests-com=
mon.el" source-directory))
=20
diff --git a/test/lisp/textmodes/ispell-tests/ispell-tests-common.el b/test=
/lisp/textmodes/ispell-tests/ispell-tests-common.el
index a6c4f1247ee..e69e1a469e4 100644
--- a/test/lisp/textmodes/ispell-tests/ispell-tests-common.el
+++ b/test/lisp/textmodes/ispell-tests/ispell-tests-common.el
@@ -2,20 +2,35 @@
=20
 (defvar tests-ispell-data-directory
   (expand-file-name "test/lisp/textmodes/ispell-resources/" source-directo=
ry))
+(defvar fake-aspell-path
+  (expand-file-name
+   "./fake-aspell-new.bash"
+   tests-ispell-data-directory))
=20
-(let* ((backend-binaries (list "ispell" "aspell" "hunspell" "enchant-2"))
-       (filter-binaries (lambda ()
-                          (seq-filter
-                           #'executable-find
-                           backend-binaries))))
+
+(let* ((backend-binaries (list  "aspell"  fake-aspell-path  "hunspell"  "e=
nchant-2")
+                         )
+       (filter-binaries (seq-filter
+                           (lambda (b)
+                             (and
+                              (executable-find b)
+                              ;; (equal 0
+                              ;;        (with-temp-buffer
+                              ;;          (call-process b nil t "-v")))
+                              ))
+                           backend-binaries)))
=20
   (defun ispell-tests--some-backend-available-p ()
     (not
-     (null (funcall filter-binaries))))
+     (null filter-binaries)))
=20
   (defun ispell-tests--some-backend ()
-    (car (funcall filter-binaries))))
+    (let ((retval (car filter-binaries)))
+      (message "available backend is:%s" retval)
+      retval)))
=20
+(eval-when-compile
+  (require 'cl-macs))
 (cl-defmacro letopt (bindings &body body)
   (declare (indent 1))
   (let* ((binding-var (lambda (binding) (car binding)))
@@ -33,4 +48,16 @@ letopt
 			      ,@body)
 	 ,@(reverse restorebindings)))))
=20
+(cl-defmacro with-ispell-global-dictionary (bindings &body body)
+  "This macro should not really be needed, but `ispell.el'.
+Sets up dictionaries in a stupid way."
+  (declare (indent 1))
+  (let* ((dictionary-val (car bindings))
+	 (temp-var (gensym 'old-dictionary)))
+    `(let ((,temp-var (symbol-value 'ispell-dictionary)))
+       (unwind-protect (progn (ispell-change-dictionary ,dictionary-val t)
+			      ,@body)
+	 (progn
+           (ispell-change-dictionary ,temp-var t))))))
+
 (provide 'ispell-tests-common)
diff --git a/test/lisp/textmodes/ispell-tests/ispell-tests.el b/test/lisp/t=
extmodes/ispell-tests/ispell-tests.el
index 9e675443986..47816671475 100644
--- a/test/lisp/textmodes/ispell-tests/ispell-tests.el
+++ b/test/lisp/textmodes/ispell-tests/ispell-tests.el
@@ -24,9 +24,22 @@
=20
 ;;; Code:
=20
+(declare-function letopt ispell-tests-lib t t)
+(declare-function ispell-tests--some-backend ispell-tests-lib t t)
+(declare-function ispell-tests--some-backend-available-p ispell-tests-lib =
t t)
+
 (require 'ispell)
-(load (expand-file-name "test/lisp/textmodes/ispell-tests/ispell-tests-com=
mon.el" source-directory))
+(defconst ispell-tests-lib (expand-file-name "test/lisp/textmodes/ispell-t=
ests/ispell-tests-common.el" source-directory))
+(eval-when-compile
+  (defconst ispell-tests-lib (expand-file-name "test/lisp/textmodes/ispell=
-tests/ispell-tests-common.el" source-directory))
+  (load ispell-tests-lib))
+(load ispell-tests-lib)
+
+(require 'ert)
+(require 'ert-x)
=20
+(setopt ispell-program-name "hunspell")
+(setopt ispell-dictionary "fr_FR")
=20
 (defun warnings-buffer-exists-p ()
   "Check if a buffer named \"*Warnings*\" exists."
@@ -450,18 +463,20 @@ ispell/ispell-buffer-local-words/ispell-words-keyword
 Should pass regardless of the backend and the dictionary, because
 presumably nobody will have `hellooooooo' in their dictionary."
   (skip-unless (ispell-tests--some-backend-available-p))
-  (letopt ((ispell-program-name (ispell-tests--some-backend)))
-          (with-temp-buffer
-            (nxml-mode)
-            (ignore-errors (ispell-kill-ispell))
-            (with-environment-variables (("HOME" temporary-file-directory))
-              (ispell-init-process)
-              (let ((test-output (ispell--run-on-word "hellooooooo")))
-                (should (listp test-output))
-                (should-not (equal t test-output)))
-              (ispell-add-per-file-word-list "hellooooooo")
-              (ispell-buffer-local-words)
-              (should (equal t (ispell--run-on-word "hellooooooo")))))))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (with-ispell-global-dictionary nil
+      (letopt ((ispell-program-name (ispell-tests--some-backend)))
+        (with-temp-buffer
+          (nxml-mode)
+          (ignore-errors (ispell-kill-ispell))
+          (ispell-init-process)
+          (let ((test-output (ispell--run-on-word "hellooooooo")))
+            (should (listp test-output))
+            (should-not (equal t test-output)))
+          (ispell-add-per-file-word-list "hellooooooo")
+          (ispell-buffer-local-words)
+          (should (equal t (ispell--run-on-word "hellooooooo")))))))
+  )
=20
=20
 (ert-deftest
@@ -470,21 +485,24 @@ ispell/ispell-buffer-local-words/ispell-words-keyword
 Should pass regardless of the backend and the dictionary, because
 presumably nobody will have `hellooooooo' in their dictionary."
   (skip-unless (ispell-tests--some-backend-available-p))
-  (letopt ((ispell-program-name (ispell-tests--some-backend)))
-          (cd temporary-file-directory)
-          (with-temp-buffer
-            (nxml-mode)
-            (ignore-errors (ispell-kill-ispell))
-            (with-environment-variables (("HOME" temporary-file-directory))
-              (ispell-init-process)
-              (let ((test-output (ispell--run-on-word "hellooooooo")))
-                (should (listp test-output))
-                (should-not (equal t test-output)))
-              (let ((ispell-buffer-session-localwords (list "hellooooooo")=
))
-                (ispell-buffer-local-words)
-                (should (equal t (ispell--run-on-word "hellooooooo"))))))))
-
-(ert-deftest ispell/ispell-init-process/works-nohome ()
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (with-ispell-global-dictionary nil
+      (letopt ((ispell-program-name (ispell-tests--some-backend))
+               (ispell-dictionary nil))
+        (cd temporary-file-directory)
+        (with-temp-buffer
+          (nxml-mode)
+          (ignore-errors (ispell-kill-ispell))
+          (ispell-init-process)
+          (let ((test-output (ispell--run-on-word "hellooooooo")))
+            (should (listp test-output))
+            (should-not (equal t test-output)))
+          (let ((ispell-buffer-session-localwords (list "hellooooooo")))
+            (ispell-buffer-local-words)
+            (should (equal t (ispell--run-on-word "hellooooooo"))))))))
+  )
+
+(ert-deftest ispell/ispell-init-process/works-no-home ()
   "Simple test to check that ispell-init-process works."
   :expected-result :failed
   (skip-unless (ispell-tests--some-backend-available-p))
@@ -492,13 +510,14 @@ ispell/ispell-init-process/works-nohome
           (with-temp-buffer
             (ispell-init-process))))
=20
-(ert-deftest ispell/ispell-init-process/works-withhome ()
+(ert-deftest ispell/ispell-init-process/works-with-home ()
   "Simple test to check that ispell-init-process works."
   (skip-unless (ispell-tests--some-backend-available-p))
-  (letopt ((ispell-program-name (ispell-tests--some-backend)))
-          (with-temp-buffer
-            (with-environment-variables (("HOME" temporary-file-directory))
-              (ispell-init-process)))))
+  (with-ispell-global-dictionary nil
+      (letopt ((ispell-program-name (ispell-tests--some-backend)))
+        (with-temp-buffer
+          (with-environment-variables (("HOME" temporary-file-directory))
+            (ispell-init-process))))))
=20
 ;; Some more tests for buffer-local stuff.
 ;; `ispell-buffer-local-dict'
@@ -742,18 +761,17 @@ ispell/ispell-accept-buffer-local-defs/simple
 batch mode.
 1. local words
 2. dictionary and pdict
-3. parser and extcharmode"
-  (skip-unless (executable-find "ispell"))
-  (setq old-engine ispell-program-name)
-  (setopt ispell-program-name "ispell")
-  (ispell-check-version t)
-  (skip-unless (and (null ispell-really-aspell)
-                    (null ispell-really-hunspell)
-                    (null ispell-really-enchant)))
-  (setq ispell-program-name old-engine)
+3. parser and extcharmode.
+This does not work well on hunspell, because hunspell
+lies in their Man page, and in enchant-2 when it is using
+hunspell.  Hence skipping."
+  (skip-unless (not (or (equal (ispell-tests--some-backend)
+                               "hunspell")
+                        (equal (ispell-tests--some-backend)
+                               "enchant-2"))))
   (with-environment-variables (("HOME" temporary-file-directory))
     (with-temp-buffer
-      (letopt ((ispell-program-name "ispell"))
+      (letopt ((ispell-program-name (ispell-tests--some-backend)))
         (let ((test-dictname "english")
               (test-extcharmode "~latin3")
               (test-parser "~testparser")
@@ -806,9 +824,6 @@ ispell/ispell--run-on-word/default
   "`ispell--run-on-word' should be the simplest interface
 for checking a word."
   (skip-unless (ispell-tests--some-backend-available-p))
-  (skip-unless (equal
-                0
-                (call-process (ispell-tests--some-backend) nil nil nil "-v=
v")))
   (letopt ((ispell-program-name (ispell-tests--some-backend))
            (ispell-dictionary "default"))
     (let ((default-directory temporary-file-directory))
@@ -890,21 +905,18 @@ ispell/ispell-word/default/check-only/correct
                 (call-process (ispell-tests--some-backend) nil nil nil "-v=
v")))
   (with-environment-variables (("HOME" temporary-file-directory))
     (let ((default-directory temporary-file-directory))
-      (letopt ((ispell-program-name (ispell-tests--some-backend)))
+      (letopt ((ispell-program-name (ispell-tests--some-backend))
+               (ispell-dictionary nil))
         (ignore-errors (ispell-kill-ispell t t))
         (with-temp-buffer
           (insert
            "hello\n")
           (goto-char 0)
-          (let ((ispell-check-only t)
-                (current-point
-                 (with-current-buffer "*Messages*"
-                   (point))))
+          (ert-with-message-capture lres
             (ispell-word)
-            (with-current-buffer "*Messages*"
-              (goto-char (point-max))
-              (should ( > (search-backward "is correct" nil t)
-                        current-point)))))))))
+            (should (string-match "is correct" lres))))
+        'passed)))
+  )
=20
 (ert-deftest ispell/ispell-word/default/check-only/correct/add-init ()
   "Check that `ispell-word' works with a default
@@ -920,23 +932,21 @@ ispell/ispell-word/default/check-only/correct/add-init
                 (call-process (ispell-tests--some-backend) nil nil nil "-v=
v")))
   (with-environment-variables (("HOME" temporary-file-directory))
     (let ((default-directory temporary-file-directory))
-      (letopt ((ispell-program-name (ispell-tests--some-backend)))
+      (letopt ((ispell-program-name (ispell-tests--some-backend))
+               (ispell-dictionary nil)
+               (ispell-check-only t))
         (ignore-errors (ispell-kill-ispell t t))
         (with-temp-buffer
           (ispell-init-process) ;; this is added
           (insert
            "hello\n")
           (goto-char 0)
-          (let ((ispell-check-only t)
-                (current-point
-                 (with-current-buffer "*Messages*"
-                   (point))))
+          (ert-with-message-capture lres
             (ispell-word)
-            (with-current-buffer "*Messages*"
-              (goto-char (point-max))
-              (should (> (search-backward "is correct" nil t)
-                         current-point)))
-            ))))))
+            (should (string-match "is correct" lres)))
+          'passed
+          ))))
+  )
=20
 (ert-deftest ispell/ispell-word/default/check-only/incorrect ()
   "Check that `ispell-word' works with a default
@@ -945,75 +955,110 @@ ispell/ispell-word/default/check-only/incorrect
 be rewritten with a mock.
 This test gives it a word which does not exist."
   (skip-unless (ispell-tests--some-backend-available-p))
-  (skip-unless (equal
-                0
-                (call-process (ispell-tests--some-backend) nil nil nil "-v=
v")))
   (with-environment-variables (("HOME" temporary-file-directory))
     (let ((default-directory temporary-file-directory))
-      (letopt ((ispell-program-name (ispell-tests--some-backend)))
+      (letopt ((ispell-program-name (ispell-tests--some-backend))
+               (ispell-dictionary nil)
+               (ispell-check-only t))
         (ignore-errors (ispell-kill-ispell t t))
         (with-temp-buffer
           (insert
-           "helloooo\n")
+           "hellooooooo\n")
           (goto-char 0)
-          (let ((ispell-check-only t)
-                (current-point
-                 (with-current-buffer "*Messages*"
-                   (point))))
+          (ert-with-message-capture lres
             (ispell-word)
-            (with-current-buffer "*Messages*"
-              (goto-char (point-max))
-              (should (> (search-backward "is incorrect" nil t)
-                         current-point)))
-            ))))))
+            (should (string-match "is incorrect" lres))
+            'passed)))))
+  )
=20
 (ert-deftest ispell/ispell-region/correct ()
   "The simplest test for `ispell-region'."
   (skip-unless (ispell-tests--some-backend-available-p))
-  (skip-unless (equal
-                0
-                (call-process (ispell-tests--some-backend) nil nil nil "-v=
v")))
   (with-environment-variables (("HOME" temporary-file-directory))
     (let* ((default-directory temporary-file-directory)
-           (fake-aspell-path (expand-file-name
-                                          "./fake-aspell-new.bash"
-                                          tests-ispell-data-directory))
            (words '("hello" "test" "test" "more" "obvious" "word"))
            (text (string-join words " ")))
-      (letopt ((ispell-program-name fake-aspell-path))
+      (letopt ((ispell-program-name (ispell-tests--some-backend))
+               (ispell-dictionary nil))
         (ignore-errors (ispell-kill-ispell t t))
         (with-temp-buffer
-          (insert
-           text)
+          (insert text)
+          (goto-char (length (nth 0 words)))
+          (ert-with-message-capture lres
+            (ispell-region (point) (point-max))
+            (should (string-match "^Spell-checking region using .* with .*=
 dictionary...done" lres))
+            'passed)))))
+  )
+
+
+
+(ert-deftest ispell/ispell-region/incorrect ()
+  "The simplest test for `ispell-region'."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory)
+           (words '("hello" "tarampampamtararam" "world"))
+           (text (string-join words " ")))
+      (letopt ((ispell-program-name (ispell-tests--some-backend))
+               (ispell-dictionary nil)
+               (ispell-check-only t))
+        (ignore-errors (ispell-kill-ispell t t))
+        (with-temp-buffer
+          (insert text)
           (goto-char (length (nth 0 words)))
-          (let (;(ispell-check-only t)
-                (current-point
+          (cl-labels ((checker ()
+                        (user-error "expected error")))
+            (unwind-protect
+                (progn
+                  (advice-add 'ispell-show-choices :override #'checker)
+                  (should-error (ispell-region (point) (point-max))))
+              (advice-remove 'ispell-show-choices #'checker))))
+        'passed)))
+  )
+
+(ert-deftest ispell/ispell-buffer/correct ()
+  "The simplest test for `ispell-buffer'.
+`ispell-buffer' is a very simple wrapper around `ispell-region',
+so this test virtually mirrors the previous one."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory)
+           (words '("hello" "test" "test" "more" "obvious" "word"))
+           (text (string-join words " ")))
+      (letopt ((ispell-dictionary nil)
+               (ispell-program-name (ispell-tests--some-backend)))
+        (ignore-errors (ispell-kill-ispell t t))
+        (with-temp-buffer
+          (insert text)
+          (goto-char (length (nth 0 words)))
+          (let ((current-point
                  (with-current-buffer "*Messages*"
                    (point))))
-            (ispell-region (point) (point-max))
+            (ispell-buffer)
             (with-current-buffer "*Messages*"
               (goto-char (point-max))
-              (should (> (re-search-backward "Spell-checking region using =
.* with .* dictionary...done" nil t) current-point))
+              (should (> (re-search-backward "^Spell-checking .* using .* =
with .* dictionary...done" nil t) current-point))
               'passed)
             )))))
   )
=20
-(ert-deftest ispell/ispell-region/incorrect ()
-  "The simplest test for `ispell-region'."
+(ert-deftest ispell/ispell-buffer/incorrect ()
+  "The simplest test for `ispell-buffer'.
+`ispell-buffer' is a very simple wrapper around `ispell-region',
+so this test virtually mirrors the previous one."
   (skip-unless (ispell-tests--some-backend-available-p))
-  (skip-unless (equal
-                0
-                (call-process (ispell-tests--some-backend) nil nil nil "-v=
v")))
   (with-environment-variables (("HOME" temporary-file-directory))
     (let* ((default-directory temporary-file-directory)
-           (fake-aspell-path "aspell")
-           (words '("hello" "tarampampamtararam" "world"))
+           (words '("tarampampamtararam" "test" "test" "more" "obvious" "w=
ord" "badworddd"))
            (text (string-join words " ")))
-      (letopt ((ispell-program-name fake-aspell-path))
+      (letopt ((ispell-dictionary nil)
+               (ispell-program-name (ispell-tests--some-backend)))
         (ignore-errors (ispell-kill-ispell t t))
         (with-temp-buffer
-          (insert
-           text)
+          (insert text)
+          ;; This is intentional. The incorrect word is not in the region,
+          ;; but `ispell-buffer' should move the point to the beginning
+          ;; of the buffer.
           (goto-char (length (nth 0 words)))
           (cl-labels ((checker ()
                         (user-error "expected error")))
@@ -1021,11 +1066,413 @@ ispell/ispell-region/incorrect
                 (progn
                   (advice-add 'ispell-show-choices :override
                               #'checker)
-                  (should-error (ispell-region (point) (point-max)))
+                  (should-error (ispell-buffer))
+                  (ispell-kill-ispell nil t)
                   'passed)
               (advice-remove 'ispell-show-choices #'checker)))
           ))))
   )
=20
+(ert-deftest ispell/ispell-kill-ispell ()
+  "Test that killing ispell works."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory)
+           (words '("tarampampamtararam" "test" "test" "more" "obvious" "w=
ord"))
+           (text (string-join words " ")))
+      (with-temp-buffer
+        (with-ispell-global-dictionary nil
+          (letopt ((ispell-program-name  (ispell-tests--some-backend)))
+            (insert text)
+            (ispell-init-process)
+            (should ispell-async-processp)
+            (should (eq (ispell-process-status) 'run))
+            (ispell-kill-ispell nil t)))
+        'passed
+        )))
+  (message "lwf:debug2:ispell-program-name=3D%s:ispell-dictionary=3D%s"
+           ispell-program-name ispell-dictionary)
+  )
+
+(ert-deftest ispell/ispell/buffer ()
+  "`ispell' is just a wrapper around `ispell-region'
+and `ispell-buffer', which is also a wrapper around
+`ispell-buffer'.
+This test might seem confusing, as it does not check
+for the availability of the backend, but this does
+not matter `ispell' function does not use the
+backend."
+  (let ((transient-mark-mode t))
+    (with-temp-buffer
+      (insert "hello world test test")
+      (goto-char 2)
+      (set-mark (point))
+      (goto-char (point-max))
+      (deactivate-mark)
+      (cl-labels ((checker-buffer ()
+                    t)
+                  (checker-region (_a _b)
+                    (user-error "test failed")))
+        (unwind-protect
+            (progn
+              (advice-add 'ispell-buffer :override #'checker-buffer)
+              (advice-add 'ispell-region :override #'checker-region)
+              (ispell)
+              )
+          (progn
+            (advice-remove 'ispell-buffer #'checker-buffer)
+            (advice-remove 'ispell-region #'checker-region))))
+      ))
+  )
+
+(ert-deftest ispell/ispell/region ()
+  "`ispell' is just a wrapper around `ispell-region'
+and `ispell-buffer', which is also a wrapper around
+`ispell-buffer'."
+  (let ((transient-mark-mode t))
+    (with-temp-buffer
+      (insert "hello world test test")
+      (goto-char 2)
+      (set-mark (point))
+      (goto-char (point-max))
+      (activate-mark)
+      (cl-labels ((checker-buffer ()
+                    (user-error "test failed"))
+                  (checker-region (_a _b)
+                    t))
+        (unwind-protect
+            (progn
+              (advice-add 'ispell-buffer :override #'checker-buffer)
+              (advice-add 'ispell-region :override #'checker-region)
+              (ispell)
+              )
+          (progn
+            (advice-remove 'ispell-buffer #'checker-buffer)
+            (advice-remove 'ispell-region #'checker-region))))
+      ))
+  )
+
+(ert-deftest ispell/ispell-change-dictionary ()
+  "Simple test for changing a dictionary"
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory))
+      (letopt ((ispell-program-name (ispell-tests--some-backend)))
+        (with-temp-buffer
+          (ispell-change-dictionary "english")
+          (should (equal ispell-local-dictionary "english"))
+          (ispell-change-dictionary "default")
+          (should (equal ispell-local-dictionary nil))
+          (ispell-change-dictionary "english")
+          (should (equal ispell-local-dictionary "english"))
+          'passed
+          ))))
+  )
+
+(ert-deftest ispell/ispell-comments-and-strings/correct ()
+  "Test that `ispell-comments-and-strings' does not err
+on a correct buffer."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory))
+      (letopt ((ispell-dictionary nil)
+               (ispell-program-name (ispell-tests--some-backend)))
+        (with-temp-buffer
+          (ispell-kill-ispell t t)
+          (insert "#!/bin/bash\n"
+                  "echo \"string to check\"\n"
+                  "# commented line\n")
+          (sh-mode)
+          (ert-with-message-capture lres
+            (ispell-comments-and-strings)
+            (should (string-match "Spell-checking .* using .* with .* dict=
ionary...done" lres))))
+          'passed
+          )))
+  )
+
+(ert-deftest ispell/ispell-comments-and-strings/incorrect ()
+  "Test that `ispell-comments-and-strings' errs
+on a correct buffer."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory))
+      (letopt ((ispell-program-name (ispell-tests--some-backend)))
+        (with-temp-buffer
+          (insert "#!/bin/bash\n"
+                  "echo \"string to check\"\n"
+                  "# tarampampamtararam\n")
+          (sh-mode)
+          (ert-with-message-capture lres
+            (should-error (ispell-comments-and-strings)))
+          'passed
+          ))))
+  )
+
+(ert-deftest ispell/ispell-comment-or-string-at-point ()
+  "Test that `ispell-comment-or-string-at-point' runs two tests.
+One correct an one incorrect in the same buffer."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory))
+      (letopt ((ispell-dictionary nil)
+               (ispell-program-name (ispell-tests--some-backend)))
+        (with-temp-buffer
+          (insert "#!/bin/bash\n"
+                  "echo \"string to check\"\n"
+                  "# tarampampamtararam\n")
+          (sh-mode)
+          (goto-char 25)
+          (ert-with-message-capture lres
+            (ispell-comment-or-string-at-point)
+            (should (string-match "Spell-checking .* using .* with .* dict=
ionary...done" lres)))
+          (goto-char 47)
+          (should-error (ispell-comment-or-string-at-point))
+          'passed))))
+  )
+
+(ert-deftest ispell/ispell-pdict-save ()
+  "Simple `ispell-pdict-save' test."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory))
+      (letopt ((ispell-program-name (ispell-tests--some-backend)))
+        (with-temp-buffer
+          (insert "test")
+          (ispell-kill-ispell t t)
+          (ispell-pdict-save t t)
+          'passed))))
+  )
+
+(ert-deftest ispell/ispell-pdict-save/force ()
+  "Simple `ispell-pdict-save' test."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory))
+      (letopt ((ispell-program-name (ispell-tests--some-backend)))
+        (with-temp-buffer
+          (insert "testttttt")
+          (goto-char 1)
+          (ispell-kill-ispell t t)
+          (ispell-pdict-save t t)
+          'passed))))
+  )
+
+(ert-deftest ispell/ispell-pdict-save/modified ()
+  "Simple `ispell-pdict-save' test."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory))
+      (letopt ((ispell-program-name (ispell-tests--some-backend-available-=
p)))
+        (with-temp-buffer
+          (insert "testttttt")
+          (goto-char 1)
+          (ispell-kill-ispell t t)
+          (cl-labels ((checker (s)
+                        (should (equal s "#\n"))))
+            (unwind-protect (progn
+                              (advice-add 'ispell-send-string :override
+                                          #'checker)
+                              (let ((ispell-pdict-modified-p t))
+                                (ispell-pdict-save t nil)))
+              (advice-remove 'ispell-send-string #'checker))))
+        'passed)))
+  )
+
+(ert-deftest ispell/ispell-pdict-save/unmodified ()
+  "Simple `ispell-pdict-save' test."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory))
+      (letopt ((ispell-program-name (ispell-tests--some-backend)))
+        (with-temp-buffer
+          (insert "testttttt")
+          (goto-char 1)
+          (ispell-kill-ispell t t)
+          (cl-labels ((checker (_s)
+                        (user-error "test failed")))
+            (unwind-protect (progn
+                              (advice-add 'ispell-send-string :override
+                                          #'checker)
+                              (let ((ispell-pdict-modified-p nil))
+                                (ispell-pdict-save t nil)))
+              (advice-remove 'ispell-send-string #'checker))))
+        'passed)))
+  )
+
+(ert-deftest ispell/ispell-lookup-words/simple ()
+  "Test if `ispell-lookup-words' is runnable."
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory)
+           (tempfile (make-temp-file "emacs-ispell.el-test" nil nil "waveg=
uides")))
+      (letopt ((ispell-complete-word-dict tempfile))
+        (with-temp-buffer
+          (insert "waveguid")
+          (unwind-protect
+                (progn
+                  (should (equal
+                           (ispell-lookup-words "waveguid")
+                           '("waveguides")))
+                  (should (equal
+                           (ispell-lookup-words "sdfsdfasdfsadfasdfasdf")
+                           nil)))
+              (delete-file tempfile)))
+        'passed)))
+  )
+
+(ert-deftest ispell/ispell-complete-word/ispell-completion-at-point ()
+  "Test if `ispell-complete-word' and `ispell-completion-at-point'
+are runnable."
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory)
+           (tempfile (make-temp-file "emacs-ispell.el-test" nil nil "waveg=
uides")))
+      (ignore-errors (ispell-kill-ispell t t))
+      (with-ispell-global-dictionary nil
+        (letopt ((ispell-program-name (ispell-tests--some-backend))
+                 (ispell-complete-word-dict tempfile))
+          (with-temp-buffer
+            (insert "waveguid")
+            (cl-labels ((my-ispell-command-loop (_p _n _w _s _e)
+                          (car (nth 2 (ispell-completion-at-point)))))
+              (unwind-protect
+                  (progn
+                    (advice-add 'ispell-command-loop :override
+                                #'my-ispell-command-loop)
+                    (should (equal (car (nth 2 (ispell-completion-at-point=
)))
+                                   "waveguides"))
+                    (ispell-complete-word)
+                    (should (equal "waveguides" (buffer-string))))
+                (progn
+                  (delete-file tempfile)
+                  (advice-remove
+                   'ispell-command-loop
+                   #'my-ispell-command-loop)))))
+          'passed))))
+  )
+
+(ert-deftest ispell/ispell-complete-word-interior-frag/simple ()
+  "Test if `ispell-complete-word-interior-frag' is runnable."
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory)
+           (tempfile (make-temp-file "emacs-ispell.el-test" nil nil "waveg=
uides")))
+      (with-ispell-global-dictionary nil
+        (letopt ((ispell-program-name (ispell-tests--some-backend))
+                 (ispell-complete-word-dict tempfile))
+          (with-temp-buffer
+            (insert "waveguid")
+            (cl-labels ((my-ispell-command-loop (_p _n _w _s _e)
+                          (car (nth 2 (ispell-completion-at-point)))))
+              (unwind-protect
+                  (progn
+                    (advice-add 'ispell-command-loop :override
+                                #'my-ispell-command-loop)
+                    (goto-char 4)
+                    (ispell-complete-word-interior-frag)
+                    (should (equal "waveguides" (buffer-string))))
+                (progn
+                  (delete-file tempfile)
+                  (advice-remove
+                   'ispell-command-loop
+                   #'my-ispell-command-loop)))))
+          'passed))))
+  )
+
+(ert-deftest ispell/ispell-minor-mode/simple ()
+  "Try enabling `ispell-minor-mode' and test
+one test file."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory))
+      (letopt ((ispell-program-name (ispell-tests--some-backend))
+               (ispell-dictionary nil))
+        (with-temp-buffer
+          (text-mode)
+          (ispell-minor-mode)
+          (insert "tarampampamtararam")
+          (set--this-command-keys " ")
+          (ert-with-message-capture lres
+            (ispell-minor-check)
+            (should (string-match "TARAMPAMPAMTARARAM is incorrect" lres)))
+          )
+        'passed)))
+  )
+
+(ert-deftest ispell/ispell-message/correct ()
+  "Test that `ispell-message' works.
+`ispell-message' is intended to be run before
+a message is sent in `message-mode' or `mml-mode'."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory))
+      (letopt ((ispell-program-name (ispell-tests--some-backend))
+               (ispell-dictionary nil))
+        (with-temp-buffer
+          (insert
+           "To:
+Subject:
+From: Anon <anon@anon>
+Fcc: /tmp/234234.cb022f1a625b65b2.mainframe:2,S
+User-Agent: mu4e 1.12.9; emacs 31.0.50
+Date: Tue, 09 Sep 2025 07:43:58 +0800
+Message-ID: <878qiov7b5.fsf@mainframe>
+--text follows this line--
+Hello World
+--
+signature
+")
+          (message-mode)
+          (ert-with-message-capture lres
+            (ispell-message)
+            (should (not (string-match "is incorrect" lres)))
+            )
+          (set-buffer-modified-p nil)
+          )
+        'passed)))
+  )
+(ert-deftest ispell/ispell-message/incorrect ()
+  "Test that `ispell-message' works.
+`ispell-message' is intended to be run before
+a message is sent in `message-mode' or `mml-mode'."
+  (skip-unless (ispell-tests--some-backend-available-p))
+  (with-environment-variables (("HOME" temporary-file-directory))
+    (let* ((default-directory temporary-file-directory))
+      (letopt ((ispell-program-name (ispell-tests--some-backend)))
+        (with-temp-buffer
+          (insert
+           "To:
+Subject:
+From: Anon <anon@anon>
+Fcc: /tmp/234234.cb022f1a625b65b2.mainframe:2,S
+User-Agent: mu4e 1.12.9; emacs 31.0.50
+Date: Tue, 09 Sep 2025 07:43:58 +0800
+Message-ID: <878qiov7b5.fsf@mainframe>
+--text follows this line--
+<#part sign=3Dpgpmime>
+tarampampamtararam
+--
+signature
+")
+          (message-mode)
+          (cl-labels ((checker ()
+                        (user-error "expected error")))
+            (unwind-protect
+                (progn
+                  (advice-add 'ispell-show-choices :override #'checker)
+                  (should-error (ispell-message)))
+              (progn
+                (advice-remove 'ispell-show-choices #'checker)
+                (set-buffer-modified-p nil))))
+
+          )
+        'passed)))
+  )
+
+
+
+;;=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
+;; On this "emacs page" I want to test that customise variables change
+;; function behavior in the way are intended to do.
+
+
+
 (provide 'tests-ispell)
 ;;; tests-ispell.el ends here
--=20
2.46.4


--=-=-=
Content-Type: multipart/signed; boundary="==-=-=";
	micalg=pgp-sha256; protocol="application/pgp-signature"

--==-=-=
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

=2D-=20
Your sincerely,
Vladimir Nikishkin (MiEr, lockywolf)
(Laptop)

--==-=-=
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iHUEARYIAB0WIQSWBebxCAoqaJP8N/j71sGyD+xtqgUCaMDeqwAKCRD71sGyD+xt
qskNAP93aaDh2wj3s6AkgIX3zmYzqqXHwZSbWSoI8glG33MjwwD/QAAMDyYGL1rG
YuQ5ZArhOqSPsAP3kPWb0B42RyhBmwg=
=1u9T
-----END PGP SIGNATURE-----
--==-=-=--

--=-=-=--




Acknowledgement sent to Lockywolf <for_emacs_1@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#79417; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Tue, 25 Nov 2025 20:45:01 UTC

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