unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#51843: Ispell personal dictionary breaks other dictionaries
@ 2021-11-14 13:50 Tor Kringeland
  2021-11-14 14:31 ` Eli Zaretskii
  0 siblings, 1 reply; 5+ messages in thread
From: Tor Kringeland @ 2021-11-14 13:50 UTC (permalink / raw)
  To: 51843

Using e.g. `ispell' with an English dictionary and setting
`ispell-personal-dictionary' to, say, `/tmp/words.txt' will add new
words to this file when using this dictionary.  However, if I change the
dictionary to something else (like a Norwegian dictionary), I get the
following output

  Starting new Ispell process /usr/local/bin/aspell with english dictionary...done
  ispell-init-process: Error: Expected language "nn" but got "en".

when running `ispell-word' on a misspelled word.  By extension this
breaks `flyspell-mode'.  If I set `ispell-personal-dictionary' back to
nil, though, things works as usual.

For reference this happens on a build of Emacs 29 from 11 November using
`-Q' on macOS Catalina, though I remember having this problem for quite
some time.





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

* bug#51843: Ispell personal dictionary breaks other dictionaries
  2021-11-14 13:50 bug#51843: Ispell personal dictionary breaks other dictionaries Tor Kringeland
@ 2021-11-14 14:31 ` Eli Zaretskii
  2021-11-14 15:29   ` Tor Kringeland
       [not found]   ` <m2czn2eozf.fsf@ntnu.no>
  0 siblings, 2 replies; 5+ messages in thread
From: Eli Zaretskii @ 2021-11-14 14:31 UTC (permalink / raw)
  To: Tor Kringeland; +Cc: 51843

> From: Tor Kringeland <tor.a.s.kringeland@ntnu.no>
> Date: Sun, 14 Nov 2021 14:50:01 +0100
> 
> Using e.g. `ispell' with an English dictionary and setting
> `ispell-personal-dictionary' to, say, `/tmp/words.txt' will add new
> words to this file when using this dictionary.  However, if I change the
> dictionary to something else (like a Norwegian dictionary), I get the
> following output
> 
>   Starting new Ispell process /usr/local/bin/aspell with english dictionary...done
>   ispell-init-process: Error: Expected language "nn" but got "en".
> 
> when running `ispell-word' on a misspelled word.  By extension this
> breaks `flyspell-mode'.  If I set `ispell-personal-dictionary' back to
> nil, though, things works as usual.
> 
> For reference this happens on a build of Emacs 29 from 11 November using
> `-Q' on macOS Catalina, though I remember having this problem for quite
> some time.

Isn't this the same problem with the LANG setting in the environment?





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

* bug#51843: Ispell personal dictionary breaks other dictionaries
  2021-11-14 14:31 ` Eli Zaretskii
@ 2021-11-14 15:29   ` Tor Kringeland
       [not found]   ` <m2czn2eozf.fsf@ntnu.no>
  1 sibling, 0 replies; 5+ messages in thread
From: Tor Kringeland @ 2021-11-14 15:29 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51843

Eli Zaretskii <eliz@gnu.org> writes:

> Isn't this the same problem with the LANG setting in the environment?

I don't think so.  The issues seems to be a disparity between the
language codes for the personal dictionary (you can only have a personal
dictionary for one language) and the main dictionary.  The header of
`/tmp/words.txt' is

  personal_ws-1.1 en 1

where the `en' refers to the language/dictionary and `1' refers to the
number of words in your personal dictionary.  If I initiate a personal
dictionary with, say, Norwegian, the header looks like

  personal_ws-1.1 nn 1

and I get the opposite problem (that it works for Norwegian but not
English).

I suspect the error comes from `ispell' feeding these two disparate
language codes to `aspell': it tries to combine two dictionaries for two
different languages and `aspell' complains.  But I'm not certain this is
the case, as I don't understand well the code in `ispell.el'.

A possible fix would be to have an `ispell-personal-dictionaries-alist'
in which one could specify different personal dictionaries for different
language codes/dictionaries, which would be a feature improvement.
Another fix would be for `ispell' to check for disparity in language
code of the current dictionary and the personal dictionary, and if there
is one, to not feed the personal dictionary into `ispell-program-name'.

Are you able to reproduce the issue?

(Sorry for re-sending, I forgot to CC the mailing list.)





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

* bug#51843: Ispell personal dictionary breaks other dictionaries
       [not found]   ` <m2czn2eozf.fsf@ntnu.no>
@ 2021-11-14 16:10     ` Eli Zaretskii
  2021-11-14 16:47       ` Tor Kringeland
  0 siblings, 1 reply; 5+ messages in thread
From: Eli Zaretskii @ 2021-11-14 16:10 UTC (permalink / raw)
  To: Tor Kringeland; +Cc: 51843

[Please use Reply All to reply, so that the bug tracker gets a copy.]

> From: Tor Kringeland <tor.a.s.kringeland@ntnu.no>
> Date: Sun, 14 Nov 2021 16:28:04 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > Isn't this the same problem with the LANG setting in the environment?
> 
> I don't think so.  The issues seems to be a disparity between the
> language codes for the personal dictionary (you can only have a personal
> dictionary for one language) and the main dictionary.  The header of
> `/tmp/words.txt' is
> 
>   personal_ws-1.1 en 1
> 
> where the `en' refers to the language/dictionary and `1' refers to the
> number of words in your personal dictionary.  If I initiate a personal
> dictionary with, say, Norwegian, the header looks like
> 
>   personal_ws-1.1 nn 1
> 
> and I get the opposite problem (that it works for Norwegian but not
> English).

How do you initiate the personal dictionary?

> I suspect the error comes from `ispell' feeding these two disparate
> language codes to `aspell': it tries to combine two dictionaries for two
> different languages and `aspell' complains.  But I'm not certain this is
> the case, as I don't understand well the code in `ispell.el'.

Does the same problem happen if you invoke Aspell from the shell,
passing it the Norwegian language and the personal dictionary for
English?

> A possible fix would be to have an `ispell-personal-dictionaries-alist'
> in which one could specify different personal dictionaries for different
> language codes/dictionaries, which would be a feature improvement.
> Another fix would be for `ispell' to check for disparity in language
> code of the current dictionary and the personal dictionary, and if there
> is one, to not feed the personal dictionary into `ispell-program-name'.
> 
> Are you able to reproduce the issue?

I don't use Aspell.  I use Hunspell, where this problem doesn't exist,
and where you can have a separate personal dictionary for each
language.





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

* bug#51843: Ispell personal dictionary breaks other dictionaries
  2021-11-14 16:10     ` Eli Zaretskii
@ 2021-11-14 16:47       ` Tor Kringeland
  0 siblings, 0 replies; 5+ messages in thread
From: Tor Kringeland @ 2021-11-14 16:47 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51843

Eli Zaretskii <eliz@gnu.org> writes:

> [Please use Reply All to reply, so that the bug tracker gets a copy.]
>
>> From: Tor Kringeland <tor.a.s.kringeland@ntnu.no>
>> Date: Sun, 14 Nov 2021 16:28:04 +0100
>> 
>> Eli Zaretskii <eliz@gnu.org> writes:
>> 
>> > Isn't this the same problem with the LANG setting in the environment?
>> 
>> I don't think so.  The issues seems to be a disparity between the
>> language codes for the personal dictionary (you can only have a personal
>> dictionary for one language) and the main dictionary.  The header of
>> `/tmp/words.txt' is
>> 
>>   personal_ws-1.1 en 1
>> 
>> where the `en' refers to the language/dictionary and `1' refers to the
>> number of words in your personal dictionary.  If I initiate a personal
>> dictionary with, say, Norwegian, the header looks like
>> 
>>   personal_ws-1.1 nn 1
>> 
>> and I get the opposite problem (that it works for Norwegian but not
>> English).
>
> How do you initiate the personal dictionary?

By setting `ispell-personal-dictionary' to point at a non-existent file.
It then creates the file with the language code for the current
dictionary.

>> I suspect the error comes from `ispell' feeding these two disparate
>> language codes to `aspell': it tries to combine two dictionaries for two
>> different languages and `aspell' complains.  But I'm not certain this is
>> the case, as I don't understand well the code in `ispell.el'.
>
> Does the same problem happen if you invoke Aspell from the shell,
> passing it the Norwegian language and the personal dictionary for
> English?

Yes.  If `/tmp/words.txt' is

  personal_ws-1.1 en 1
  mysterious

running

  echo -n mystiks | aspell -a --lang=nn_NO -p /tmp/words.txt

outputs `Error: Expected language "nn" but got "en".' similar to the
error using `ispell' in Emacs.  Running the following similar command
with `hunspell'

  echo -n mystiks | hunspell -a -d nn_NO -p /tmp/words.txt

gives no complaints and suggests the word is a typo for `mystisk'.

One could argue that the behavior of `hunspell' is not the correct one
here, since we're using dictionaries of two different languages and it
could have yielded a warning at least.  But this has nothing to do with
Emacs.

But given that this is "undefined behavior" for spell checkers one can
use with `ispell', it would be good if Emacs could sanity check the
language code of the personal dictionary with that of the main one and
not include the former if there is a disparity --- or optionally being
able to set personal dictionaries for multiple language codes.





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

end of thread, other threads:[~2021-11-14 16:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-14 13:50 bug#51843: Ispell personal dictionary breaks other dictionaries Tor Kringeland
2021-11-14 14:31 ` Eli Zaretskii
2021-11-14 15:29   ` Tor Kringeland
     [not found]   ` <m2czn2eozf.fsf@ntnu.no>
2021-11-14 16:10     ` Eli Zaretskii
2021-11-14 16:47       ` Tor Kringeland

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

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

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