unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: Grammar checking
@ 2023-03-31  7:46 Payas Relekar
  2023-03-31 11:20 ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Payas Relekar @ 2023-03-31  7:46 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Gregory Heytings, rms, m.eliachevitch, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> Date: Fri, 31 Mar 2023 07:10:11 +0000
>> From: Gregory Heytings <gregory@heytings.org>
>> cc: rms@gnu.org, m.eliachevitch@posteo.de, emacs-devel@gnu.org
>>
>> > As an aside, a technology I would like to see in Emacs is grammar
>> > checking.  Last I looked, there are no free grammar-checking libraries
>> > or services out there, even just for the English language.  But if
>> > that's no longer true, then adding such capabilities to Emacs will be
>> > very welcome, I think, since word-based spell-checking is clearly not
>> > enough these days.
>>
>> I think that's no longer true, LanguageTool is available (and has been for
>> ~20 years): https://github.com/languagetool-org/languagetool .  But it's
>> written in Java...
>
> Thanks.  Maybe someone will figure out how to integrate this with
> Emacs.

There is this: https://github.com/mhayashi1120/Emacs-langtool
Demo: https://www.youtube.com/watch?v=QcFOqkLm00o

--



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

* Re: Grammar checking
  2023-03-31  7:15         ` Grammar checking (was: jinx) Eli Zaretskii
@ 2023-03-31  7:47           ` Philip Kaludercic
  2023-03-31  8:09             ` Gregory Heytings
  2023-03-31 11:23             ` Eli Zaretskii
  2023-03-31  8:40           ` Nasser Alkmim
  1 sibling, 2 replies; 73+ messages in thread
From: Philip Kaludercic @ 2023-03-31  7:47 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Gregory Heytings, rms, m.eliachevitch, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> Date: Fri, 31 Mar 2023 07:10:11 +0000
>> From: Gregory Heytings <gregory@heytings.org>
>> cc: rms@gnu.org, m.eliachevitch@posteo.de, emacs-devel@gnu.org
>> 
>> > As an aside, a technology I would like to see in Emacs is grammar 
>> > checking.  Last I looked, there are no free grammar-checking libraries 
>> > or services out there, even just for the English language.  But if 
>> > that's no longer true, then adding such capabilities to Emacs will be 
>> > very welcome, I think, since word-based spell-checking is clearly not 
>> > enough these days.
>> 
>> I think that's no longer true, LanguageTool is available (and has been for 
>> ~20 years): https://github.com/languagetool-org/languagetool .  But it's 
>> written in Java...
>
> Thanks.  Maybe someone will figure out how to integrate this with
> Emacs.

There is an implementation[0], but I found it to be awkward to work
with.

Looking around, I found a second implementation[1], but I cannot comment
on how well it works.

One of the main annoyances is that LanguageTool does not appear to be
widely packaged[2].

[0] https://github.com/mhayashi1120/Emacs-langtool/
[1] https://github.com/PillFall/languagetool.el
[2] https://repology.org/project/languagetool/versions

-- 
Philip Kaludercic



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

* Re: Grammar checking
  2023-03-31  7:47           ` Grammar checking Philip Kaludercic
@ 2023-03-31  8:09             ` Gregory Heytings
  2023-03-31  8:38               ` Philip Kaludercic
                                 ` (2 more replies)
  2023-03-31 11:23             ` Eli Zaretskii
  1 sibling, 3 replies; 73+ messages in thread
From: Gregory Heytings @ 2023-03-31  8:09 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Eli Zaretskii, rms, m.eliachevitch, emacs-devel


>
> One of the main annoyances is that LanguageTool does not appear to be 
> widely packaged[2].
>

Why would it be necessary to package it?  It's a Java app, you can 
download it from here:

https://languagetool.org/download/LanguageTool-stable.zip

and run it everywhere (provided you have a JVM installed, of course).




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

* Re: Grammar checking
  2023-03-31  8:09             ` Gregory Heytings
@ 2023-03-31  8:38               ` Philip Kaludercic
  2023-03-31  9:02                 ` Gregory Heytings
  2023-03-31 11:37               ` Lynn Winebarger
  2023-03-31 12:54               ` Peter Oliver
  2 siblings, 1 reply; 73+ messages in thread
From: Philip Kaludercic @ 2023-03-31  8:38 UTC (permalink / raw)
  To: Gregory Heytings; +Cc: Eli Zaretskii, rms, m.eliachevitch, emacs-devel

Gregory Heytings <gregory@heytings.org> writes:

>> One of the main annoyances is that LanguageTool does not appear to
>> be widely packaged[2].
>
> Why would it be necessary to package it?  It's a Java app, you can
> download it from here:
>
> https://languagetool.org/download/LanguageTool-stable.zip
>
> and run it everywhere (provided you have a JVM installed, of course).

I am not saying it is necessary, just that it would be more convenient
if I wouldn't have to manually set it up and keep it up to date.

-- 
Philip Kaludercic



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

* Re: Grammar checking
  2023-03-31  7:15         ` Grammar checking (was: jinx) Eli Zaretskii
  2023-03-31  7:47           ` Grammar checking Philip Kaludercic
@ 2023-03-31  8:40           ` Nasser Alkmim
  2023-03-31  8:45             ` Michael Eliachevitch
                               ` (2 more replies)
  1 sibling, 3 replies; 73+ messages in thread
From: Nasser Alkmim @ 2023-03-31  8:40 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Gregory Heytings, rms, m.eliachevitch, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> Date: Fri, 31 Mar 2023 07:10:11 +0000
>> From: Gregory Heytings <gregory@heytings.org>
>> cc: rms@gnu.org, m.eliachevitch@posteo.de, emacs-devel@gnu.org
>> 
>> > As an aside, a technology I would like to see in Emacs is grammar 
>> > checking.  Last I looked, there are no free grammar-checking libraries 
>> > or services out there, even just for the English language.  But if 
>> > that's no longer true, then adding such capabilities to Emacs will be 
>> > very welcome, I think, since word-based spell-checking is clearly not 
>> > enough these days.
>> 
>> I think that's no longer true, LanguageTool is available (and has been for 
>> ~20 years): https://github.com/languagetool-org/languagetool .  But it's 
>> written in Java...
>
> Thanks.  Maybe someone will figure out how to integrate this with
> Emacs.
>
>

I tried a couple of grammar checkers in Emacs, integrated via Flymake and Eglot.
The one that works best for me is this Grammarly language server [1].
Best in terms of diagnostics.
Some users may find it too intrusive, so it may be a personal preference thing.
However, it is not usable for larger buffers because it is too slow.
Maybe some narrowing functionality can help.
Also, there may be other implications regarding using Grammarly.
The LanguageTool language server is available as well, but It is not as effective as Grammarly to catch mistakes and offer suggestions.

[0] https://github.com/emacs-languagetool/flymake-languagetool
[1] https://github.com/emacs-grammarly/eglot-grammarly

-- 
Nasser Alkmim 
 +43 677 6408 9171



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

* Re: Grammar checking
  2023-03-31  8:40           ` Nasser Alkmim
@ 2023-03-31  8:45             ` Michael Eliachevitch
  2023-03-31 13:44               ` Felician Nemeth
  2023-03-31 16:03               ` Peter Oliver
  2023-03-31  8:48             ` Gregory Heytings
  2023-03-31 10:59             ` Eli Zaretskii
  2 siblings, 2 replies; 73+ messages in thread
From: Michael Eliachevitch @ 2023-03-31  8:45 UTC (permalink / raw)
  To: Nasser Alkmim; +Cc: Eli Zaretskii, Gregory Heytings, rms, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 2711 bytes --]


> I tried a couple of grammar checkers in Emacs, integrated via Flymake and Eglot.
> The one that works best for me is this Grammarly language server [1].
> Best in terms of diagnostics.
> Some users may find it too intrusive, so it may be a personal preference thing.
> However, it is not usable for larger buffers because it is too slow.
> Maybe some narrowing functionality can help.
> Also, there may be other implications regarding using Grammarly.
> The LanguageTool language server is available as well, but It is not as
> effective as Grammarly to catch mistakes and offer suggestions.
>
> [0] https://github.com/emacs-languagetool/flymake-languagetool
> [1] https://github.com/emacs-grammarly/eglot-grammarly

Most recently I also reverted to grammar checking via LSP servers with Eglot. Grammarly is powerful an I like knowing that it's powered by Common Lisp, but due to its proprietary nature it's not something that fits well with the philosophy of Emacs and the FSF.

I'm checking a LaTeX-file, where I found the "ltex" [3] language server to be useful [3]. It's basically a Languagetool language server, but aware of markdown and LaTeX syntax. But in practice it doesn't seem to do anything much smarter than just ignoring certain syntactic commands or macros. So plain Languagetool might be sufficient if one could configure it with text-faces like in `flyspell-prog-mode' or faces to ignore.

One issue with Eglot is that afaik it currently only allows for one language server to be active at a time, so if I want to check the grammar I need to switch the active LSP server. I think it was mentioned as a possible feature in the future to allow different simultaneous language servers for different LSP capabilities, maybe one main one for completion and thinks like rename and two LSP's for linting, for instance. I don't know how far that is, but I'm aware that Eglot development is very active and there are many other issues.

Writing text is one of the core functionalities of an editor and therefore I think that grammar checking could be integrated more tightly than just relying on Eglot. And as I just discussed it's something that might used in parallel to a language server. However, the strength of using LSP servers for linting is that it's easy to change grammar checking LSP servers without _any_ additional work required on Emacs side. So I'm not sure if coupling Emacs tightly to Languagetool and not allowing for alternatives is the way to go.

[3]: https://valentjn.github.io/ltex. Actually there's even a special package for that https://github.com/emacs-languagetool/eglot-ltex, but in my opinion that's not really necessary, it just adds some custom eglot configuration.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 519 bytes --]

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

* Re: Grammar checking
  2023-03-31  8:40           ` Nasser Alkmim
  2023-03-31  8:45             ` Michael Eliachevitch
@ 2023-03-31  8:48             ` Gregory Heytings
  2023-04-01 12:59               ` Lynn Winebarger
  2023-03-31 10:59             ` Eli Zaretskii
  2 siblings, 1 reply; 73+ messages in thread
From: Gregory Heytings @ 2023-03-31  8:48 UTC (permalink / raw)
  To: Nasser Alkmim; +Cc: Eli Zaretskii, rms, m.eliachevitch, emacs-devel


>
> The one that works best for me is this Grammarly language server [1].
>

It might give better results, but it's proprietary software.




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

* Re: Grammar checking
  2023-03-31  8:38               ` Philip Kaludercic
@ 2023-03-31  9:02                 ` Gregory Heytings
  0 siblings, 0 replies; 73+ messages in thread
From: Gregory Heytings @ 2023-03-31  9:02 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Eli Zaretskii, rms, m.eliachevitch, emacs-devel


>> Why would it be necessary to package it?  It's a Java app, you can 
>> download it from here:
>>
>> https://languagetool.org/download/LanguageTool-stable.zip
>>
>> and run it everywhere (provided you have a JVM installed, of course).
>
> I am not saying it is necessary, just that it would be more convenient 
> if I wouldn't have to manually set it up and keep it up to date.
>

That's true.  I guess the reason why distros package only a few Java apps 
is that the "added value" would be minimal, and the cost non-negligible 
(bandwidth and disk space).  E.g. Debian packages only about 100 Java 
apps, and if you subtract from that number the compilers, parser 
generators, linters, build tools, etc., the number is probably about 30.




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

* Re: Grammar checking
@ 2023-03-31 10:03 Payas Relekar
  0 siblings, 0 replies; 73+ messages in thread
From: Payas Relekar @ 2023-03-31 10:03 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gregory, rms, m.eliachevitch, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> Is the tool any good in practical use (as opposed to marketing-like
> presentations)?  Did someone try to use it in real use cases, like
> when writing significant amounts of prose, and if so, could those who
> did try that please share their experience and impressions?
>
> We need in Emacs a free grammar checker that really is up to the job,
> not just any free program.  The result should be Emacs features that
> we can be proud of.

Indeed. I've not used this personally, but IIRC I discovered it via
reddit. Might be worth asking there, but I no longer user reddit. :( :)
--



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

* Re: Grammar checking
  2023-03-31  8:40           ` Nasser Alkmim
  2023-03-31  8:45             ` Michael Eliachevitch
  2023-03-31  8:48             ` Gregory Heytings
@ 2023-03-31 10:59             ` Eli Zaretskii
  2023-04-02  3:11               ` Richard Stallman
  2 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2023-03-31 10:59 UTC (permalink / raw)
  To: Nasser Alkmim; +Cc: gregory, rms, m.eliachevitch, emacs-devel

> From: Nasser Alkmim <nasser.alkmim@gmail.com>
> Cc: Gregory Heytings <gregory@heytings.org>,  rms@gnu.org,
>   m.eliachevitch@posteo.de,  emacs-devel@gnu.org
> Date: Fri, 31 Mar 2023 10:40:28 +0200
> 
> I tried a couple of grammar checkers in Emacs, integrated via Flymake and Eglot.
> The one that works best for me is this Grammarly language server [1].

Grammarly is not Free Software, AFAIK, so using it in Emacs is out of
the question.



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

* Re: Grammar checking
  2023-03-31  7:46 Grammar checking Payas Relekar
@ 2023-03-31 11:20 ` Eli Zaretskii
  2023-03-31 12:55   ` Ihor Radchenko
  2023-03-31 12:59   ` Gregory Heytings
  0 siblings, 2 replies; 73+ messages in thread
From: Eli Zaretskii @ 2023-03-31 11:20 UTC (permalink / raw)
  To: Payas Relekar; +Cc: gregory, rms, m.eliachevitch, emacs-devel

> From: Payas Relekar <relekarpayas@gmail.com>
> Cc: Gregory Heytings <gregory@heytings.org>,  rms@gnu.org,
>   m.eliachevitch@posteo.de,  emacs-devel@gnu.org
> Date: Fri, 31 Mar 2023 13:16:47 +0530
> 
> >> I think that's no longer true, LanguageTool is available (and has been for
> >> ~20 years): https://github.com/languagetool-org/languagetool .  But it's
> >> written in Java...
> >
> > Thanks.  Maybe someone will figure out how to integrate this with
> > Emacs.
> 
> There is this: https://github.com/mhayashi1120/Emacs-langtool
> Demo: https://www.youtube.com/watch?v=QcFOqkLm00o

Is the tool any good in practical use (as opposed to marketing-like
presentations)?  Did someone try to use it in real use cases, like
when writing significant amounts of prose, and if so, could those who
did try that please share their experience and impressions?

We need in Emacs a free grammar checker that really is up to the job,
not just any free program.  The result should be Emacs features that
we can be proud of.



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

* Re: Grammar checking
  2023-03-31  7:47           ` Grammar checking Philip Kaludercic
  2023-03-31  8:09             ` Gregory Heytings
@ 2023-03-31 11:23             ` Eli Zaretskii
  2023-03-31 12:12               ` Peter Oliver
  2023-03-31 15:25               ` Philip Kaludercic
  1 sibling, 2 replies; 73+ messages in thread
From: Eli Zaretskii @ 2023-03-31 11:23 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: gregory, rms, m.eliachevitch, emacs-devel

> From: Philip Kaludercic <philipk@posteo.net>
> Cc: Gregory Heytings <gregory@heytings.org>,  rms@gnu.org,
>   m.eliachevitch@posteo.de,  emacs-devel@gnu.org
> Date: Fri, 31 Mar 2023 07:47:15 +0000
> 
> There is an implementation[0], but I found it to be awkward to work
> with.

Can you share more details? what is "awkward" about it?

In any case, we don't have to use the Emacs interface as-is, we could
write our own.



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

* Re: Grammar checking
  2023-03-31  8:09             ` Gregory Heytings
  2023-03-31  8:38               ` Philip Kaludercic
@ 2023-03-31 11:37               ` Lynn Winebarger
  2023-03-31 12:01                 ` Gregory Heytings
  2023-03-31 12:54               ` Peter Oliver
  2 siblings, 1 reply; 73+ messages in thread
From: Lynn Winebarger @ 2023-03-31 11:37 UTC (permalink / raw)
  To: Gregory Heytings
  Cc: Philip Kaludercic, Eli Zaretskii, Richard Stallman,
	m.eliachevitch, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 702 bytes --]

On Fri, Mar 31, 2023, 4:10 AM Gregory Heytings <gregory@heytings.org> wrote:

>
> >
> > One of the main annoyances is that LanguageTool does not appear to be
> > widely packaged[2].
> >
>
> Why would it be necessary to package it?  It's a Java app, you can
> download it from here:
>
> https://languagetool.org/download/LanguageTool-stable.zip
>
> and run it everywhere (provided you have a JVM installed, of course).
>

Do you use it?  It appears to be designed as a full-blown, multi-connection
server.  Even if it is restricted to a local address, if it were a
multi-user machine I'd be concerned about whether other users might gain
access to the text I've sent to the server for processing.

Lynn

[-- Attachment #2: Type: text/html, Size: 1440 bytes --]

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

* Re: Grammar checking
  2023-03-31 11:37               ` Lynn Winebarger
@ 2023-03-31 12:01                 ` Gregory Heytings
  2023-03-31 12:45                   ` Peter Oliver
  0 siblings, 1 reply; 73+ messages in thread
From: Gregory Heytings @ 2023-03-31 12:01 UTC (permalink / raw)
  To: Lynn Winebarger
  Cc: Philip Kaludercic, Eli Zaretskii, Richard Stallman,
	m.eliachevitch, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 452 bytes --]


>> https://languagetool.org/download/LanguageTool-stable.zip
> 
> It appears to be designed as a full-blown, multi-connection server.  
> Even if it is restricted to a local address, if it were a multi-user 
> machine I'd be concerned about whether other users might gain access to 
> the text I've sent to the server for processing.
>

The zip file above contains the three versions of the program: GUI, 
client-server, and command-line.

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

* Re: Grammar checking
  2023-03-31 11:23             ` Eli Zaretskii
@ 2023-03-31 12:12               ` Peter Oliver
  2023-03-31 15:25               ` Philip Kaludercic
  1 sibling, 0 replies; 73+ messages in thread
From: Peter Oliver @ 2023-03-31 12:12 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

On Fri, 31 Mar 2023, Eli Zaretskii wrote:

> In any case, we don't have to use the Emacs interface as-is, we could
> write our own.

There are already five LanguageTool integrations to choose from on MELPA.  I use flycheck-languagetool (for no other reason than because I happen to already use flycheck for other things).

https://melpa.org/#/?q=languagetool

-- 
Peter Oliver



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

* Re: Grammar checking
  2023-03-31 12:01                 ` Gregory Heytings
@ 2023-03-31 12:45                   ` Peter Oliver
  2023-03-31 15:29                     ` Philip Kaludercic
  0 siblings, 1 reply; 73+ messages in thread
From: Peter Oliver @ 2023-03-31 12:45 UTC (permalink / raw)
  To: Gregory Heytings, Lynn Winebarger; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 745 bytes --]

On Fri, 31 Mar 2023, Gregory Heytings wrote:

>>>  https://languagetool.org/download/LanguageTool-stable.zip
>>
>>  It appears to be designed as a full-blown, multi-connection server.  Even
>>  if it is restricted to a local address, if it were a multi-user machine
>>  I'd be concerned about whether other users might gain access to the text
>>  I've sent to the server for processing.

If it leaked text between requests, that would be a bug.  But yes, it would be tidier if it was possible to communicate with the server via, say, a socket.

> The zip file above contains the three versions of the program: GUI, 
> client-server, and command-line.

The command-line tool takes too long to start to be of practical use to us.

-- 
Peter Oliver

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

* Re: Grammar checking
  2023-03-31  8:09             ` Gregory Heytings
  2023-03-31  8:38               ` Philip Kaludercic
  2023-03-31 11:37               ` Lynn Winebarger
@ 2023-03-31 12:54               ` Peter Oliver
  2023-03-31 13:09                 ` Gregory Heytings
  2 siblings, 1 reply; 73+ messages in thread
From: Peter Oliver @ 2023-03-31 12:54 UTC (permalink / raw)
  To: Gregory Heytings; +Cc: emacs-devel

On Fri, 31 Mar 2023, Gregory Heytings wrote:

>>  One of the main annoyances is that LanguageTool does not appear to be
>>  widely packaged[2].
>
> Why would it be necessary to package it?

If a user has to jump through hoops to download, install, and configure it, could we honestly claim that the functionality was part of Emacs?  If users are willing to do all that, I would expect them to be happy to use one of the existing third-party Emacs packages for the task.

-- 
Peter Oliver



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

* Re: Grammar checking
  2023-03-31 11:20 ` Eli Zaretskii
@ 2023-03-31 12:55   ` Ihor Radchenko
  2023-03-31 13:11     ` Eli Zaretskii
  2023-03-31 12:59   ` Gregory Heytings
  1 sibling, 1 reply; 73+ messages in thread
From: Ihor Radchenko @ 2023-03-31 12:55 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Payas Relekar, gregory, rms, m.eliachevitch, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> There is this: https://github.com/mhayashi1120/Emacs-langtool
>> Demo: https://www.youtube.com/watch?v=QcFOqkLm00o
>
> Is the tool any good in practical use (as opposed to marketing-like
> presentations)?  Did someone try to use it in real use cases, like
> when writing significant amounts of prose, and if so, could those who
> did try that please share their experience and impressions?

I am using it in real-life scenarios for authoring.
LanguageTool the most sophisticated Libre grammar checker around, AFAIK.
It is not ideal and certainly miss various mistakes in comparison with
proprietary tools like Grammarly, but still much, much better than ispell
and other Libre grammar/style checkers I tried.

> We need in Emacs a free grammar checker that really is up to the job,
> not just any free program.  The result should be Emacs features that
> we can be proud of.

I am not 100% sure if LanguageTool is going to be useful universally.
While it is quite good and even allow extending itself with neural
network models, the performance is not great - even for smaller texts it
is taking a lot of CPU and requires 5-15s of seconds to check the amount
of text constituting my emails (mostly due to slow loading time though).
For larger texts, time scales up to 10s of seconds - minutes.

I usually use it similar to M-x ispell-buffer - for checking the
complete write-ups.

Also, extending LanguageTool may not be easy, unless using development
version. It has some strange design decisions - users cannot easily
supply custom local rules, AFAIK. (Or my google fu is not good enough)

That said, I had some success feeding buffer text to LanguageTool
asynchronously - paragraph by paragraph.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>



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

* Re: Grammar checking
  2023-03-31 11:20 ` Eli Zaretskii
  2023-03-31 12:55   ` Ihor Radchenko
@ 2023-03-31 12:59   ` Gregory Heytings
  2023-03-31 13:20     ` Eli Zaretskii
  1 sibling, 1 reply; 73+ messages in thread
From: Gregory Heytings @ 2023-03-31 12:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Payas Relekar, rms, m.eliachevitch, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 422 bytes --]


>
> We need in Emacs a free grammar checker that really is up to the job, 
> not just any free program.  The result should be Emacs features that we 
> can be proud of.
>

It's clearly not as accurate as non-free grammar checkers, but it does a 
reasonable job.  I don't know if that's enough to be proud of it.  To give 
you a feeling of what it does, I attach the 18 potential grammar errors it 
detects in CONTRIBUTE.

[-- Attachment #2: CONTRIBUTE.txt --]
[-- Type: text/plain, Size: 7419 bytes --]

1.) Line 12, column 1, Rule ID: MISSING_GENITIVE[2] premium: false prio=-1
Message: The genitive (’s or s’) may be missing.
Suggestion: Emacs' development; Emacs's development
...s)Contributing"'.)  ** The Emacs repository  Emacs development uses Git on Savannah for its main repository...
                                                ^^^^^^^^^^^^^^^^^                                             
More info: https://www.ef.edu/english-resources/english-grammar/forming-possessive/

2.) Line 16, column 27, Rule ID: LC_AFTER_PERIOD[1] premium: false
Message: If a new sentence starts here, add a space and start with an uppercase letter.
Suggestion:  Email;  email
...r.name 'Your Name'  git config --global user.email 'your.name@example.com'  git config --global...
                                                ^^^^^                                             

3.) Line 85, column 27, Rule ID: UPPERCASE_SENTENCE_START premium: false
Message: This sentence does not start with an uppercase letter.
Suggestion: Bug
...cs-devel@gnu.org.  ** Issue tracker (a.k.a. "bug tracker")  The Emacs issue tracker at https:...
                                                ^^^                                             
More info: https://languagetool.org/insights/post/spelling-capital-letters/

4.) Line 113, column 44, Rule ID: ALLOW_TO[1] premium: false
Message: Did you mean “reading”? Or maybe you should add a pronoun? In active voice, ‘allow’ + ‘to’ takes an object, usually a pronoun.
Suggestion: reading
...y and takes just one line -- this will allow to read NEWS in Outline mode after hiding the body o...
                                                ^^^^^^^                                             
More info: http://www.ef.com/english-resources/english-grammar/gerund-equals-infinitive/

5.) Line 126, column 1, Rule ID: SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA[1] premium: false
Message: A comma may be missing after the conjunctive/linking adverb ‘Otherwise’.
Suggestion: Otherwise,
... those by others, mark the entry with "+++". Otherwise do not mark it.  If your change requires upd...
                                                ^^^^^^^^^                                             
More info: https://languagetool.org/insights/post/linking-words/

6.) Line 156, column 31, Rule ID: EN_UNPAIRED_BRACKETS premium: false prio=-1
Message: Unpaired symbol: ‘"’ seems to be missing
...mark it in its 'ert-deftest' definition with ":tags '(:expensive-test)".  To run tests on t...
                                                ^                                             
More info: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses

7.) Line 156, column 38, Rule ID: EN_UNPAIRED_BRACKETS premium: false prio=-1
Message: Unpaired symbol: ‘'’ seems to be missing
... in its 'ert-deftest' definition with ":tags '(:expensive-test)".  To run tests on the enti...
                                                ^                                             
More info: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses

8.) Line 198, column 47, Rule ID: NEEDNT_TO_DO_AND_DONT_NEED_DO[3] premium: false
Message: Did you mean “to separate”?
Suggestion: to separate
... Use this for minor commits that do not need separate ChangeLog   entries, such as changes in etc/...
                                                ^^^^^^^^                                             

9.) Line 233, column 15, Rule ID: CONFUSION_RULE_GNU_KNEW premium: false prio=-20
Message: ‘gnu’ (large African antelope) seems less likely than ‘knew’ (past of ‘know’).
Suggestion: knew
...http: when either will do.  In   particular, gnu.org and fsf.org URLs should start with "http...
                                                ^^^                                             

10.) Line 240, column 53, Rule ID: COMMA_PARENTHESIS_WHITESPACE premium: false
Message: Don’t put a space on both sides of a quote symbol.
Suggestion: " ;  "
...ines of the commit message that start with "; " are omitted   from the generated ChangeLog.  ...
                                                ^^^                                             

11.) Line 343, column 8, Rule ID: PLUS_MINUS[2] premium: false
Message: Replace by the typographical symbol.
Suggestion: ±
...etters, digits, and characters of the   set [-+./_]; - the changes don't include unresolved ...
                                                ^^                                             

12.) Line 347, column 15, Rule ID: EN_A_VS_AN premium: false prio=-1
Message: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Suggestion: an
...space characters, and indented   lines where a SPC character is immediately followed by a T...
                                                ^                                             
More info: https://languagetool.org/insights/post/indefinite-articles/

13.) Line 402, column 53, Rule ID: FOR_WHATEVER_REASONS[1] premium: false
Message: This idiom is spelled with the singular form “reason”.
Suggestion: for whatever reason
...anges should not be merged to master at all, for whatever reasons.  These should be marked by including someth...
                                                ^^^^^^^^^^^^^^^^^^^^                                             
More info: https://www.merriam-webster.com/dictionary/for%20whatever%20reason

14.) Line 411, column 45, Rule ID: CONSECUTIVE_SPACES[1] premium: false
Message: It seems like there are too many consecutive spaces here.
Suggestion:  
... group, its own development conventions, etc.  The upstream project's code is periodically m...
                                                ^^                                             

15.) Line 438, column 1, Rule ID: UPPERCASE_SENTENCE_START premium: false
Message: This sentence does not start with an uppercase letter.
Suggestion: Or
...al/html_node/elisp/GNU-Emacs-Internals.html  or run 'info "(elisp)Tips"' or 'info "(elisp)GN...
                                                ^^                                             
More info: https://languagetool.org/insights/post/spelling-capital-letters/

16.) Line 452, column 35, Rule ID: COMMA_PARENTHESIS_WHITESPACE premium: false
Message: Don’t put a space before the full stop.
Suggestion: .
...directory  See all the files in admin/notes/* .  In particular, see admin/notes/newfile, see...
                                                ^^                                             

17.) Line 499, column 22, Rule ID: COMMA_PARENTHESIS_WHITESPACE premium: false
Message: Don’t put a space after the opening parenthesis.
Suggestion: [
...ariables: mode: outline paragraph-separate: "[  \f]*$" coding: utf-8 end: 
                                                ^^                          

18.) Line 499, column 25, Rule ID: COMMA_PARENTHESIS_WHITESPACE premium: false
Message: Don’t put a space before the closing parenthesis.
Suggestion: ]
...ables: mode: outline paragraph-separate: "[  \f]*$" coding: utf-8 end: 
                                                ^^                       
Time: 6302ms for 202 sentences (32.1 sentences/sec)

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

* Re: Grammar checking
  2023-03-31 12:54               ` Peter Oliver
@ 2023-03-31 13:09                 ` Gregory Heytings
  0 siblings, 0 replies; 73+ messages in thread
From: Gregory Heytings @ 2023-03-31 13:09 UTC (permalink / raw)
  To: Peter Oliver; +Cc: emacs-devel


>>> One of the main annoyances is that LanguageTool does not appear to be 
>>> widely packaged[2].
>> 
>> Why would it be necessary to package it?
>
> If a user has to jump through hoops to download, install, and configure 
> it, could we honestly claim that the functionality was part of Emacs?
>

A functionality of Emacs would depend on an externally installed tool, 
that's all.  Just like M-x ispell depends on an externally installed tool. 
And a user does not have to "jump through hoops to download, install, and 
configure it", it's a single (but large: 220 MB) zip file to download and 
unzip somewhere.  There is also an optional per-language ngram data set, 
which is much bigger (8.5 GB for English) but not available for all 
languages that LanguageTool supports.




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

* Re: Grammar checking
  2023-03-31 12:55   ` Ihor Radchenko
@ 2023-03-31 13:11     ` Eli Zaretskii
  2023-03-31 13:29       ` Ihor Radchenko
  2023-04-02  3:11       ` Richard Stallman
  0 siblings, 2 replies; 73+ messages in thread
From: Eli Zaretskii @ 2023-03-31 13:11 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: relekarpayas, gregory, rms, m.eliachevitch, emacs-devel

> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: Payas Relekar <relekarpayas@gmail.com>, gregory@heytings.org,
>  rms@gnu.org, m.eliachevitch@posteo.de, emacs-devel@gnu.org
> Date: Fri, 31 Mar 2023 12:55:45 +0000
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > Is the tool any good in practical use (as opposed to marketing-like
> > presentations)?  Did someone try to use it in real use cases, like
> > when writing significant amounts of prose, and if so, could those who
> > did try that please share their experience and impressions?
> 
> I am using it in real-life scenarios for authoring.
> LanguageTool the most sophisticated Libre grammar checker around, AFAIK.

That's not enough, IMO.  It should be good in absolute terms, not in
relative terms.

> It is not ideal and certainly miss various mistakes in comparison with
> proprietary tools like Grammarly, but still much, much better than ispell
> and other Libre grammar/style checkers I tried.

Comparing grammar checking with spell-checking is not useful.  They
are different technologies that are almost orthogonal.  Grammar
checking can find spelling mistakes only by sheer luck, and the
reverse is not possible even by luck.

> I am not 100% sure if LanguageTool is going to be useful universally.
> While it is quite good and even allow extending itself with neural
> network models, the performance is not great - even for smaller texts it
> is taking a lot of CPU and requires 5-15s of seconds to check the amount
> of text constituting my emails (mostly due to slow loading time though).
> For larger texts, time scales up to 10s of seconds - minutes.
> 
> I usually use it similar to M-x ispell-buffer - for checking the
> complete write-ups.
> 
> Also, extending LanguageTool may not be easy, unless using development
> version. It has some strange design decisions - users cannot easily
> supply custom local rules, AFAIK. (Or my google fu is not good enough)
> 
> That said, I had some success feeding buffer text to LanguageTool
> asynchronously - paragraph by paragraph.

Feeding by paragraphs should be good enough, if it takes a few
seconds.



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

* Re: Grammar checking
  2023-03-31 12:59   ` Gregory Heytings
@ 2023-03-31 13:20     ` Eli Zaretskii
  2023-03-31 13:59       ` Gregory Heytings
  2023-03-31 14:24       ` Ihor Radchenko
  0 siblings, 2 replies; 73+ messages in thread
From: Eli Zaretskii @ 2023-03-31 13:20 UTC (permalink / raw)
  To: Gregory Heytings; +Cc: relekarpayas, rms, m.eliachevitch, emacs-devel

> Date: Fri, 31 Mar 2023 12:59:05 +0000
> From: Gregory Heytings <gregory@heytings.org>
> cc: Payas Relekar <relekarpayas@gmail.com>, rms@gnu.org, 
>     m.eliachevitch@posteo.de, emacs-devel@gnu.org
> 
> It's clearly not as accurate as non-free grammar checkers, but it does a 
> reasonable job.  I don't know if that's enough to be proud of it.  To give 
> you a feeling of what it does, I attach the 18 potential grammar errors it 
> detects in CONTRIBUTE.

About 25% success rate.  But CONTRIBUTE sees a lot of review, so it
isn't surprising that most of the reports are false positives.  It is
better to try some document out there written by a non-native English
speaker, like README.md of some package.

Thanks.



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

* Re: Grammar checking
  2023-03-31 13:11     ` Eli Zaretskii
@ 2023-03-31 13:29       ` Ihor Radchenko
  2023-03-31 14:19         ` Eli Zaretskii
  2023-04-02  3:11       ` Richard Stallman
  1 sibling, 1 reply; 73+ messages in thread
From: Ihor Radchenko @ 2023-03-31 13:29 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: relekarpayas, gregory, rms, m.eliachevitch, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> I am using it in real-life scenarios for authoring.
>> LanguageTool the most sophisticated Libre grammar checker around, AFAIK.
>
> That's not enough, IMO.  It should be good in absolute terms, not in
> relative terms.

Well. It is hard for me to judge in absolute terms. I can only compare
with my own grammar checking by hand (Langtool is better), with feedback
from others (no significant issues after using Langtool; but it does not
tell much), and with Grammarly (it was still able to find some valid
issues after Langtool). What would be the absolute benchmark to test
"how good is Langtool"?

>> It is not ideal and certainly miss various mistakes in comparison with
>> proprietary tools like Grammarly, but still much, much better than ispell
>> and other Libre grammar/style checkers I tried.
>
> Comparing grammar checking with spell-checking is not useful.  They
> are different technologies that are almost orthogonal.  Grammar
> checking can find spelling mistakes only by sheer luck, and the
> reverse is not possible even by luck.

Some style checkers claimed grammar checking as well, AFAIR. But
I do not recall obvious libre alternatives to Langtool, which are also
focused on grammar.

>> That said, I had some success feeding buffer text to LanguageTool
>> asynchronously - paragraph by paragraph.
>
> Feeding by paragraphs should be good enough, if it takes a few
> seconds.

Depending on the size of the paragraph it may or may not fit. Though
using Langtool web server (can be run locally) should save the startup
lag.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>



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

* Re: Grammar checking
  2023-03-31  8:45             ` Michael Eliachevitch
@ 2023-03-31 13:44               ` Felician Nemeth
  2023-03-31 16:03               ` Peter Oliver
  1 sibling, 0 replies; 73+ messages in thread
From: Felician Nemeth @ 2023-03-31 13:44 UTC (permalink / raw)
  To: Michael Eliachevitch
  Cc: Nasser Alkmim, Eli Zaretskii, Gregory Heytings, rms, emacs-devel

> One issue with Eglot is that afaik it currently only allows for one
> language server to be active at a time, so if I want to check the
> grammar I need to switch the active LSP server. I think it was
> mentioned as a possible feature in the future to allow different
> simultaneous language servers for different LSP capabilities, maybe
> one main one for completion and thinks like rename and two LSP's for
> linting, for instance.

Instead of enhancing Eglot to work with multiple LSP servers in
parallel, we talked in the past about the idea of an
lsp-proxy/lsp-multiplexer that is independent of Eglot, shows itself as
an ordinary LSP client to Eglot, but also starts multiple LSP severs and
behaves as a client to these servers.

Now I'm only able to find these pointers about this:
  https://github.com/joaotavora/eglot/issues/249#issuecomment-482561502
  https://github.com/joaotavora/eglot/issues/90#issuecomment-443906068

This approach would keep Eglot relatively simple, and may result in a
project that cloud also attract contributors outside of the Emacs
community.



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

* Re: Grammar checking
  2023-03-31 13:20     ` Eli Zaretskii
@ 2023-03-31 13:59       ` Gregory Heytings
  2023-03-31 14:28         ` Eli Zaretskii
  2023-03-31 14:24       ` Ihor Radchenko
  1 sibling, 1 reply; 73+ messages in thread
From: Gregory Heytings @ 2023-03-31 13:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: relekarpayas, rms, m.eliachevitch, emacs-devel


>> It's clearly not as accurate as non-free grammar checkers, but it does 
>> a reasonable job.  I don't know if that's enough to be proud of it. 
>> To give you a feeling of what it does, I attach the 18 potential 
>> grammar errors it detects in CONTRIBUTE.
>
> About 25% success rate.  But CONTRIBUTE sees a lot of review, so it 
> isn't surprising that most of the reports are false positives.  It is 
> better to try some document out there written by a non-native English 
> speaker, like README.md of some package.
>

Do you have one such file handy?  I did not find one among those in ELPA.




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

* Re: Grammar checking
  2023-03-31 13:29       ` Ihor Radchenko
@ 2023-03-31 14:19         ` Eli Zaretskii
  0 siblings, 0 replies; 73+ messages in thread
From: Eli Zaretskii @ 2023-03-31 14:19 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: relekarpayas, gregory, rms, m.eliachevitch, emacs-devel

> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: relekarpayas@gmail.com, gregory@heytings.org, rms@gnu.org,
>  m.eliachevitch@posteo.de, emacs-devel@gnu.org
> Date: Fri, 31 Mar 2023 13:29:46 +0000
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> I am using it in real-life scenarios for authoring.
> >> LanguageTool the most sophisticated Libre grammar checker around, AFAIK.
> >
> > That's not enough, IMO.  It should be good in absolute terms, not in
> > relative terms.
> 
> Well. It is hard for me to judge in absolute terms. I can only compare
> with my own grammar checking by hand (Langtool is better), with feedback
> from others (no significant issues after using Langtool; but it does not
> tell much), and with Grammarly (it was still able to find some valid
> issues after Langtool). What would be the absolute benchmark to test
> "how good is Langtool"?

I'm quite sure such benchmarks already exist out there.  We don't need
to invent them.



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

* Re: Grammar checking
  2023-03-31 13:20     ` Eli Zaretskii
  2023-03-31 13:59       ` Gregory Heytings
@ 2023-03-31 14:24       ` Ihor Radchenko
  2023-03-31 14:39         ` Eli Zaretskii
  1 sibling, 1 reply; 73+ messages in thread
From: Ihor Radchenko @ 2023-03-31 14:24 UTC (permalink / raw)
  To: Eli Zaretskii
  Cc: Gregory Heytings, relekarpayas, rms, m.eliachevitch, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 850 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

> About 25% success rate.  But CONTRIBUTE sees a lot of review, so it
> isn't surprising that most of the reports are false positives.  It is
> better to try some document out there written by a non-native English
> speaker, like README.md of some package.

I just tried https://elpa.gnu.org/packages/doc/compat.html

The attached are full report and the report that I cleaned up a bit,
removing false positives related to texinfo format not being understood.

Also, I noticed that checking time is actually much faster compared to
what I am getting with Elisp package:

Time: 2994ms for 1271 sentences (424.5 sentences/sec)

real    0m4.078s
user    0m21.279s
sys     0m0.501s

So, the slowness I was talking about might have something to do with
https://github.com/mhayashi1120/Emacs-langtool implementation.


[-- Attachment #2: check.txt --]
[-- Type: text/plain, Size: 19869 bytes --]

9.) Line 130, column 64, Rule ID: ALL_OF_THE[1]
Message: Consider using “all the”.
Suggestion: all the
...t is installed on a recent version of Emacs, all of the definitions are disabled at compile time, su...
                                                ^^^^^^^^^^                                             

11.) Line 151, column 9, Rule ID: SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA[1]
Message: A comma may be missing after the conjunctive/linking adverb ‘However’.
Suggestion: However,
... can be called directly without this macro.  However in the case where Compat provides an alterna...
                                                ^^^^^^^                                             
More info: https://writing.wisc.edu/handbook/grammarpunct/conjadv/

13.) Line 167, column 34, Rule ID: MISSING_COMMA_AFTER_INTRODUCTORY_PHRASE[1]
Message: A comma is probably missing here.
Suggestion: now,
...f compat.el could be added to the core.  For now it is necessary to replicate the definition ...
                                                ^^^                                             
More info: http://englishplus.com/grammar/00000074.htm

15.) Line 217, column 40, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: ,
...think should belong here, a @ref{Development, , report} would be much appreciated.  @itemize...
                                                ^^                                             

16.) Line 217, column 40, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...think should belong here, a @ref{Development, , report} would be much appreciated.  @itemize...
                                                ^^                                             

24.) Line 359, column 1, Rule ID: SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA[1]
Message: A comma may be missing after the conjunctive/linking adverb ‘Typically’.
Suggestion: Typically,
...per the value of @code{text-quoting-style}.  Typically grave accent and apostrophe in the format tr...
                                                ^^^^^^^^^                                             
More info: https://writing.wisc.edu/handbook/grammarpunct/conjadv/

26.) Line 442, column 30, Rule ID: SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA[1]
Message: A comma may be missing after the conjunctive/linking adverb ‘Otherwise’.
Suggestion: Otherwise,
... case where all @var{bindings} are non-nil.  Otherwise @var{bindings} are interpreted just as they ...
                                                ^^^^^^^^^                                             
More info: https://writing.wisc.edu/handbook/grammarpunct/conjadv/

27.) Line 455, column 27, Rule ID: EN_A_VS_AN prio=-1
Message: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Suggestion: a
...ssor.  Elements of @var{forms} can either be an list of an atom.  For example, consider the ...
                                                ^^                                             

28.) Line 457, column 47, Rule ID: COMMA_COMPOUND_SENTENCE[1] prio=-1
Message: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Suggestion: , and
...or example, consider the threading expression and it's equivalent macro expansion:  @example (...
                                                ^^^^                                             
More info: https://www.grammar-monster.com/lessons/commas_before_conjunctions.htm

30.) Line 473, column 29, Rule ID: AFFECT_EFFECT[16]
Message: Did you mean “side effect” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Suggestion: side effect
...ad-first} is not restricted to arithmetic or side-effect free code. @end defmac  @defmac thread-last ...
                                                ^^^^^^^^^^^                                             
More info: https://www.merriam-webster.com/dictionary/side%20effect

31.) Line 479, column 27, Rule ID: EN_A_VS_AN prio=-1
Message: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Suggestion: a
...ssor.  Elements of @var{forms} can either be an list of an atom.  For example, consider the ...
                                                ^^                                             

32.) Line 481, column 47, Rule ID: COMMA_COMPOUND_SENTENCE[1] prio=-1
Message: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Suggestion: , and
...or example, consider the threading expression and it's equivalent macro expansion:  @example (...
                                                ^^^^                                             
More info: https://www.grammar-monster.com/lessons/commas_before_conjunctions.htm

34.) Line 497, column 29, Rule ID: AFFECT_EFFECT[16]
Message: Did you mean “side effect” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Suggestion: side effect
...ead-last} is not restricted to arithmetic or side-effect free code. @end defmac  @c copied from lispr...
                                                ^^^^^^^^^^^                                             
More info: https://www.merriam-webster.com/dictionary/side%20effect

36.) Line 506, column 26, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ill not expand it.  @xref{Expansion,Expansion,,elisp}. @end defun  @c based on lisp/emacs-li...
                                                ^^                                             

39.) Line 534, column 6, Rule ID: AGREEMENT_SENT_START[2] prio=-1
Message: Consider using the singular form after the singular determiner “This”.
Suggestion: function
...s a list, it is modified destructively. This functions returns the sorted @var{sequence} and compar...
                                                ^^^^^^^^^                                             

44.) Line 645, column 20, Rule ID: UPPERCASE_SENTENCE_START
Message: This sentence does not start with an uppercase letter.
Suggestion: Perform
...   ?n "skip to the next")        ("all"  ?! "perform for the rest without more questions")       ...
                                                ^^^^^^^                                             

46.) Line 841, column 45, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
... See @ref{Reading One Event,Reading One Event,,elisp,}. @end defun  @defun image-property De...
                                                ^^                                             

48.) Line 847, column 36, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...ge.el}.  This function can also be used as a generalised variable. @end defun  @defun file-attribute-...
                                                ^^^^^^^^^^^                                             

49.) Line 978, column 43, Rule ID: LARGE_NUMBER_OF[1]
Message: Specify a number, remove phrase, or simply use “many” or “numerous”
Suggestion: many; numerous
...cs jobs.  Additional added characters permit a large number of distinct names even in one Emacs job. @end d...
                                                ^^^^^^^^^^^^^^^^^                                             

52.) Line 1025, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
... @var{testfn}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

53.) Line 1025, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun compat...
                                                ^^^^^^^^^^^^                                             

54.) Line 1026, column 10, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ef{generalised variable,Generalized Variables,,elisp}. @end defun  @defun compat-call@ strin...
                                                ^^                                             

64.) Line 1305, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...rd @var{time}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

65.) Line 1305, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decode...
                                                ^^^^^^^^^^^^                                             

67.) Line 1311, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...rd @var{time}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

68.) Line 1311, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decode...
                                                ^^^^^^^^^^^^                                             

70.) Line 1317, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...rd @var{time}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

71.) Line 1317, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decode...
                                                ^^^^^^^^^^^^                                             

98.) Line 1524, column 54, Rule ID: COMMA_COMPOUND_SENTENCE_2[1] prio=-1
Message: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short).
Suggestion: , so
...ction scrolls the text in the selected window so that point is displayed at a specified verti...
                                                ^^^                                             

99.) Line 1577, column 30, Rule ID: THIS_NNS[2]
Message: The demonstrative ‘this’ may not agree with the plural noun ‘functions’. Did you mean “these”?
Suggestion: these
...ions,,,elisp}.  The compatibility version of this functions handles the case where @var{string...
                                                ^^^^                                             

100.) Line 1584, column 24, Rule ID: EN_COMPOUNDS prio=2
Message: This word is normally spelled with a hyphen.
Suggestion: human-readable
...nal flavor space unit Return a string with a human readable representation of @var{file-size}.  The opti...
                                                ^^^^^^^^^^^^^^                                             

105.) Line 1604, column 30, Rule ID: BY_DEFAULT_COMMA[1]
Message: Did you mean: “By default,”?
Suggestion: By default,
...ment @var{unit} determines the unit to use.  By default it will be an empty string, unless @var{flav...
                                                ^^^^^^^^^^                                             

106.) Line 1604, column 33, Rule ID: MISSING_COMMA_AFTER_INTRODUCTORY_PHRASE[1]
Message: A comma is probably missing here.
Suggestion: default,
...t @var{unit} determines the unit to use.  By default it will be an empty string, unless @var{flav...
                                                ^^^^^^^                                             
More info: http://englishplus.com/grammar/00000074.htm

107.) Line 1762, column 1, Rule ID: ADMIT_ENJOY_VB[1]
Message: The verb ‘Suggest’ is used with the gerund form.
Suggestion: Suggest running
.../alloc.c @defun garbage-collect-maybe factor Suggest to run garbage collection, if @emph{enough} data ha...
                                                ^^^^^^^^^^^^^^                                             
More info: https://www.ef.com/english-resources/english-grammar/gerund-equals-infinitive/

114.) Line 1980, column 21, Rule ID: COMMA_COMPOUND_SENTENCE[1] prio=-1
Message: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Suggestion: , and
...en @var{directory} is an accessible directory and it does not contain any files, i.e., is an e...
                                                ^^^^                                             
More info: https://www.grammar-monster.com/lessons/commas_before_conjunctions.htm

116.) Line 1995, column 59, Rule ID: EN_UNPAIRED_BRACKETS prio=-1
Message: Unpaired symbol: ‘)’ seems to be missing
...er-default-prompt-format} is a format string (defaulting to @samp{" (default %s)"} that say...
                                                ^                                             

119.) Line 2089, column 32, Rule ID: EN_A_VS_AN prio=-1
Message: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Suggestion: an
...of @var{red}, @var{green} and @code{blue} is a integer value between 0 and 65535.  The spec...
                                                ^                                             

133.) Line 2493, column 1, Rule ID: ENGLISH_WORD_REPEAT_BEGINNING_RULE prio=-50
Message: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
...ode{nil}, it should be a string or a buffer. If @code{nil}, this defaults to the current buf...
                                                ^^                                             

135.) Line 2539, column 45, Rule ID: COMMA_COMPOUND_SENTENCE_2[3] prio=-1
Message: Use a comma before ‘but’ if it connects two independent clauses (unless they are closely connected and short).
Suggestion: , but
... that is not in the form of ELisp source code but something like machine code or byte code ins...
                                                ^^^^                                             

139.) Line 2627, column 58, Rule ID: BY_DEFAULT_COMMA[1]
Message: Did you mean: “By default,”?
Suggestion: By default,
...ion}, as defined for @code{buffer-match-p}.  By default all buffers are considered, but this can be ...
                                                ^^^^^^^^^^                                             

140.) Line 2733, column 13, Rule ID: EN_COMPOUNDS prio=2
Message: This word is normally spelled as one.
Suggestion: keystrokes
... A key is a string consisting of one or more key strokes.  The key strokes are separated by single sp...
                                                ^^^^^^^^^^^                                             

141.) Line 2733, column 31, Rule ID: EN_COMPOUNDS prio=2
Message: This word is normally spelled as one.
Suggestion: keystrokes
... consisting of one or more key strokes.  The key strokes are separated by single space characters.  E...
                                                ^^^^^^^^^^^                                             

142.) Line 2736, column 6, Rule ID: EN_COMPOUNDS prio=2
Message: This word is normally spelled as one.
Suggestion: keystroke
... separated by single space characters.  Each key stroke is either a single character, or the name of...
                                                ^^^^^^^^^^                                             

143.) Line 2737, column 56, Rule ID: EN_COMPOUNDS prio=2
Message: This word is normally spelled as one.
Suggestion: keystroke
...rounded by angle brackets.  In addition, any key stroke may be preceded by one or more modifier keys...
                                                ^^^^^^^^^^                                             

148.) Line 2913, column 9, Rule ID: LARGE_NUMBER_OF[1]
Message: Specify a number, remove phrase, or simply use “many” or “numerous”
Suggestion: many; numerous
... modes, however, you frequently have to bind a large number of keys at once, and using @code{keymap-set} on...
                                                ^^^^^^^^^^^^^^^^^                                             

149.) Line 2914, column 43, Rule ID: SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA[1]
Message: A comma may be missing after the conjunctive/linking adverb ‘Instead’.
Suggestion: Instead,
...on them all can be tedious and error-prone.  Instead you can use @code{define-keymap}, which crea...
                                                ^^^^^^^                                             
More info: https://writing.wisc.edu/handbook/grammarpunct/conjadv/

151.) Line 2951, column 48, Rule ID: EN_UNPAIRED_BRACKETS prio=-1
Message: Unpaired symbol: ‘)’ seems to be missing
...ode{make-keymap}) instead of a sparse keymap (as from @code{make-sparse-keymap} (@pxref{Cre...
                                                ^                                             

154.) Line 3080, column 39, Rule ID: ENGLISH_WORD_REPEAT_RULE prio=-1
Message: Possible typo: you repeated a word
Suggestion: variable
...uments to the macro being written, so @code{(variable variable)} may be abbreviated to just @code{variable}...
                                                ^^^^^^^^^^^^^^^^^                                             

155.) Line 3086, column 1, Rule ID: EN_UNPAIRED_BRACKETS prio=-1
Message: Unpaired symbol: ‘)’ seems to be missing
... For example, consider this macro:  @example (defmacro my-list (x y &rest forms)   (let ((x...
                                                ^                                             


172.) Line 3167, column 41, Rule ID: EN_UNPAIRED_BRACKETS prio=-1
Message: Unpaired symbol: ‘)’ seems to be missing
...-key This function is like @code{keymap-set} (@pxref{Changing Key Bindings,,,elisp}, but un...
                                                ^                                             

173.) Line 3279, column 52, Rule ID: EN_A_VS_AN prio=-1
Message: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Suggestion: an
...tions or performance issues. We also provide a @uref{https://lists.sr.ht/~pkal/compat-devel...
                                                ^                                             
Time: 3395ms for 1271 sentences (374.4 sentences/sec)

[-- Attachment #3: check-orig.txt --]
[-- Type: text/plain, Size: 63369 bytes --]

1.) Line 1, column 14, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
\input texinfo    @c -*- texinfo -*- @c %**start of header @set...
              ^^^^                                             

2.) Line 28, column 21, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...category Emacs @direntry * Compat: (compat).     Compatibility Library for Emacs Lisp. @end di...
                                                ^^^^                                             

3.) Line 72, column 15, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...ge:: * Limitations::  Support  * Emacs 25.1::                   Compatibility support for Emacs 25.1 * Emacs ...
                                                ^^^^^^^^^^^^^^^^^^^                                             

4.) Line 73, column 15, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...ibility support for Emacs 25.1 * Emacs 26.1::                   Compatibility support for Emacs 26.1 * Emacs ...
                                                ^^^^^^^^^^^^^^^^^^^                                             

5.) Line 74, column 15, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...ibility support for Emacs 26.1 * Emacs 27.1::                   Compatibility support for Emacs 27.1 * Emacs ...
                                                ^^^^^^^^^^^^^^^^^^^                                             

6.) Line 75, column 15, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...ibility support for Emacs 27.1 * Emacs 28.1::                   Compatibility support for Emacs 28.1 * Emacs ...
                                                ^^^^^^^^^^^^^^^^^^^                                             

7.) Line 76, column 15, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...ibility support for Emacs 28.1 * Emacs 29.1::                   Compatibility support for Emacs 29.1  @end de...
                                                ^^^^^^^^^^^^^^^^^^^                                             

8.) Line 122, column 1, Rule ID: UPPERCASE_SENTENCE_START
Message: This sentence does not start with an uppercase letter.
Suggestion: Should
... a  @example (require 'compat) @end example  should be added early on. In packages which are par...
                                                ^^^^^^                                             

9.) Line 130, column 64, Rule ID: ALL_OF_THE[1]
Message: Consider using “all the”.
Suggestion: all the
...t is installed on a recent version of Emacs, all of the definitions are disabled at compile time, su...
                                                ^^^^^^^^^^                                             

10.) Line 145, column 17, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...fn) ;; Call extended `assoc' (mapcan fun seq)                     ;; Call newly added `mapcan' @end example  @d...
                                                ^^^^^^^^^^^^^^^^^^^^^                                             

11.) Line 151, column 9, Rule ID: SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA[1]
Message: A comma may be missing after the conjunctive/linking adverb ‘However’.
Suggestion: However,
... can be called directly without this macro.  However in the case where Compat provides an alterna...
                                                ^^^^^^^                                             
More info: https://writing.wisc.edu/handbook/grammarpunct/conjadv/

12.) Line 166, column 68, Rule ID: LC_AFTER_PERIOD[1]
Message: If a new sentence starts here, add a space and start with an uppercase letter.
Suggestion:  El;  el
....  Alternatively a minimal version of compat.el could be added to the core.  For now it is n...
                                                ^^                                             

13.) Line 167, column 34, Rule ID: MISSING_COMMA_AFTER_INTRODUCTORY_PHRASE[1]
Message: A comma is probably missing here.
Suggestion: now,
...f compat.el could be added to the core.  For now it is necessary to replicate the definition ...
                                                ^^^                                             
More info: http://englishplus.com/grammar/00000074.htm

14.) Line 191, column 36, Rule ID: EN_A_VS_AN prio=-1
Message: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Suggestion: an
... relevant changes are made.  We also provide a @uref{https://lists.sr.ht/~pkal/compat-devel...
                                                ^                                             

15.) Line 217, column 40, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: ,
...think should belong here, a @ref{Development, , report} would be much appreciated.  @itemize...
                                                ^^                                             

16.) Line 217, column 40, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...think should belong here, a @ref{Development, , report} would be much appreciated.  @itemize...
                                                ^^                                             

17.) Line 298, column 15, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...for each Emacs version.  @menu * Emacs 25.1::                   Compatibility support for Emacs 25.1 * Emacs ...
                                                ^^^^^^^^^^^^^^^^^^^                                             

18.) Line 299, column 15, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...ibility support for Emacs 25.1 * Emacs 26.1::                   Compatibility support for Emacs 26.1 * Emacs ...
                                                ^^^^^^^^^^^^^^^^^^^                                             

19.) Line 300, column 15, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...ibility support for Emacs 26.1 * Emacs 27.1::                   Compatibility support for Emacs 27.1 * Emacs ...
                                                ^^^^^^^^^^^^^^^^^^^                                             

20.) Line 301, column 15, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...ibility support for Emacs 27.1 * Emacs 28.1::                   Compatibility support for Emacs 28.1 * Emacs ...
                                                ^^^^^^^^^^^^^^^^^^^                                             

21.) Line 302, column 15, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...ibility support for Emacs 28.1 * Emacs 29.1::                   Compatibility support for Emacs 29.1 @end men...
                                                ^^^^^^^^^^^^^^^^^^^                                             

22.) Line 334, column 36, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space before the full stop.
Suggestion: .
...e or more cons cells of the form @code{(start . end)}.  It will have more than one cons cell...
                                                ^^                                             

23.) Line 334, column 39, Rule ID: UPPERCASE_SENTENCE_START
Message: This sentence does not start with an uppercase letter.
Suggestion: End
...r more cons cells of the form @code{(start . end)}.  It will have more than one cons cell whe...
                                                ^^^                                             

24.) Line 359, column 1, Rule ID: SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA[1]
Message: A comma may be missing after the conjunctive/linking adverb ‘Typically’.
Suggestion: Typically,
...per the value of @code{text-quoting-style}.  Typically grave accent and apostrophe in the format tr...
                                                ^^^^^^^^^                                             
More info: https://writing.wisc.edu/handbook/grammarpunct/conjadv/

25.) Line 402, column 20, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space before the full stop.
Suggestion: .
...nds the first association @w{@code{(@var{key} . @var{value})}} by comparing @var{key} with @...
                                                ^^                                             

26.) Line 442, column 30, Rule ID: SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA[1]
Message: A comma may be missing after the conjunctive/linking adverb ‘Otherwise’.
Suggestion: Otherwise,
... case where all @var{bindings} are non-nil.  Otherwise @var{bindings} are interpreted just as they ...
                                                ^^^^^^^^^                                             
More info: https://writing.wisc.edu/handbook/grammarpunct/conjadv/

27.) Line 455, column 27, Rule ID: EN_A_VS_AN prio=-1
Message: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Suggestion: a
...ssor.  Elements of @var{forms} can either be an list of an atom.  For example, consider the ...
                                                ^^                                             

28.) Line 457, column 47, Rule ID: COMMA_COMPOUND_SENTENCE[1] prio=-1
Message: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Suggestion: , and
...or example, consider the threading expression and it's equivalent macro expansion:  @example (...
                                                ^^^^                                             
More info: https://www.grammar-monster.com/lessons/commas_before_conjunctions.htm

29.) Line 465, column 3, Rule ID: DASH_RULE[2]
Message: Consider using an m-dash if you do not want to join two words.
Suggestion: —
...xample (thread-first   5   (+ 20)   (/ 25)   -   (+ 40)) @equiv{} (+ (- (/ (+ 5 20) 25)) 40...
                                                ^                                             
More info: https://en.wikipedia.org/wiki/Dash#Em_dash

30.) Line 473, column 29, Rule ID: AFFECT_EFFECT[16]
Message: Did you mean “side effect” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Suggestion: side effect
...ad-first} is not restricted to arithmetic or side-effect free code. @end defmac  @defmac thread-last ...
                                                ^^^^^^^^^^^                                             
More info: https://www.merriam-webster.com/dictionary/side%20effect

31.) Line 479, column 27, Rule ID: EN_A_VS_AN prio=-1
Message: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Suggestion: a
...ssor.  Elements of @var{forms} can either be an list of an atom.  For example, consider the ...
                                                ^^                                             

32.) Line 481, column 47, Rule ID: COMMA_COMPOUND_SENTENCE[1] prio=-1
Message: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Suggestion: , and
...or example, consider the threading expression and it's equivalent macro expansion:  @example (...
                                                ^^^^                                             
More info: https://www.grammar-monster.com/lessons/commas_before_conjunctions.htm

33.) Line 489, column 3, Rule ID: DASH_RULE[2]
Message: Consider using an m-dash if you do not want to join two words.
Suggestion: —
...xample (thread-first   5   (+ 20)   (/ 25)   -   (+ 40)) @equiv{} (+ 40 (- (/ 25 (+ 20 5)))...
                                                ^                                             
More info: https://en.wikipedia.org/wiki/Dash#Em_dash

34.) Line 497, column 29, Rule ID: AFFECT_EFFECT[16]
Message: Did you mean “side effect” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Suggestion: side effect
...ead-last} is not restricted to arithmetic or side-effect free code. @end defmac  @c copied from lispr...
                                                ^^^^^^^^^^^                                             
More info: https://www.merriam-webster.com/dictionary/side%20effect

35.) Line 506, column 16, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Expansion
...xpand-1} will not expand it.  @xref{Expansion,Expansion,,elisp}. @end defun  @c based on lisp/emacs-...
                                                ^^^^^^^^^^                                             

36.) Line 506, column 26, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ill not expand it.  @xref{Expansion,Expansion,,elisp}. @end defun  @c based on lisp/emacs-li...
                                                ^^                                             

37.) Line 516, column 53, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space before the full stop.
Suggestion: .
... function @var{body} into @code{(declarations . exps)}. @end defun  @defun bool-vector &rest...
                                                ^^                                             

38.) Line 516, column 56, Rule ID: UPPERCASE_SENTENCE_START
Message: This sentence does not start with an uppercase letter.
Suggestion: Exps
...nction @var{body} into @code{(declarations . exps)}. @end defun  @defun bool-vector &rest obje...
                                                ^^^^                                             

39.) Line 534, column 6, Rule ID: AGREEMENT_SENT_START[2] prio=-1
Message: Consider using the singular form after the singular determiner “This”.
Suggestion: function
...s a list, it is modified destructively. This functions returns the sorted @var{sequence} and compar...
                                                ^^^^^^^^^                                             

40.) Line 642, column 21, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space on both sides of a quote symbol.
Suggestion: 
... ((read-answer-short t))   (read-answer "Foo "      '(("yes"  ?y "perform the action")      ...
                                                ^^                                             

41.) Line 643, column 14, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...short t))   (read-answer "Foo "      '(("yes"  ?y "perform the action")        ("no"   ?n "s...
                                                ^^                                             

42.) Line 644, column 13, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
...("yes"  ?y "perform the action")        ("no"   ?n "skip to the next")        ("all"  ?! "per...
                                                ^^^                                             

43.) Line 645, column 14, Rule ID: WHITESPACE_RULE
Message: Possible typo: you repeated a whitespace
Suggestion:  
... ("no"   ?n "skip to the next")        ("all"  ?! "perform for the rest without more questio...
                                                ^^                                             

44.) Line 645, column 20, Rule ID: UPPERCASE_SENTENCE_START
Message: This sentence does not start with an uppercase letter.
Suggestion: Perform
...   ?n "skip to the next")        ("all"  ?! "perform for the rest without more questions")       ...
                                                ^^^^^^^                                             

45.) Line 841, column 27, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Reading
...quests more help.  See @ref{Reading One Event,Reading One Event,,elisp,}. @end defun  @defun image...
                                                ^^^^^^^^                                             

46.) Line 841, column 45, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
... See @ref{Reading One Event,Reading One Event,,elisp,}. @end defun  @defun image-property De...
                                                ^^                                             

47.) Line 841, column 52, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , }
...ef{Reading One Event,Reading One Event,,elisp,}. @end defun  @defun image-property Defined i...
                                                ^^                                             

48.) Line 847, column 36, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...ge.el}.  This function can also be used as a generalised variable. @end defun  @defun file-attribute-...
                                                ^^^^^^^^^^^                                             

49.) Line 978, column 43, Rule ID: LARGE_NUMBER_OF[1]
Message: Specify a number, remove phrase, or simply use “many” or “numerous”
Suggestion: many; numerous
...cs jobs.  Additional added characters permit a large number of distinct names even in one Emacs job. @end d...
                                                ^^^^^^^^^^^^^^^^^                                             

50.) Line 1015, column 65, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space before the full stop.
Suggestion: .
...nds the first association @w{@code{(@var{key} . @var{value})}} by comparing @var{key} with @...
                                                ^^                                             

51.) Line 1022, column 32, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , }
...o @code{eq}.  @xref{Association Lists,,,elisp,}.  The compatibility version handles the opti...
                                                ^^                                             

52.) Line 1025, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
... @var{testfn}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

53.) Line 1025, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun compat...
                                                ^^^^^^^^^^^^                                             

54.) Line 1026, column 10, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ef{generalised variable,Generalized Variables,,elisp}. @end defun  @defun compat-call@ strin...
                                                ^^                                             

55.) Line 1031, column 32, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space after the opening parenthesis.
Suggestion: [
...@var{string}. @var{regexp} defaults to @samp{[ \t\n\r]+}.  @xref{Creating Strings,,,elisp}. ...
                                                ^^                                             

56.) Line 1040, column 32, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space after the opening parenthesis.
Suggestion: [
...@var{string}. @var{regexp} defaults to @samp{[ \t\n\r]+}.  @xref{Creating Strings,,,elisp}. ...
                                                ^^                                             

57.) Line 1050, column 10, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space after the opening parenthesis.
Suggestion: [
...@var{string}.  Both regexps default to @samp{[ \t\n\r]+}.  @xref{Creating Strings,,,elisp}. ...
                                                ^^                                             

58.) Line 1097, column 11, Rule ID: FILE_EXTENSIONS_CASE[1]
Message: File types are normally capitalized.
Suggestion: SVG
...@code{string-version-lessp}. @item The @code{svg} library. @item The @code{xdg} library. @end...
                                                ^^^                                             

59.) Line 1140, column 59, Rule ID: EN_UNPAIRED_BRACKETS prio=-1
Message: Unpaired symbol: ‘"’ seems to be missing
...as current when the minibuffer was activated." @end defun  @c based on lisp/minibuffer.el @...
                                                ^                                             

60.) Line 1166, column 9, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
...its argument is a large integer, and returns @code{t} if so, @code{nil} otherwise.  Unlike small ...
                                                ^^^^^^^                                             

61.) Line 1173, column 9, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
...its argument is a small integer, and returns @code{t} if so, @code{nil} otherwise.  Small integer...
                                                ^^^^^^^                                             

62.) Line 1203, column 21, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space before the full stop.
Suggestion: .
...lt{} 3 @end group @group (proper-list-p '(a b . c)) @result{} nil @end group @end example  @...
                                                ^^                                             

63.) Line 1277, column 21, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space before the full stop.
Suggestion: .
...in @var{tree}.  @example (flatten-tree '(1 (2 . 3) nil (4 5 (6)) 7)) @result{}(1 2 3 4 5 6 7...
                                                ^^                                             

64.) Line 1305, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...rd @var{time}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

65.) Line 1305, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decode...
                                                ^^^^^^^^^^^^                                             

66.) Line 1306, column 10, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ef{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decoded-time-minut...
                                                ^^                                             

67.) Line 1311, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...rd @var{time}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

68.) Line 1311, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decode...
                                                ^^^^^^^^^^^^                                             

69.) Line 1312, column 10, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ef{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decoded-time-hour ...
                                                ^^                                             

70.) Line 1317, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...rd @var{time}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

71.) Line 1317, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decode...
                                                ^^^^^^^^^^^^                                             

72.) Line 1318, column 10, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ef{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decoded-time-day t...
                                                ^^                                             

73.) Line 1323, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...rd @var{time}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

74.) Line 1323, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decode...
                                                ^^^^^^^^^^^^                                             

75.) Line 1324, column 10, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ef{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decoded-time-month...
                                                ^^                                             

76.) Line 1329, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...rd @var{time}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

77.) Line 1329, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decode...
                                                ^^^^^^^^^^^^                                             

78.) Line 1330, column 10, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ef{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decoded-time-year ...
                                                ^^                                             

79.) Line 1335, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...rd @var{time}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

80.) Line 1335, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decode...
                                                ^^^^^^^^^^^^                                             

81.) Line 1336, column 10, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ef{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decoded-time-weekd...
                                                ^^                                             

82.) Line 1341, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...rd @var{time}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

83.) Line 1341, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decode...
                                                ^^^^^^^^^^^^                                             

84.) Line 1342, column 10, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ef{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decoded-time-dst t...
                                                ^^                                             

85.) Line 1348, column 6, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...rd @var{time}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

86.) Line 1348, column 26, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decode...
                                                ^^^^^^^^^^^^                                             

87.) Line 1348, column 48, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ef{generalised variable,Generalized Variables,,elisp}. @end defun  @defun decoded-time-zone ...
                                                ^^                                             

88.) Line 1353, column 31, Rule ID: EN_WORD_COHERENCY
Message: Do not mix variants of the same word (‘generalise’ and ‘generalize’) within a single text.
Suggestion: generalized
...rd @var{time}. It can also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end...
                                                ^^^^^^^^^^^                                             

89.) Line 1353, column 51, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Generalized
...n also be used as a @ref{generalised variable,Generalized Variables,,elisp}. @end defun  @c copied fro...
                                                ^^^^^^^^^^^^                                             

90.) Line 1354, column 10, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ef{generalised variable,Generalized Variables,,elisp}. @end defun  @c copied from lisp/emacs...
                                                ^^                                             

91.) Line 1364, column 14, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
....texi @defun time-equal-p t1 t2 This returns @code{t} if the two time values @var{t1} and @var{t2...
                                                ^^^^^^^                                             

92.) Line 1392, column 38, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...tory}). @xref{Locating Files, executable-find,,elisp}, for the details of this search. @cind...
                                                ^^                                             

93.) Line 1439, column 31, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
... is returned.  @var{predicate} can either be @code{t} (which is a synonym for @code{equal}), @cod...
                                                ^^^^^^^                                             

94.) Line 1482, column 43, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space on both sides of a quote symbol.
Suggestion: 
...ch will result in the list @samp{("This is a " "and here's " "and this is the end")} (only r...
                                                ^^                                             

95.) Line 1482, column 57, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space on both sides of a quote symbol.
Suggestion: 
... in the list @samp{("This is a " "and here's " "and this is the end")} (only reversed, since...
                                                ^^                                             

96.) Line 1486, column 56, Rule ID: ENGLISH_WORD_REPEAT_RULE prio=-1
Message: Possible typo: you repeated a word
Suggestion: nil
...tq match (text-property-search-forward 'face nil nil))   (push (buffer-substring (prop-match-begi...
                                                ^^^^^^^                                             

97.) Line 1501, column 59, Rule ID: ENGLISH_WORD_REPEAT_RULE prio=-1
Message: Possible typo: you repeated a word
Suggestion: nil
...match (text-property-search-forward 'shr-url nil nil))   (push (prop-match-value match) urls)) @e...
                                                ^^^^^^^                                             

98.) Line 1524, column 54, Rule ID: COMMA_COMPOUND_SENTENCE_2[1] prio=-1
Message: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short).
Suggestion: , so
...ction scrolls the text in the selected window so that point is displayed at a specified verti...
                                                ^^^                                             

99.) Line 1577, column 30, Rule ID: THIS_NNS[2]
Message: The demonstrative ‘this’ may not agree with the plural noun ‘functions’. Did you mean “these”?
Suggestion: these
...ions,,,elisp}.  The compatibility version of this functions handles the case where @var{string...
                                                ^^^^                                             

100.) Line 1584, column 24, Rule ID: EN_COMPOUNDS prio=2
Message: This word is normally spelled with a hyphen.
Suggestion: human-readable
...nal flavor space unit Return a string with a human readable representation of @var{file-size}.  The opti...
                                                ^^^^^^^^^^^^^^                                             

101.) Line 1592, column 11, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{M’ is not standard English. Did you mean “@code’M” (curly apostrophe) or “@code'M” (straight apostrophe)?
Suggestion: @code’M; @code'M
...ytes and the produced suffixes are @code{k}, @code{M}, @code{G}, @code{T}, etc. @item @code{iec},...
                                                ^^^^^^^                                             

102.) Line 1592, column 31, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{T’ is not standard English. Did you mean “@code’T” (curly apostrophe) or “@code'T” (straight apostrophe)?
Suggestion: @code’T; @code'T
...d suffixes are @code{k}, @code{M}, @code{G}, @code{T}, etc. @item @code{iec}, each kilobyte is 10...
                                                ^^^^^^^                                             

103.) Line 1598, column 24, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{M’ is not standard English. Did you mean “@code’M” (curly apostrophe) or “@code'M” (straight apostrophe)?
Suggestion: @code’M; @code'M
...ytes and the produced suffixes are @code{k}, @code{M}, @code{G}, @code{T}, etc. @end itemize  The...
                                                ^^^^^^^                                             

104.) Line 1598, column 44, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{T’ is not standard English. Did you mean “@code’T” (curly apostrophe) or “@code'T” (straight apostrophe)?
Suggestion: @code’T; @code'T
...d suffixes are @code{k}, @code{M}, @code{G}, @code{T}, etc. @end itemize  The compatibility versi...
                                                ^^^^^^^                                             

105.) Line 1604, column 30, Rule ID: BY_DEFAULT_COMMA[1]
Message: Did you mean: “By default,”?
Suggestion: By default,
...ment @var{unit} determines the unit to use.  By default it will be an empty string, unless @var{flav...
                                                ^^^^^^^^^^                                             

106.) Line 1604, column 33, Rule ID: MISSING_COMMA_AFTER_INTRODUCTORY_PHRASE[1]
Message: A comma is probably missing here.
Suggestion: default,
...t @var{unit} determines the unit to use.  By default it will be an empty string, unless @var{flav...
                                                ^^^^^^^                                             
More info: http://englishplus.com/grammar/00000074.htm

107.) Line 1762, column 1, Rule ID: ADMIT_ENJOY_VB[1]
Message: The verb ‘Suggest’ is used with the gerund form.
Suggestion: Suggest running
.../alloc.c @defun garbage-collect-maybe factor Suggest to run garbage collection, if @emph{enough} data ha...
                                                ^^^^^^^^^^^^^^                                             
More info: https://www.ef.com/english-resources/english-grammar/gerund-equals-infinitive/

108.) Line 1780, column 55, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
...tion ignores any @var{arguments} and returns @code{t}.  @xref{Calling Functions,,,elisp}. @end de...
                                                ^^^^^^^                                             

109.) Line 1816, column 31, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space after the opening parenthesis.
Suggestion: [
...int.  @example (replace-regexp-in-region "foo[ \t]+bar" "foobar") @end example @xref{Search ...
                                                ^^                                             

110.) Line 1824, column 46, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘string}s’ is not standard English. Did you mean “string’s” (curly apostrophe) or “string's” (straight apostrophe)?
Suggestion: string’s; string's
...but searches for, and replaces, literal @var{string}s instead of regular expressions.  @xref{Searc...
                                                ^^^^^^^^                                             

111.) Line 1974, column 27, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , File
... non-@code{nil}).  @xref{File Name Components,File Name Components,,elisp}. @end defun  @c copi...
                                                ^^^^^                                             

112.) Line 1974, column 48, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ref{File Name Components,File Name Components,,elisp}. @end defun  @c copied from lispref/fi...
                                                ^^                                             

113.) Line 1979, column 31, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
...ty-p directory This utility function returns @code{t} if given @var{directory} is an accessible d...
                                                ^^^^^^^                                             

114.) Line 1980, column 21, Rule ID: COMMA_COMPOUND_SENTENCE[1] prio=-1
Message: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Suggestion: , and
...en @var{directory} is an accessible directory and it does not contain any files, i.e., is an e...
                                                ^^^^                                             
More info: https://www.grammar-monster.com/lessons/commas_before_conjunctions.htm

115.) Line 1981, column 53, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive dots
Suggestion: .; …
...irectory.  It will ignore @samp{.} and @samp{..} on systems that return them as files in a d...
                                                ^^                                             

116.) Line 1995, column 59, Rule ID: EN_UNPAIRED_BRACKETS prio=-1
Message: Unpaired symbol: ‘)’ seems to be missing
...er-default-prompt-format} is a format string (defaulting to @samp{" (default %s)"} that say...
                                                ^                                             

117.) Line 2074, column 25, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , System
..." nil t)) @end lisp  @xref{System Environment,System Environment,,elisp}. @end defmac  @c based o...
                                                ^^^^^^^                                             

118.) Line 2074, column 44, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...  @xref{System Environment,System Environment,,elisp}. @end defmac  @c based on lisp/faces.e...
                                                ^^                                             

119.) Line 2089, column 32, Rule ID: EN_A_VS_AN prio=-1
Message: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Suggestion: an
...of @var{red}, @var{green} and @code{blue} is a integer value between 0 and 65535.  The spec...
                                                ^                                             

120.) Line 2107, column 21, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Changing
...uivalent symbolic form.  @xref{Changing Files,Changing Files,,elisp}. @end defun  @c copied from li...
                                                ^^^^^^^^^                                             

121.) Line 2107, column 36, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ic form.  @xref{Changing Files,Changing Files,,elisp}. @end defun  @c copied from lispref/ba...
                                                ^^                                             

122.) Line 2135, column 8, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
...ubr.el @defun subr-primitive-p object Return @code{t} if @var{object} is a primitive, built-in fu...
                                                ^^^^^^^                                             

123.) Line 2144, column 8, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
....el @defun subr-native-elisp-p object Return @code{t} if @var{object} if the object is native com...
                                                ^^^^^^^                                             

124.) Line 2326, column 8, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
...br.el @defun list-of-strings-p object Return @code{t} if @var{object} is @code{nil} or a list of ...
                                                ^^^^^^^                                             

125.) Line 2342, column 39, Rule ID: ENGLISH_WORD_REPEAT_RULE prio=-1
Message: Possible typo: you repeated a word
Suggestion: label
...s.texi @defspec with-restriction start end [:label label] body This special form saves the current bo...
                                                ^^^^^^^^^^^                                             

126.) Line 2388, column 32, Rule ID: ENGLISH_WORD_REPEAT_RULE prio=-1
Message: Possible typo: you repeated a word
Suggestion: label
...ositions.texi @defspec without-restriction [:label label] body This special form saves the current bo...
                                                ^^^^^^^^^^^                                             

127.) Line 2471, column 29, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Examining
...t-text-property} (@pxref{Examining Properties,Examining Properties,,elisp,}), but works on the @code...
                                                ^^^^^^^^^^                                             

128.) Line 2471, column 50, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ref{Examining Properties,Examining Properties,,elisp,}), but works on the @code{display} pro...
                                                ^^                                             

129.) Line 2471, column 57, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , }
...mining Properties,Examining Properties,,elisp,}), but works on the @code{display} property o...
                                                ^^                                             

130.) Line 2482, column 11, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , Examining
...y}, for instance (@pxref{Examining Properties,Examining Properties,,elisp,}). @end defun  @c copied ...
                                                ^^^^^^^^^^                                             

131.) Line 2483, column 11, Rule ID: DOUBLE_PUNCTUATION
Message: Two consecutive commas
Suggestion: ,
...ref{Examining Properties,Examining Properties,,elisp,}). @end defun  @c copied from lisp/sub...
                                                ^^                                             

132.) Line 2483, column 18, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , }
...mining Properties,Examining Properties,,elisp,}). @end defun  @c copied from lisp/subr-x.el ...
                                                ^^                                             

133.) Line 2493, column 1, Rule ID: ENGLISH_WORD_REPEAT_BEGINNING_RULE prio=-50
Message: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
...ode{nil}, it should be a string or a buffer. If @code{nil}, this defaults to the current buf...
                                                ^^                                             

134.) Line 2538, column 23, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
...iled-function-p object This function returns @code{t} if @var{object} is a function object that i...
                                                ^^^^^^^                                             

135.) Line 2539, column 45, Rule ID: COMMA_COMPOUND_SENTENCE_2[3] prio=-1
Message: Use a comma before ‘but’ if it connects two independent clauses (unless they are closely connected and short).
Suggestion: , but
... that is not in the form of ELisp source code but something like machine code or byte code ins...
                                                ^^^^                                             

136.) Line 2541, column 1, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
...e code instead. More specifically it returns @code{t} if the function is built-in, or byte-compil...
                                                ^^^^^^^                                             

137.) Line 2566, column 1, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
...{char-equal} when @code{case-fold-search} is @code{t}.  @xref{Text Comparison,,,elisp}. @end defu...
                                                ^^^^^^^                                             

138.) Line 2596, column 30, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Don’t put a space before the full stop.
Suggestion: .
...omitted). @item A cons-cell @code{(@var{oper} . @var{expr})} where @var{oper} is one of @tab...
                                                ^^                                             

139.) Line 2627, column 58, Rule ID: BY_DEFAULT_COMMA[1]
Message: Did you mean: “By default,”?
Suggestion: By default,
...ion}, as defined for @code{buffer-match-p}.  By default all buffers are considered, but this can be ...
                                                ^^^^^^^^^^                                             

140.) Line 2733, column 13, Rule ID: EN_COMPOUNDS prio=2
Message: This word is normally spelled as one.
Suggestion: keystrokes
... A key is a string consisting of one or more key strokes.  The key strokes are separated by single sp...
                                                ^^^^^^^^^^^                                             

141.) Line 2733, column 31, Rule ID: EN_COMPOUNDS prio=2
Message: This word is normally spelled as one.
Suggestion: keystrokes
... consisting of one or more key strokes.  The key strokes are separated by single space characters.  E...
                                                ^^^^^^^^^^^                                             

142.) Line 2736, column 6, Rule ID: EN_COMPOUNDS prio=2
Message: This word is normally spelled as one.
Suggestion: keystroke
... separated by single space characters.  Each key stroke is either a single character, or the name of...
                                                ^^^^^^^^^^                                             

143.) Line 2737, column 56, Rule ID: EN_COMPOUNDS prio=2
Message: This word is normally spelled as one.
Suggestion: keystroke
...rounded by angle brackets.  In addition, any key stroke may be preceded by one or more modifier keys...
                                                ^^^^^^^^^^                                             

144.) Line 2747, column 34, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@kbd{S’ is not standard English. Did you mean “@kbd’S” (curly apostrophe) or “@kbd'S” (straight apostrophe)?
Suggestion: @kbd’S; @kbd'S
...@item S o m A three key sequence of the keys @kbd{S}, @kbd{o} and @kbd{m}. @item C-c o A two key...
                                                ^^^^^^                                             

145.) Line 2747, column 55, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@kbd{m’ is not standard English. Did you mean “@kbd’m” (curly apostrophe) or “@kbd'm” (straight apostrophe)?
Suggestion: @kbd’m; @kbd'm
...ey sequence of the keys @kbd{S}, @kbd{o} and @kbd{m}. @item C-c o A two key sequence of the keys...
                                                ^^^^^^                                             

146.) Line 2772, column 23, Rule ID: ENGLISH_WORD_REPEAT_RULE prio=-1
Message: Possible typo: you repeated a word
Suggestion: C-c
...y sequences.  Examples include @kbd{f}, @kbd{C-c C-c}, @kbd{H-<left>}, @kbd{M-RET} or @kbd{C-M-<r...
                                                ^^^^^^^                                             

147.) Line 2850, column 21, Rule ID: ENGLISH_WORD_REPEAT_RULE prio=-1
Message: Possible typo: you repeated a word
Suggestion: C-l
...{} nil @end group @group (keymap-global-set "C-l C-l" 'redraw-display)     @result{} nil @end gro...
                                                ^^^^^^^                                             

148.) Line 2913, column 9, Rule ID: LARGE_NUMBER_OF[1]
Message: Specify a number, remove phrase, or simply use “many” or “numerous”
Suggestion: many; numerous
... modes, however, you frequently have to bind a large number of keys at once, and using @code{keymap-set} on...
                                                ^^^^^^^^^^^^^^^^^                                             

149.) Line 2914, column 43, Rule ID: SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA[1]
Message: A comma may be missing after the conjunctive/linking adverb ‘Instead’.
Suggestion: Instead,
...on them all can be tedious and error-prone.  Instead you can use @code{define-keymap}, which crea...
                                                ^^^^^^^                                             
More info: https://writing.wisc.edu/handbook/grammarpunct/conjadv/

150.) Line 2922, column 4, Rule ID: ENGLISH_WORD_REPEAT_RULE prio=-1
Message: Possible typo: you repeated a word
Suggestion: C-c
... "n" #'forward-line   "f" #'previous-line   "C-c C-c" #'quit-window) @end lisp  This function cre...
                                                ^^^^^^^                                             

151.) Line 2951, column 48, Rule ID: EN_UNPAIRED_BRACKETS prio=-1
Message: Unpaired symbol: ‘)’ seems to be missing
...ode{make-keymap}) instead of a sparse keymap (as from @code{make-sparse-keymap} (@pxref{Cre...
                                                ^                                             

152.) Line 3049, column 13, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , bar
...         (quux (gensym "quux")))     `(let ((,bar (+ @dots{})))        @dots{})))  (defmacro m...
                                                ^^^^                                             

153.) Line 3054, column 13, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , bar
... (cl-with-gensyms (bar baz quux)     `(let ((,bar (+ @dots{})))        @dots{}))) @end example...
                                                ^^^^                                             

154.) Line 3080, column 39, Rule ID: ENGLISH_WORD_REPEAT_RULE prio=-1
Message: Possible typo: you repeated a word
Suggestion: variable
...uments to the macro being written, so @code{(variable variable)} may be abbreviated to just @code{variable}...
                                                ^^^^^^^^^^^^^^^^^                                             

155.) Line 3086, column 1, Rule ID: EN_UNPAIRED_BRACKETS prio=-1
Message: Unpaired symbol: ‘)’ seems to be missing
... For example, consider this macro:  @example (defmacro my-list (x y &rest forms)   (let ((x...
                                                ^                                             

156.) Line 3089, column 13, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , x-result
...m))         (y-result (gensym)))     `(let ((,x-result ,x)            (,y-result ,y))        (list ...
                                                ^^^^^^^^^                                             

157.) Line 3089, column 23, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , x
...  (y-result (gensym)))     `(let ((,x-result ,x)            (,y-result ,y))        (list ,x-...
                                                ^^                                             

158.) Line 3090, column 13, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , y-result
...sym)))     `(let ((,x-result ,x)            (,y-result ,y))        (list ,x-result ,y-result ,x-res...
                                                ^^^^^^^^^                                             

159.) Line 3090, column 23, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma.
Suggestion: , y
... `(let ((,x-result ,x)            (,y-result ,y))        (list ,x-result ,y-result ,x-result...
                                                ^^                                             

160.) Line 3091, column 13, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: , 
...t ,x)            (,y-result ,y))        (list ,x-result ,y-result ,x-result ,y-result       ...
                                                ^^                                             

161.) Line 3091, column 23, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: , 
...       (,y-result ,y))        (list ,x-result ,y-result ,x-result ,y-result              (pr...
                                                ^^                                             

162.) Line 3091, column 33, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: , 
...-result ,y))        (list ,x-result ,y-result ,x-result ,y-result              (progn ,@@for...
                                                ^^                                             

163.) Line 3091, column 43, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: , 
...))        (list ,x-result ,y-result ,x-result ,y-result              (progn ,@@forms)))) @en...
                                                ^^                                             

164.) Line 3092, column 20, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: , 
...esult ,x-result ,y-result              (progn ,@@forms)))) @end example  In a call like @w{@...
                                                ^^                                             

165.) Line 3100, column 50, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: , 
...yms to avoid variable capture by @code{(progn ,@@forms)} obscures things further.  @code{cl-...
                                                ^^                                             

166.) Line 3106, column 11, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: , 
...&rest forms)   (cl-once-only (x y)     `(list ,x ,y ,x ,y            (progn ,@@forms)))) @en...
                                                ^^                                             

167.) Line 3106, column 14, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: , 
...st forms)   (cl-once-only (x y)     `(list ,x ,y ,x ,y            (progn ,@@forms)))) @end e...
                                                ^^                                             

168.) Line 3106, column 17, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: , 
...forms)   (cl-once-only (x y)     `(list ,x ,y ,x ,y            (progn ,@@forms)))) @end exam...
                                                ^^                                             

169.) Line 3106, column 20, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: , 
...ms)   (cl-once-only (x y)     `(list ,x ,y ,x ,y            (progn ,@@forms)))) @end example...
                                                ^^                                             

170.) Line 3107, column 18, Rule ID: COMMA_PARENTHESIS_WHITESPACE
Message: Put a space after the comma, but not before the comma.
Suggestion: , 
...x y)     `(list ,x ,y ,x ,y            (progn ,@@forms)))) @end example @end defmac  @subsec...
                                                ^^                                             

171.) Line 3121, column 45, Rule ID: NON_STANDARD_WORD[1]
Message: The word ‘@code{t’ is not standard English. Did you mean “@code’t” (curly apostrophe) or “@code't” (straight apostrophe)?
Suggestion: @code’t; @code't
... If the optional argument @var{keep-pred} is @code{t}, the map stays active as long as the user t...
                                                ^^^^^^^                                             

172.) Line 3167, column 41, Rule ID: EN_UNPAIRED_BRACKETS prio=-1
Message: Unpaired symbol: ‘)’ seems to be missing
...-key This function is like @code{keymap-set} (@pxref{Changing Key Bindings,,,elisp}, but un...
                                                ^                                             

173.) Line 3279, column 52, Rule ID: EN_A_VS_AN prio=-1
Message: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Suggestion: an
...tions or performance issues. We also provide a @uref{https://lists.sr.ht/~pkal/compat-devel...
                                                ^                                             
Time: 3893ms for 1271 sentences (326.5 sentences/sec)

[-- Attachment #4: Type: text/plain, Size: 224 bytes --]


-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>

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

* Re: Grammar checking
  2023-03-31 13:59       ` Gregory Heytings
@ 2023-03-31 14:28         ` Eli Zaretskii
  0 siblings, 0 replies; 73+ messages in thread
From: Eli Zaretskii @ 2023-03-31 14:28 UTC (permalink / raw)
  To: Gregory Heytings; +Cc: relekarpayas, rms, m.eliachevitch, emacs-devel

> Date: Fri, 31 Mar 2023 13:59:55 +0000
> From: Gregory Heytings <gregory@heytings.org>
> cc: relekarpayas@gmail.com, rms@gnu.org, m.eliachevitch@posteo.de, 
>     emacs-devel@gnu.org
> 
> > About 25% success rate.  But CONTRIBUTE sees a lot of review, so it 
> > isn't surprising that most of the reports are false positives.  It is 
> > better to try some document out there written by a non-native English 
> > speaker, like README.md of some package.
> 
> Do you have one such file handy?

Not handy, no.



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

* Re: Grammar checking
  2023-03-31 14:24       ` Ihor Radchenko
@ 2023-03-31 14:39         ` Eli Zaretskii
  2023-04-01  6:52           ` Ihor Radchenko
  0 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2023-03-31 14:39 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: gregory, relekarpayas, rms, m.eliachevitch, emacs-devel

> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: Gregory Heytings <gregory@heytings.org>, relekarpayas@gmail.com,
>  rms@gnu.org, m.eliachevitch@posteo.de, emacs-devel@gnu.org
> Date: Fri, 31 Mar 2023 14:24:20 +0000
> 
> I just tried https://elpa.gnu.org/packages/doc/compat.html
> 
> The attached are full report and the report that I cleaned up a bit,
> removing false positives related to texinfo format not being understood.

Not bad at all.  But it consistently misses "its" mis-spelled as
"it's".

> Also, I noticed that checking time is actually much faster compared to
> what I am getting with Elisp package:
> 
> Time: 2994ms for 1271 sentences (424.5 sentences/sec)
> 
> real    0m4.078s
> user    0m21.279s
> sys     0m0.501s
> 
> So, the slowness I was talking about might have something to do with
> https://github.com/mhayashi1120/Emacs-langtool implementation.

Probably.



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

* Re: Grammar checking
  2023-03-31 11:23             ` Eli Zaretskii
  2023-03-31 12:12               ` Peter Oliver
@ 2023-03-31 15:25               ` Philip Kaludercic
  1 sibling, 0 replies; 73+ messages in thread
From: Philip Kaludercic @ 2023-03-31 15:25 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gregory, rms, m.eliachevitch, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Philip Kaludercic <philipk@posteo.net>
>> Cc: Gregory Heytings <gregory@heytings.org>,  rms@gnu.org,
>>   m.eliachevitch@posteo.de,  emacs-devel@gnu.org
>> Date: Fri, 31 Mar 2023 07:47:15 +0000
>> 
>> There is an implementation[0], but I found it to be awkward to work
>> with.
>
> Can you share more details? what is "awkward" about it?

From what I recall, getting the server to run and recognise additional
grammar-rule databases like German wasn't that easy (though I might have
also just messed something up).  That if all I had to do was run

     $ apt install language-tool language-tool-de

that this part would have been easier.  The Emacs package did the job,
but had a ispell instead of a flyspell-like interface.  Better than
nothing, but a fly... interface would be nice to have, if it is
technically possible. 

> In any case, we don't have to use the Emacs interface as-is, we could
> write our own.

-- 
Philip Kaludercic



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

* Re: Grammar checking
  2023-03-31 12:45                   ` Peter Oliver
@ 2023-03-31 15:29                     ` Philip Kaludercic
  2023-03-31 17:00                       ` Peter Oliver
  0 siblings, 1 reply; 73+ messages in thread
From: Philip Kaludercic @ 2023-03-31 15:29 UTC (permalink / raw)
  To: Peter Oliver; +Cc: Gregory Heytings, Lynn Winebarger, emacs-devel

Peter Oliver <p.d.oliver@mavit.org.uk> writes:

>> The zip file above contains the three versions of the program: GUI,
>> client-server, and command-line.
>
> The command-line tool takes too long to start to be of practical use to us.

Why?  If it were to be used asynchronously, it could start up in the
background and the results would be displayed when it finds something?

-- 
Philip Kaludercic



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

* Re: Grammar checking
  2023-03-31  8:45             ` Michael Eliachevitch
  2023-03-31 13:44               ` Felician Nemeth
@ 2023-03-31 16:03               ` Peter Oliver
  1 sibling, 0 replies; 73+ messages in thread
From: Peter Oliver @ 2023-03-31 16:03 UTC (permalink / raw)
  To: Michael Eliachevitch; +Cc: emacs-devel

On Fri, 31 Mar 2023, Michael Eliachevitch wrote:

> I'm checking a LaTeX-file, where I found the "ltex" [3] language server to be 
> useful [3].

Also worth a mention is YaLafi, which is a program that sits in between a LanguageTool client and server, filtering out LaTeX markup so that LangugageTool just sees the text.  https://github.com/torik42/YaLafi

-- 
Peter Oliver



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

* Re: Grammar checking
  2023-03-31 15:29                     ` Philip Kaludercic
@ 2023-03-31 17:00                       ` Peter Oliver
  0 siblings, 0 replies; 73+ messages in thread
From: Peter Oliver @ 2023-03-31 17:00 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 722 bytes --]

On Fri, 31 Mar 2023, Philip Kaludercic wrote:

> Peter Oliver <p.d.oliver@mavit.org.uk> writes:
>
>>> The zip file above contains the three versions of the program: GUI,
>>> client-server, and command-line.
>>
>> The command-line tool takes too long to start to be of practical use to us.
>
> Why?  If it were to be used asynchronously, it could start up in the
> background and the results would be displayed when it finds something?

On my system, “java -jar languagetool-commandline.jar /dev/null” takes 15 CPU-seconds in 4 real seconds.  The noise from my CPU fan alone would be enough for me to not want to run that all the time.

If we use the server, we only have to pay the startup cost once.

-- 
Peter Oliver

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

* Re: Grammar checking
  2023-03-31 14:39         ` Eli Zaretskii
@ 2023-04-01  6:52           ` Ihor Radchenko
  2023-04-01  7:00             ` Eli Zaretskii
  2023-04-01 13:09             ` Peter Oliver
  0 siblings, 2 replies; 73+ messages in thread
From: Ihor Radchenko @ 2023-04-01  6:52 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gregory, relekarpayas, rms, m.eliachevitch, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> The attached are full report and the report that I cleaned up a bit,
>> removing false positives related to texinfo format not being understood.
>
> Not bad at all.  But it consistently misses "its" mis-spelled as
> "it's".

Agree. I can also see several related bug reports in their repo.
The question is though whether "not bad" is good enough and who is to
decide what is good enough for Emacs.

I'd be happy if Emacs had a good integrated grammar checking support. Is
there anything else I can help to move this thread forward?

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>



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

* Re: Grammar checking
  2023-04-01  6:52           ` Ihor Radchenko
@ 2023-04-01  7:00             ` Eli Zaretskii
  2023-04-01  7:10               ` Ihor Radchenko
  2023-04-01 13:09             ` Peter Oliver
  1 sibling, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2023-04-01  7:00 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: gregory, relekarpayas, rms, m.eliachevitch, emacs-devel

> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: gregory@heytings.org, relekarpayas@gmail.com, rms@gnu.org,
>  m.eliachevitch@posteo.de, emacs-devel@gnu.org
> Date: Sat, 01 Apr 2023 06:52:27 +0000
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> The attached are full report and the report that I cleaned up a bit,
> >> removing false positives related to texinfo format not being understood.
> >
> > Not bad at all.  But it consistently misses "its" mis-spelled as
> > "it's".
> 
> Agree. I can also see several related bug reports in their repo.
> The question is though whether "not bad" is good enough and who is to
> decide what is good enough for Emacs.

We get to decide that.  Who else?

> I'd be happy if Emacs had a good integrated grammar checking support. Is
> there anything else I can help to move this thread forward?

Provide a Lisp package to integrate LanguageTool into Emacs in a
convenient way?



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

* Re: Grammar checking
  2023-04-01  7:00             ` Eli Zaretskii
@ 2023-04-01  7:10               ` Ihor Radchenko
  2023-04-01  7:14                 ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Ihor Radchenko @ 2023-04-01  7:10 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gregory, relekarpayas, rms, m.eliachevitch, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> Agree. I can also see several related bug reports in their repo.
>> The question is though whether "not bad" is good enough and who is to
>> decide what is good enough for Emacs.
>
> We get to decide that.  Who else?

I was hoping to hear the criteria you have about good enough grammar
checking.

>> I'd be happy if Emacs had a good integrated grammar checking support. Is
>> there anything else I can help to move this thread forward?
>
> Provide a Lisp package to integrate LanguageTool into Emacs in a
> convenient way?

What is "convenient"? Is there particular must-have functionality?
Should it be ispell integration? flyspell?

Probably not the latter as it is word-based.
Though ispell.el also appears to rely on word-based paradigm in the
code.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>



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

* Re: Grammar checking
  2023-04-01  7:10               ` Ihor Radchenko
@ 2023-04-01  7:14                 ` Eli Zaretskii
  0 siblings, 0 replies; 73+ messages in thread
From: Eli Zaretskii @ 2023-04-01  7:14 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: gregory, relekarpayas, rms, m.eliachevitch, emacs-devel

> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: gregory@heytings.org, relekarpayas@gmail.com, rms@gnu.org,
>  m.eliachevitch@posteo.de, emacs-devel@gnu.org
> Date: Sat, 01 Apr 2023 07:10:22 +0000
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> Agree. I can also see several related bug reports in their repo.
> >> The question is though whether "not bad" is good enough and who is to
> >> decide what is good enough for Emacs.
> >
> > We get to decide that.  Who else?
> 
> I was hoping to hear the criteria you have about good enough grammar
> checking.

I gave my opinion.  I'm not the only one whose opinion matters, but I
have no control on what others say or don't say.  So I'm not sure what
else do you want to hear from me.

> >> I'd be happy if Emacs had a good integrated grammar checking support. Is
> >> there anything else I can help to move this thread forward?
> >
> > Provide a Lisp package to integrate LanguageTool into Emacs in a
> > convenient way?
> 
> What is "convenient"? Is there particular must-have functionality?
> Should it be ispell integration? flyspell?

Both, IMO.

> Probably not the latter as it is word-based.

Indeed, it should check larger chunks of text, like sentences or
paragraphs.

> Though ispell.el also appears to rely on word-based paradigm in the
> code.

That's because this is how the spell-checkers work, I believe.



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

* Re: Grammar checking
  2023-03-31  8:48             ` Gregory Heytings
@ 2023-04-01 12:59               ` Lynn Winebarger
  2023-04-01 13:18                 ` Gregory Heytings
                                   ` (2 more replies)
  0 siblings, 3 replies; 73+ messages in thread
From: Lynn Winebarger @ 2023-04-01 12:59 UTC (permalink / raw)
  To: Gregory Heytings
  Cc: Nasser Alkmim, Eli Zaretskii, rms, m.eliachevitch, emacs-devel

On Fri, Mar 31, 2023 at 4:49 AM Gregory Heytings <gregory@heytings.org> wrote:
> > The one that works best for me is this Grammarly language server [1].
> It might give better results, but it's proprietary software.

LanguageTool isn't proprietary software, but it is used for SaaSS
where the "premium" tier appears to use rule sets that are not
released with the base tool.  LanguageTool.org is very clear in using
the term "open source" rather than "free" to describe the software
(and configuration files) for its "Basic" service.

Given discussions that have happened in the last few months on this
list, I'm surprised the software maintained by the languagetool
project would be considered suitable for introducing a dependency into
core emacs.  Actually, I'm surprised that sort of dependency would be
ok for a package included in GNU ELPA, or possibly even non-GNU ELPA.

I'm not personally a stickler for using free-vs-OS, but even with my
promiscuous package usage I avoided installing the languagetool
package /  I would be concerned that emacs might start communicating
to languagetool servers by default unless I took extreme care. in
reviewing the package code and committed to doing so for every update.
I'm sure any functionality built into core emacs wouldn't do that, but
I don't know that I would trust the languagetool software project to
never introduce such transactions at some future point.

Lynn



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

* Re: Grammar checking
  2023-04-01  6:52           ` Ihor Radchenko
  2023-04-01  7:00             ` Eli Zaretskii
@ 2023-04-01 13:09             ` Peter Oliver
  2023-04-01 13:17               ` Ihor Radchenko
  1 sibling, 1 reply; 73+ messages in thread
From: Peter Oliver @ 2023-04-01 13:09 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 569 bytes --]

On Sat, 1 Apr 2023, Ihor Radchenko wrote:

> I'd be happy if Emacs had a good integrated grammar checking support. Is
> there anything else I can help to move this thread forward?

I think that LanguageTool would be easier to integrate if we were able to communicate with its server over some mechanism other than TCP.  On multi-user systems, TCP isn’t private to a particular user, and the user has to worry about configuring which port to use so as not to clash with other users.

Perhaps you could look at adding such functionality to LanguageTool?

-- 
Peter Oliver

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

* Re: Grammar checking
  2023-04-01 13:09             ` Peter Oliver
@ 2023-04-01 13:17               ` Ihor Radchenko
  2023-04-01 13:24                 ` Peter Oliver
  0 siblings, 1 reply; 73+ messages in thread
From: Ihor Radchenko @ 2023-04-01 13:17 UTC (permalink / raw)
  To: Peter Oliver; +Cc: emacs-devel

Peter Oliver <p.d.oliver@mavit.org.uk> writes:

> I think that LanguageTool would be easier to integrate if we were able to communicate with its server over some mechanism other than TCP.  On multi-user systems, TCP isn’t private to a particular user, and the user has to worry about configuring which port to use so as not to clash with other users.
>
> Perhaps you could look at adding such functionality to LanguageTool?

I have no such ability.
Note, however, that Languagetool also has command line interface.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>



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

* Re: Grammar checking
  2023-04-01 12:59               ` Lynn Winebarger
@ 2023-04-01 13:18                 ` Gregory Heytings
  2023-04-01 13:37                 ` Eli Zaretskii
  2023-04-02  3:12                 ` Richard Stallman
  2 siblings, 0 replies; 73+ messages in thread
From: Gregory Heytings @ 2023-04-01 13:18 UTC (permalink / raw)
  To: Lynn Winebarger
  Cc: Nasser Alkmim, Eli Zaretskii, rms, m.eliachevitch, emacs-devel


>>> The one that works best for me is this Grammarly language server [1].
>>
>> It might give better results, but it's proprietary software.
>
> LanguageTool isn't proprietary software,
>

It's Grammarly that is proprietary software.

>
> but it is used for SaaSS
>

The free version does not communicate with the LanguageTool servers.

>
> where the "premium" tier appears to use rule sets that are not released 
> with the base tool.
>

Yes, for an additional cost you can use an extended set of rules.  But the 
free version works (and you can add your own set of rules if you want).

>
> Given discussions that have happened in the last few months on this 
> list, I'm surprised the software maintained by the languagetool project 
> would be considered suitable for introducing a dependency into core 
> emacs.
>

LanguageTool's license is the LGPL, why would it wrong to use it?




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

* Re: Grammar checking
  2023-04-01 13:17               ` Ihor Radchenko
@ 2023-04-01 13:24                 ` Peter Oliver
  2023-04-01 13:32                   ` Ihor Radchenko
  2023-04-01 13:41                   ` Eli Zaretskii
  0 siblings, 2 replies; 73+ messages in thread
From: Peter Oliver @ 2023-04-01 13:24 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-devel

On Sat, 1 Apr 2023, Ihor Radchenko wrote:

> Note, however, that Languagetool also has command line interface.

Which, as is discussed elsewhere in the thread, is terribly inefficient.

-- 
Peter Oliver



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

* Re: Grammar checking
  2023-04-01 13:24                 ` Peter Oliver
@ 2023-04-01 13:32                   ` Ihor Radchenko
  2023-04-01 13:42                     ` Eli Zaretskii
  2023-04-01 13:41                   ` Eli Zaretskii
  1 sibling, 1 reply; 73+ messages in thread
From: Ihor Radchenko @ 2023-04-01 13:32 UTC (permalink / raw)
  To: Peter Oliver; +Cc: emacs-devel

Peter Oliver <p.d.oliver@mavit.org.uk> writes:

> On Sat, 1 Apr 2023, Ihor Radchenko wrote:
>
>> Note, however, that Languagetool also has command line interface.
>
> Which, as is discussed elsewhere in the thread, is terribly inefficient.

And, as I followed up, my statement about terribly inefficient might not
hold. It was quite fast in my test with compat manual.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>



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

* Re: Grammar checking
  2023-04-01 12:59               ` Lynn Winebarger
  2023-04-01 13:18                 ` Gregory Heytings
@ 2023-04-01 13:37                 ` Eli Zaretskii
  2023-04-01 17:30                   ` Lynn Winebarger
  2023-04-02  3:12                 ` Richard Stallman
  2 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2023-04-01 13:37 UTC (permalink / raw)
  To: Lynn Winebarger; +Cc: gregory, nasser.alkmim, rms, m.eliachevitch, emacs-devel

> From: Lynn Winebarger <owinebar@gmail.com>
> Date: Sat, 1 Apr 2023 08:59:50 -0400
> Cc: Nasser Alkmim <nasser.alkmim@gmail.com>, Eli Zaretskii <eliz@gnu.org>, rms@gnu.org, 
> 	m.eliachevitch@posteo.de, emacs-devel@gnu.org
> 
> On Fri, Mar 31, 2023 at 4:49 AM Gregory Heytings <gregory@heytings.org> wrote:
> > > The one that works best for me is this Grammarly language server [1].
> > It might give better results, but it's proprietary software.
> 
> LanguageTool isn't proprietary software, but it is used for SaaSS
> where the "premium" tier appears to use rule sets that are not
> released with the base tool.  LanguageTool.org is very clear in using
> the term "open source" rather than "free" to describe the software
> (and configuration files) for its "Basic" service.

I don't understand what you are trying to say.  LanguageTool is
distributed with its sources, and the code is under LGPL 2.  The
"premium" version is not what we are considering.  So where is the
problem with that?

> Given discussions that have happened in the last few months on this
> list, I'm surprised the software maintained by the languagetool
> project would be considered suitable for introducing a dependency into
> core emacs.

We are discussing a possibility of using LanguageTool as an external
tool with which Emacs will communicate, not as a dependency for the
Emacs core.



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

* Re: Grammar checking
  2023-04-01 13:24                 ` Peter Oliver
  2023-04-01 13:32                   ` Ihor Radchenko
@ 2023-04-01 13:41                   ` Eli Zaretskii
  2023-04-03 13:02                     ` Peter Oliver
  1 sibling, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2023-04-01 13:41 UTC (permalink / raw)
  To: Peter Oliver; +Cc: yantar92, emacs-devel

> Date: Sat, 1 Apr 2023 14:24:24 +0100 (BST)
> From: Peter Oliver <p.d.oliver@mavit.org.uk>
> cc: emacs-devel@gnu.org
> 
> On Sat, 1 Apr 2023, Ihor Radchenko wrote:
> 
> > Note, however, that Languagetool also has command line interface.
> 
> Which, as is discussed elsewhere in the thread, is terribly inefficient.

Since when is subprocess communications "outlawed" in Emacs for
significant features that need to have good performance?  The above is
IME a mistaken conclusion; following it will preclude us from using
many useful external programs.  So please don't accept that as an
axiom.

Also, linking against a library instead of communicating with a
program has its disadvantages as well: if the library crashes, so does
Emacs.



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

* Re: Grammar checking
  2023-04-01 13:32                   ` Ihor Radchenko
@ 2023-04-01 13:42                     ` Eli Zaretskii
  0 siblings, 0 replies; 73+ messages in thread
From: Eli Zaretskii @ 2023-04-01 13:42 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: p.d.oliver, emacs-devel

> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: emacs-devel@gnu.org
> Date: Sat, 01 Apr 2023 13:32:05 +0000
> 
> Peter Oliver <p.d.oliver@mavit.org.uk> writes:
> 
> > On Sat, 1 Apr 2023, Ihor Radchenko wrote:
> >
> >> Note, however, that Languagetool also has command line interface.
> >
> > Which, as is discussed elsewhere in the thread, is terribly inefficient.
> 
> And, as I followed up, my statement about terribly inefficient might not
> hold. It was quite fast in my test with compat manual.

Indeed.  The above "terribly inefficient" conclusion is completely
wrong, IME.



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

* Re: Grammar checking
  2023-04-01 13:37                 ` Eli Zaretskii
@ 2023-04-01 17:30                   ` Lynn Winebarger
  2023-04-01 17:35                     ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Lynn Winebarger @ 2023-04-01 17:30 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gregory, nasser.alkmim, rms, m.eliachevitch, emacs-devel

On Sat, Apr 1, 2023 at 9:37 AM Eli Zaretskii <eliz@gnu.org> wrote:
> > From: Lynn Winebarger <owinebar@gmail.com>
> > Date: Sat, 1 Apr 2023 08:59:50 -0400
> > Cc: Nasser Alkmim <nasser.alkmim@gmail.com>, Eli Zaretskii <eliz@gnu.org>, rms@gnu.org,
> >       m.eliachevitch@posteo.de, emacs-devel@gnu.org
> >
> > On Fri, Mar 31, 2023 at 4:49 AM Gregory Heytings <gregory@heytings.org> wrote:
> > > > The one that works best for me is this Grammarly language server [1].
> > > It might give better results, but it's proprietary software.
> >
> > LanguageTool isn't proprietary software, but it is used for SaaSS
> > where the "premium" tier appears to use rule sets that are not
> > released with the base tool.  LanguageTool.org is very clear in using
> > the term "open source" rather than "free" to describe the software
> > (and configuration files) for its "Basic" service.
>
> I don't understand what you are trying to say.  LanguageTool is
> distributed with its sources, and the code is under LGPL 2.  The
> "premium" version is not what we are considering.  So where is the
> problem with that?
>
> > Given discussions that have happened in the last few months on this
> > list, I'm surprised the software maintained by the languagetool
> > project would be considered suitable for introducing a dependency into
> > core emacs.
>
> We are discussing a possibility of using LanguageTool as an external
> tool with which Emacs will communicate, not as a dependency for the
> Emacs core.

I'll respond to this point first, then the question above, so the
context is clear.

I might have misunderstood - this thread arose because you mentioned
that grammar correction was a higher priority than reimplementing
spell-checking support, so I took it to mean the support would be
included in core in the same way spell-c,hecker support is
incorporated in the core, even though the actual spell checking is
dependent on an external tool being available.

Re "So where is the problem with that"?  There may not be one - it's
possible I'm misunderstanding the implications of the GNU coding
standards.  It seems to me there are three potential issues:

1) Violations of
https://www.gnu.org/prep/standards/html_node/References.html#References
if it is read to include references to SaaSS as equivalent to
references to nonfree software.
2)  Long term implications with regard to the set of grammar rules
emacs encourages using
3)  Concerns about trademarks and confusion as to whether
"languagetool" is intended to reference the software or the product -
not just legally, but with end users

Regarding (1):  Based on previous discussions on this list and
https://www.gnu.org/philosophy/who-does-that-server-really-serve.html
, I am extrapolating that the prohibition against linking to websites
that promote non-free software also apply to websites that promote
SaaSS.  In particular:

[[ BEGIN QUOTE ]]
What about chains of links? Following links from nearly any web site
can lead eventually to promotion of non-free software; this is
inherent in the nature of the web. Here’s how we treat that.

You should not refer to AT&T’s web site if that recommends AT&T’s
non-free software packages; you should not refer to a page p that
links to AT&T’s site presenting it as a place to get some non-free
program, because that part of the page p itself recommends and
legitimizes the non-free program.

However, if p contains a link to AT&T’s web site for some other
purpose (such as long-distance telephone service), that is no reason
you should not link to p.
[[ END QUOTE ]]

In this case, the language tool repository page clearly refers to the
languagetool.org website.  Furthermore, the basic grammar rules that
are free are used as an enticement to consider the SaaSS.  On
languagetool.org's webpage, there is a FAQ, which includes the Q&A:

[[ BEGIN QUOTE ]]
Is LanguageTool free?
LanguageTool is available in two versions. The free version corrects
spelling as well as simple punctuation and some style mistakes. Only
the Premium version will show you all errors and give you the best
possible text. Team accounts for companies are also available.
[[ END QUOTE ]]
and then links https://languagetool.org/insights/post/premium-vs-free-product-updates/
with the text "Read more"

So, it would seem to me referencing the languagetool git repository
would violate the general prohibition.  Of course, someone could fork
the project to provide the source in a way that excises all such
references.

Regarding (2):  Based on the text I just quoted about the
(intentional) limitations of the free rule set, it seems that if emacs
encourages the use of (local) languagetool servers, users will
inevitably want to improve its performance.  There are at least two
ways that can play out:

(a) that activity go into the repo languagetool.org maintains for
"community" rulesets under the LGPL, so they may be included in
languagetool.org's SaaSS
(b) emacs developers/users establish a separate repository distributed
under a copyleft, probably Affero-type, license to prevent their
inclusion in languagetool.org's SaaSS

I'm sure there are other ways, but these are the primary ones I can
foresee.  I guess my question is whether that is a position the GNU
project is content to put its users in, especially as many users will
probably be content with (a) or simply subscribing to the Premium
service.

(3)  Presumably the trademark confusion can be worked around, it would
simply take some care, i.e. be a slight headache.

For me, this is primarily an intellectual exercise as I am not a
contributor (due to legal ambiguities about my right to assign
copyrights, not my willingness to do so), but I would like to
understand how the standards are applied in this situation.  Am I
wrong about treating SaaSS consistently with nonfree software when it
comes to promoting its use?

Lynn



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

* Re: Grammar checking
  2023-04-01 17:30                   ` Lynn Winebarger
@ 2023-04-01 17:35                     ` Eli Zaretskii
  0 siblings, 0 replies; 73+ messages in thread
From: Eli Zaretskii @ 2023-04-01 17:35 UTC (permalink / raw)
  To: Lynn Winebarger; +Cc: gregory, nasser.alkmim, rms, m.eliachevitch, emacs-devel

> From: Lynn Winebarger <owinebar@gmail.com>
> Date: Sat, 1 Apr 2023 13:30:06 -0400
> Cc: gregory@heytings.org, nasser.alkmim@gmail.com, rms@gnu.org, 
> 	m.eliachevitch@posteo.de, emacs-devel@gnu.org
> 
> I might have misunderstood - this thread arose because you mentioned
> that grammar correction was a higher priority than reimplementing
> spell-checking support

You have misunderstood.  There's no precedence here at all.  We need
(and already have) spell-checking capabilities in Emacs, and will
continue having and developing them.  We _also_ need
grammar-correcting capabilities, independently of spell-checking.

> For me, this is primarily an intellectual exercise as I am not a
> contributor (due to legal ambiguities about my right to assign
> copyrights, not my willingness to do so), but I would like to
> understand how the standards are applied in this situation.  Am I
> wrong about treating SaaSS consistently with nonfree software when it
> comes to promoting its use?

We are not discussing addition to Emacs of any features based on
SaaSS.



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

* Re: Grammar checking
  2023-03-31 10:59             ` Eli Zaretskii
@ 2023-04-02  3:11               ` Richard Stallman
  2023-04-02  3:40                 ` Emanuel Berg
  0 siblings, 1 reply; 73+ messages in thread
From: Richard Stallman @ 2023-04-02  3:11 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: nasser.alkmim, gregory, m.eliachevitch, emacs-devel

[[[ 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. ]]]

  > Grammarly is not Free Software, AFAIK, so using it in Emacs is out of
  > the question.

Exactly right.  The purpose of GNU Emacs, and the purpose of improving
it, is to advance what people can do in freedom, and spread freedom.
We shouldn't let the means run away with the ends.


-- 
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)





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

* Re: Grammar checking
  2023-03-31 13:11     ` Eli Zaretskii
  2023-03-31 13:29       ` Ihor Radchenko
@ 2023-04-02  3:11       ` Richard Stallman
  1 sibling, 0 replies; 73+ messages in thread
From: Richard Stallman @ 2023-04-02  3:11 UTC (permalink / raw)
  To: Eli Zaretskii
  Cc: yantar92, relekarpayas, gregory, m.eliachevitch, emacs-devel

[[[ 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. ]]]

  > > I am using it in real-life scenarios for authoring.
  > > LanguageTool the most sophisticated Libre grammar checker around, AFAIK.

  > That's not enough, IMO.  It should be good in absolute terms, not in
  > relative terms.

At a minimum, it needs to be good enough to be useful, and thus worth
the effort to merge and maintain it.  (Otherwise, ignoring it would be
a better option.)  If it is better than that, that is a bonus.

-- 
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)





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

* Re: Grammar checking
  2023-04-01 12:59               ` Lynn Winebarger
  2023-04-01 13:18                 ` Gregory Heytings
  2023-04-01 13:37                 ` Eli Zaretskii
@ 2023-04-02  3:12                 ` Richard Stallman
  2023-04-02 15:24                   ` Lynn Winebarger
  2 siblings, 1 reply; 73+ messages in thread
From: Richard Stallman @ 2023-04-02  3:12 UTC (permalink / raw)
  To: Lynn Winebarger; +Cc: gregory, nasser.alkmim, eliz, m.eliachevitch, emacs-devel

[[[ 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. ]]]

  > LanguageTool isn't proprietary software, but it is used for SaaSS
  > where the "premium" tier appears to use rule sets that are not
  > released with the base tool.

We certainly don't want Emacs to lead people to submit to practices
like that.

If the released (and free) LanguageTool _program_ gives adequate
results, we could make Emacs support working with that.  But we should
take pains _not_ to support the kind of communication that that SaaSS
server offers.


                                  LanguageTool.org is very clear in using
  > the term "open source" rather than "free" to describe the software
  > (and configuration files) for its "Basic" service.

That means they don't agree with our philosophy.  Given the facts
you've described, that is no surprise.  But we don't need to reject a
free program just because its developers disagree with our philosophy.


-- 
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)





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

* Re: Grammar checking
  2023-04-02  3:11               ` Richard Stallman
@ 2023-04-02  3:40                 ` Emanuel Berg
  0 siblings, 0 replies; 73+ messages in thread
From: Emanuel Berg @ 2023-04-02  3:40 UTC (permalink / raw)
  To: emacs-devel

Richard Stallman wrote:

>> Grammarly is not Free Software, AFAIK, so using it in Emacs
>> is out of the question.
>
> Exactly right. The purpose of GNU Emacs, and the purpose of
> improving it, is to advance what people can do in freedom,
> and spread freedom. We shouldn't let the means run away with
> the ends.

That's right, if it's possible to do the right way, no excuse
not to do it the right way. All it takes is time and effort.
And if it doesn't happen, ever - this is a clear indication no
one cared about it enough to actually do it - and if not
a single one, no one ever did it, maybe that says something
how important it was to begin with ...

I've seen this so many times, in so many places. Compromise,
deadline, double standards, it always blows up in the end.

Little by little against the goal always beats trying to
outsmart the problem to achieve a quick fix, compromising
standards and ideals, just because of the perception it "has
to" happen this instant ...

No shortcuts to the top!

-- 
underground experts united
https://dataswamp.org/~incal




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

* Re: Grammar checking
  2023-04-02  3:12                 ` Richard Stallman
@ 2023-04-02 15:24                   ` Lynn Winebarger
  2023-04-03  3:05                     ` Richard Stallman
  2023-04-03  3:05                     ` Richard Stallman
  0 siblings, 2 replies; 73+ messages in thread
From: Lynn Winebarger @ 2023-04-02 15:24 UTC (permalink / raw)
  To: rms; +Cc: gregory, nasser.alkmim, eliz, m.eliachevitch, emacs-devel

On Sat, Apr 1, 2023 at 11:12 PM Richard Stallman <rms@gnu.org> wrote:
>   > LanguageTool isn't proprietary software, but it is used for SaaSS
>   > where the "premium" tier appears to use rule sets that are not
>   > released with the base tool.
>
> We certainly don't want Emacs to lead people to submit to practices
> like that.
>
> If the released (and free) LanguageTool _program_ gives adequate
> results, we could make Emacs support working with that.  But we should
> take pains _not_ to support the kind of communication that that SaaSS
> server offers.
They may not make it easy, see this complaint on their forum:
https://forum.languagetool.org/t/about-the-premium-version-of-languagetool/8469
Although that appears to only apply to the "grammar checker" on the
languagetool.org site, so presumably users of a locally installed free
server won't see such comments.
There's also this kind of thing in the code base:
https://github.com/languagetool-org/languagetool/blob/master/languagetool-core/src/main/java/org/languagetool/Premium.java

>
>
>                                   LanguageTool.org is very clear in using
>   > the term "open source" rather than "free" to describe the software
>   > (and configuration files) for its "Basic" service.
>
> That means they don't agree with our philosophy.  Given the facts
> you've described, that is no surprise.  But we don't need to reject a
> free program just because its developers disagree with our philosophy.

I agree the concerns I've raised are of a "second-order" nature.  I
haven't claimed the program itself is non-free, just that there are
foreseeable complications of the sort highlighted in Section 8 of the
GNU coding standards.   There was an extensive discussion around how
to incorporate the grammars for tree-sitter modes *after* all the work
to get the functionality working, and I'm not sure that even involved
any truly non-free software.  The issues around how to advise users to
set up and make use of languagetool seem to me to be much stickier.

* The documentation is free but definitely refers to the SaaSS in
meaningful ways in the sense of Section 8.

* The process for contributing "rules" to the free version is to go
through the SaaSS's forum sites.
https://community.languagetool.org/rule/list?lang=en shows 5919 rules
for english, presumably in the basic version.  I have no idea where to
find these rules in the code base, nor whether submitting a rule that
is already in the premium version will actually get incorporated in
the free version.   Looking at the java code makes it appear there are
many hard-coded rules, but I don't know if that is really the case.
That is whether the code for the rules are some generic implementation
of the rules coded in XML, or if the XML rule sets are being
translated into java code at some point in the build process.

The second one is going to put users in a sticky situation if they
want to enhance emacs's grammar checking once there is an official
reliance on this external tool.  I'm not really a purist, but I don't
like dealing with these kinds of ambiguous situations where the
gatekeeper for community contributions has such a conflict of interest
in whether and how those contributions are incorporated and shared.
Without impugning the developer and gatekeepers, there's no
*guarantee* a contributed rule via those community forums will not be
incorporated in the premium ruleset without being incorporated in the
"basic" ruleset, since such contributions are presumably provided to
the project maintainer under the LGPL.

There are workarounds to these issues, but none of them that I can see
are trivial.  I don't know what benefit there is to delaying dealing
with these issues until the functionality is already implemented in
master.

Lynn



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

* Re: Grammar checking
  2023-04-02 15:24                   ` Lynn Winebarger
@ 2023-04-03  3:05                     ` Richard Stallman
  2023-04-03  3:05                     ` Richard Stallman
  1 sibling, 0 replies; 73+ messages in thread
From: Richard Stallman @ 2023-04-03  3:05 UTC (permalink / raw)
  To: Lynn Winebarger; +Cc: gregory, nasser.alkmim, eliz, m.eliachevitch, emacs-devel

[[[ 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. ]]]

  > > If the released (and free) LanguageTool _program_ gives adequate
  > > results, we could make Emacs support working with that.  But we should
  > > take pains _not_ to support the kind of communication that that SaaSS
  > > server offers.
  > They may not make it easy, see this complaint on their forum:

Would you please spell out what it is
that they "may not make easy"? 

  > https://forum.languagetool.org/t/about-the-premium-version-of-languagetool/8469

I looked at that page, but lacking the context, I can't understand it
well enough to divine the point this hints at.

  > * The documentation is free but definitely refers to the SaaSS in
  > meaningful ways in the sense of Section 8.

Which documentation is that?  Documentation of what?

-- 
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)





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

* Re: Grammar checking
  2023-04-02 15:24                   ` Lynn Winebarger
  2023-04-03  3:05                     ` Richard Stallman
@ 2023-04-03  3:05                     ` Richard Stallman
  2023-04-06 12:29                       ` Lynn Winebarger
  1 sibling, 1 reply; 73+ messages in thread
From: Richard Stallman @ 2023-04-03  3:05 UTC (permalink / raw)
  To: Lynn Winebarger; +Cc: emacs-devel

[[[ 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. ]]]

  > > If the released (and free) LanguageTool _program_ gives adequate
  > > results, we could make Emacs support working with that.  But we should
  > > take pains _not_ to support the kind of communication that that SaaSS
  > > server offers.
  > They may not make it easy, see this complaint on their forum:

Would you please spell out what it is
that they "may not make easy"? 

  > https://forum.languagetool.org/t/about-the-premium-version-of-languagetool/8469

I looked at that page, but lacking the context, I can't understand it
well enough to divine the point that your message hints at.

  > * The process for contributing "rules" to the free version is to go
  > through the SaaSS's forum sites.
  > https://community.languagetool.org/rule/list?lang=en shows 5919 rules
  > for english, presumably in the basic version.

We could consider forking that code in a limited way: adding new rules.

In general, we should cooperate with upstream developers, but we don't
have to jump through hoops to do so.

  >    Looking at the java code makes it appear there are
  > many hard-coded rules, but I don't know if that is really the case.
  > That is whether the code for the rules are some generic implementation
  > of the rules coded in XML, or if the XML rule sets are being
  > translated into java code at some point in the build process.

I can only guess at the context this is about, but it sounds like
you're suggesting that it may not be clear what form of the code is
the real source code.  Do they not say?  Does their source release
include the XML?  Does it include Make rules to translate the XML into
Java?

-- 
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)





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

* Re: grammar checking
@ 2023-04-03  5:52 Pedro Andres Aranda Gutierrez
  2023-04-03 13:51 ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Pedro Andres Aranda Gutierrez @ 2023-04-03  5:52 UTC (permalink / raw)
  To: emacs-devel

Hi

some random thoughts about grammar checking.

1. I have worked with different word processors that provide grammar
checking in addition to spellchecking. At the end of the day, I had to
ignore 49 suggestions to accept a good one, which I would have caught
with reasonable proof-reading. Writing is something that needs time.
And I feel it every day, even for technical writing. And there are no
shortcuts to that.

2. I have tried grammar checking on different languages. Yes, I speak
a couple of languages and I write fluently in four. And at the end, I
either disable grammar checking or I just leave it there for fun. Some
suggestions are as good as spellchecking was 20 years ago. And a good
laugh may be worth it, but seriously, I'd rather not use grammar
checking when in a hurry.

3. I'm honoured to count professional writers and journalists among my
friends and, no, they don't use grammar checking ;-) because they feel
the tools currently force them into a style of writing which is not
theirs.

I feel it would be more urgent to concentrate on spellchecking and see
how to improve support for languages with word composition on current
solutions in core Emacs or packages in ELPA.

My .2cents, /PA
-- 
Fragen sind nicht da, um beantwortet zu werden,
Fragen sind da um gestellt zu werden
Georg Kreisler

Headaches with a Juju log:
unit-basic-16: 09:17:36 WARNING juju.worker.uniter.operation we should
run a leader-deposed hook here, but we can't yet



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

* Re: Grammar checking
  2023-04-01 13:41                   ` Eli Zaretskii
@ 2023-04-03 13:02                     ` Peter Oliver
  0 siblings, 0 replies; 73+ messages in thread
From: Peter Oliver @ 2023-04-03 13:02 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: yantar92, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1350 bytes --]

On Sat, 1 Apr 2023, Eli Zaretskii wrote:

>> Date: Sat, 1 Apr 2023 14:24:24 +0100 (BST)
>> From: Peter Oliver <p.d.oliver@mavit.org.uk>
>> cc: emacs-devel@gnu.org
>>
>> On Sat, 1 Apr 2023, Ihor Radchenko wrote:
>>
>>> Note, however, that Languagetool also has command line interface.
>>
>> Which, as is discussed elsewhere in the thread, is terribly inefficient.
>
> Since when is subprocess communications "outlawed" in Emacs for
> significant features that need to have good performance?

I wasn’t aware that anyone here was advocating that.

> Also, linking against a library instead of communicating with a
> program has its disadvantages as well: if the library crashes, so does
> Emacs.

I think you’ve got this thread confused with the one about Jinx, which uses the Enchant library for spellchecking.

In this thread, I have said that I believe that we could benefit from LanguageTool offering some IPC mechanism other than TCP.

OTOH, AIUU, Ihor believes that, rather than running LanguageTool persistently, it is tolerable to exec “java -jar languagetool-commandline.jar /path/to/file/to/be/checked” on each occasion that you wish to check some text.  The downside to this is that it takes many CPU-seconds for it to initialise before it can do any actual checking, and you pay that initialisation cost every time.

-- 
Peter Oliver

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

* Re: grammar checking
  2023-04-03  5:52 grammar checking Pedro Andres Aranda Gutierrez
@ 2023-04-03 13:51 ` Eli Zaretskii
  2023-04-03 15:01   ` Pedro Andres Aranda Gutierrez
  0 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2023-04-03 13:51 UTC (permalink / raw)
  To: Pedro Andres Aranda Gutierrez; +Cc: emacs-devel

> From: Pedro Andres Aranda Gutierrez <paaguti@gmail.com>
> Date: Mon, 3 Apr 2023 07:52:23 +0200
> 
> 1. I have worked with different word processors that provide grammar
> checking in addition to spellchecking. At the end of the day, I had to
> ignore 49 suggestions to accept a good one, which I would have caught
> with reasonable proof-reading. Writing is something that needs time.
> And I feel it every day, even for technical writing. And there are no
> shortcuts to that.
> 
> 2. I have tried grammar checking on different languages. Yes, I speak
> a couple of languages and I write fluently in four. And at the end, I
> either disable grammar checking or I just leave it there for fun. Some
> suggestions are as good as spellchecking was 20 years ago. And a good
> laugh may be worth it, but seriously, I'd rather not use grammar
> checking when in a hurry.
> 
> 3. I'm honoured to count professional writers and journalists among my
> friends and, no, they don't use grammar checking ;-) because they feel
> the tools currently force them into a style of writing which is not
> theirs.

That's okay: if this will become part of Emacs, it will be an optional
feature, so if you don't find it useful, just don't activate it.  Many
features in Emacs exist only for those who find them useful, and this
one is no exception.

From my POV, if people who write doc strings and manual submissions
for Emacs will be able to have their text proof-read before they
submit it, it will be an advantage, since the patch reviewers will
need to invest less time in finding and fixing their grammar mistakes
(although probably not in your submissions).

> I feel it would be more urgent to concentrate on spellchecking and see
> how to improve support for languages with word composition on current
> solutions in core Emacs or packages in ELPA.

We will continue developing and improving our spell-checking features
independently of whether grammar checking will or will not be added.
There's no zero-sum game here; these are two separate features, and
none of them will come at the expense of the other.



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

* Re: grammar checking
  2023-04-03 13:51 ` Eli Zaretskii
@ 2023-04-03 15:01   ` Pedro Andres Aranda Gutierrez
  0 siblings, 0 replies; 73+ messages in thread
From: Pedro Andres Aranda Gutierrez @ 2023-04-03 15:01 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

Eli writes:

> From my POV, if people who write doc strings and manual submissions
> for Emacs will be able to have their text proof-read before they
> submit it, it will be an advantage, since the patch reviewers will
> need to invest less time in finding and fixing their grammar mistakes

That could be a valid point, since docstrings require a certain style and
a reduced grammar. But I'm just a frustrated potential user ;-)

> (although probably not in your submissions).

Thanks for the trust, but read them N times before accepting them. As I said,
grammar checking and proof-reading come hand in hand and cost time.
I'm the first to blush at some things I write when on a hurry or overexcited

;-)
/PA

On Mon, 3 Apr 2023 at 15:50, Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Pedro Andres Aranda Gutierrez <paaguti@gmail.com>
> > Date: Mon, 3 Apr 2023 07:52:23 +0200
> >
> > 1. I have worked with different word processors that provide grammar
> > checking in addition to spellchecking. At the end of the day, I had to
> > ignore 49 suggestions to accept a good one, which I would have caught
> > with reasonable proof-reading. Writing is something that needs time.
> > And I feel it every day, even for technical writing. And there are no
> > shortcuts to that.
> >
> > 2. I have tried grammar checking on different languages. Yes, I speak
> > a couple of languages and I write fluently in four. And at the end, I
> > either disable grammar checking or I just leave it there for fun. Some
> > suggestions are as good as spellchecking was 20 years ago. And a good
> > laugh may be worth it, but seriously, I'd rather not use grammar
> > checking when in a hurry.
> >
> > 3. I'm honoured to count professional writers and journalists among my
> > friends and, no, they don't use grammar checking ;-) because they feel
> > the tools currently force them into a style of writing which is not
> > theirs.
>
> That's okay: if this will become part of Emacs, it will be an optional
> feature, so if you don't find it useful, just don't activate it.  Many
> features in Emacs exist only for those who find them useful, and this
> one is no exception.
>
> From my POV, if people who write doc strings and manual submissions
> for Emacs will be able to have their text proof-read before they
> submit it, it will be an advantage, since the patch reviewers will
> need to invest less time in finding and fixing their grammar mistakes
> (although probably not in your submissions).
>
> > I feel it would be more urgent to concentrate on spellchecking and see
> > how to improve support for languages with word composition on current
> > solutions in core Emacs or packages in ELPA.
>
> We will continue developing and improving our spell-checking features
> independently of whether grammar checking will or will not be added.
> There's no zero-sum game here; these are two separate features, and
> none of them will come at the expense of the other.



-- 
Fragen sind nicht da um beantwortet zu werden,
Fragen sind da um gestellt zu werden
Georg Kreisler

Headaches with a Juju log:
unit-basic-16: 09:17:36 WARNING juju.worker.uniter.operation we should
run a leader-deposed hook here, but we can't yet



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

* Re: Grammar checking
  2023-04-03  3:05                     ` Richard Stallman
@ 2023-04-06 12:29                       ` Lynn Winebarger
  2023-04-08  3:28                         ` Richard Stallman
                                           ` (2 more replies)
  0 siblings, 3 replies; 73+ messages in thread
From: Lynn Winebarger @ 2023-04-06 12:29 UTC (permalink / raw)
  To: Richard Stallman; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 6984 bytes --]

On Sun, Apr 2, 2023, 11:05 PM Richard Stallman <rms@gnu.org> wrote:

> [[[ 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. ]]]
>
>   > > If the released (and free) LanguageTool _program_ gives adequate
>   > > results, we could make Emacs support working with that.  But we
> should
>   > > take pains _not_ to support the kind of communication that that SaaSS
>   > > server offers.
>   > They may not make it easy, see this complaint on their forum:
>
> Would you please spell out what it is
> that they "may not make easy"?
>
>   >
> https://forum.languagetool.org/t/about-the-premium-version-of-languagetool/8469
>
> I looked at that page, but lacking the context, I can't understand it
> well enough to divine the point that your message hints at.
>


I may have been mistaken in my first reading. I read the message as saying
that any process using the free service would receive an advertisement of
how many corrections would be found by the premium service.  I am assuming
that at the least emacs maintainers would want to filter that out by
default. The forum message may only refer to using the web user interface
for checking sample text, though.

If the former is true though, it could be difficult to ensure such
advertising is always filtered. It really depends on the owners of that
service, who can change over time.


 > * The process for contributing "rules" to the free version is to go
>   > through the SaaSS's forum sites.
>   > https://community.languagetool.org/rule/list?lang=en shows 5919 rules
>   > for english, presumably in the basic version.
>

I found a more on-point reference addressing my concern, i.e. how will
contributions replicating the rules implemented in the premium version be
treated by the project developers:

https://forum.languagetool.org/t/free-lt-premium-for-contributors/8639

Since the exact nature of those premium rules is presumably not disclosed
just by virtue of having a premium subscription, I can only guess this
reverse engineering would happen by following a process like:

1) Take a large corpus of texts with known grammatical errors, e.g.
https://www.cl.cam.ac.uk/research/nl/bea2019st/ or
https://ai.googleblog.com/2021/08/the-c4200m-synthetic-dataset-for.html?m=1
2) Record the results produced by the free and premium versions on each
test case
3) Formulate rules that specifically fix issues found by the premium
version and not the free version.

Perhaps the LanguageTool.org owners would consider this a violation of
their service's terms and conditions as a justification for not accepting
contributions of source code to the project.

OTOH, if an emacs developer or user simply wants to systematically improve
the free version of LanguageTool, the most obvious method for doing so
would be

1) Take a large corpus of texts with known grammatical errors, see above
2) Record the results produced by the free rule set
3) Formulate rules that specifically fix issues found, prioritizing issues
by some measure of expected frequency in real text

Presumably the additional rules in the premium version have been added
precisely according to some measure of their expected frequency, possibly
by analysis of real-world text from users over the years the service has
been available.

It would be surprising if any attempt to systematically improve my the
rules in LanguageTool did not have significant overlap with the rules found
in the premium version, if that attempt was successful, just due to the
definition of "successful" in statistical terms and the assumption that the
premium rule set is likewise "successful".

We could consider forking that code in a limited way: adding new rules.
>
> In general, we should cooperate with upstream developers, but we don't
> have to jump through hoops to do so.
>

I'm not personally very pure in the software I use, so I'm surprised at how
much the issues I perceive seem to bother me.  I've been an emacs user
since the 90s, and it would never have occurred to me that I would ever be
concerned about contributing code to improve emacs, whether directly to the
emacs projects, or indirectly through one of its dependencies.  From what I
see now, that will not be the case if grammar checking support is added
that depends on languagetool.

I suppose there's another, even more abstract concern with open source
software that is developed specifically in conjunction with a SaaSS
business, which is:  To what extent does data from users of the SaaSS drive
development, or even get incorporated in some (aggregated or statistical)
form in the source code.  For example, what if a grammar checker
incorporated a "deep learning" system that had been trained on such data.
In most cases, it would be impossible to reconstruct the training data set
starting from the data specifying the trained model.  But, would it be
acceptable for a GNU software project to depend on such software?  I don't
know the answer, but I think it's a real question when dealing with open
source software from projects like LanguageTool.  I also don't know or
allege that there's anything like that in LanguageTool, but neither can I
be certain that there is not.  I can't help but think this business model -
maintaining an open source version as a loss leader for a proprietary or
SaaSS version - is only going to continue growing, and hence the need to
address it in the GNU coding manual section 8 or otherwise.


>   >    Looking at the java code makes it appear there are
>   > many hard-coded rules, but I don't know if that is really the case.
>   > That is whether the code for the rules are some generic implementation
>   > of the rules coded in XML, or if the XML rule sets are being
>   > translated into java code at some point in the build process.
>
> I can only guess at the context this is about, but it sounds like
> you're suggesting that it may not be clear what form of the code is
> the real source code.  Do they not say?  Does their source release
> include the XML?  Does it include Make rules to translate the XML into
> Java?


I don't do a lot of Java coding, and it was a cursory examination.  I did
eventually find the xml rulesets linked to from
https://dev.languagetool.org/languages, which is classified as "user
documentation". It appears most rules in well-supported languages are in
XML, with some coded in Java.  Whether the coding in Java is for speed or
to overcome limitations of the semantics of rules expressed in XML, I have
no idea.

I'm going to leave my concerns at that.  I've already spent too much time
on this as it is.  I just thought the last-minute hair-pulling discussion
of tree-sitter grammar files, which frankly seem to have much less ethical
baggage, should not be repeated after grammar checking support depending on
LanguageTool is already implemented and adopted.

Lynn

[-- Attachment #2: Type: text/html, Size: 9675 bytes --]

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

* Re: Grammar checking
  2023-04-06 12:29                       ` Lynn Winebarger
@ 2023-04-08  3:28                         ` Richard Stallman
  2023-04-08 13:33                           ` Lynn Winebarger
  2023-04-08  3:28                         ` Richard Stallman
  2023-04-08  3:28                         ` Richard Stallman
  2 siblings, 1 reply; 73+ messages in thread
From: Richard Stallman @ 2023-04-08  3:28 UTC (permalink / raw)
  To: Lynn Winebarger; +Cc: emacs-devel

[[[ 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. ]]]

  > I may have been mistaken in my first reading. I read the message as saying
  > that any process using the free service would receive an advertisement of
  > how many corrections would be found by the premium service.  I am assuming
  > that at the least emacs maintainers would want to filter that out by
  > default. The forum message may only refer to using the web user interface
  > for checking sample text, though.

  > If the former is true though, it could be difficult to ensure such
  > advertising is always filtered. It really depends on the owners of that
  > service, who can change over time.

We would not want to release Emacs with code that would talk to the
premium dis-service.  We would want to write the code we release so
that it would not try to use the dis-service.

Since Emacs is free, users could change the code so it would talk
to the LanguageTool dis-service.  We have no say over that.
But we would never release or recommend that code.

This being so, I think we don't need to worry about whether the dis-service
sends advertisements to users of software that talks to it.   Our
software will not talk to it anyway.





-- 
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)





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

* Re: Grammar checking
  2023-04-06 12:29                       ` Lynn Winebarger
  2023-04-08  3:28                         ` Richard Stallman
  2023-04-08  3:28                         ` Richard Stallman
@ 2023-04-08  3:28                         ` Richard Stallman
  2023-04-08 15:20                           ` Lynn Winebarger
  2023-04-09  9:02                           ` Philip Kaludercic
  2 siblings, 2 replies; 73+ messages in thread
From: Richard Stallman @ 2023-04-08  3:28 UTC (permalink / raw)
  To: Lynn Winebarger; +Cc: emacs-devel

[[[ 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. ]]]

  > I suppose there's another, even more abstract concern with open source
  > software that is developed specifically in conjunction with a SaaSS
  > business,

I can't be certain which program(s) you are talking about, but I think
you are referring to the free version of LanguageTool as "open source"
rather than "free".  Nearly all free programs are open source and
nearly all open source programs are free, but normally we care whather
a program is free, and we do NOT care whether it is open source.
https://gnu.org/philosophy/open-source-misses-the-point.html.

I think you must have chosen to write "open source" there to convey a
point, but what point was it?

For any program want Emacs to incorporate or use, we insist it be
free.  Whether that program is open source is not a question we are
concerned about.

  >   But, would it be
  > acceptable for a GNU software project to depend on such software?

If we have free software to do further training on the neural network,
we can accept it.

Does LanguageTool use a neural network?

-- 
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)





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

* Re: Grammar checking
  2023-04-06 12:29                       ` Lynn Winebarger
  2023-04-08  3:28                         ` Richard Stallman
@ 2023-04-08  3:28                         ` Richard Stallman
  2023-04-08 14:23                           ` Lynn Winebarger
  2023-04-08  3:28                         ` Richard Stallman
  2 siblings, 1 reply; 73+ messages in thread
From: Richard Stallman @ 2023-04-08  3:28 UTC (permalink / raw)
  To: Lynn Winebarger; +Cc: emacs-devel

[[[ 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. ]]]

  > Perhaps the LanguageTool.org owners would consider this a violation of
  > their service's terms and conditions as a justification for not accepting
  > contributions of source code to the project.

This seems to assume that a developer has an obligation to install any change
that "is an improvement" and must submit a "justification" for not adding it.

That seems very strange to me.  I think any developer is entitled to
reject a change and does not have to justify rejecting it.

  > We could consider forking that code in a limited way: adding new rules.

We can consider forking in any manner whatsoever.  Of course, forking
the free version of LanguageTool has a practical downside (more work
for us!) as well as an upside.  We might decide it is not worth the
trouble.

-- 
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)





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

* Re: Grammar checking
  2023-04-08 13:33                           ` Lynn Winebarger
@ 2023-04-08 13:23                             ` Eli Zaretskii
  0 siblings, 0 replies; 73+ messages in thread
From: Eli Zaretskii @ 2023-04-08 13:23 UTC (permalink / raw)
  To: Lynn Winebarger; +Cc: rms, emacs-devel

> From: Lynn Winebarger <owinebar@gmail.com>
> Date: Sat, 8 Apr 2023 09:33:55 -0400
> Cc: emacs-devel@gnu.org
> 
> On Fri, Apr 7, 2023 at 11:28 PM Richard Stallman <rms@gnu.org> wrote:
> > This being so, I think we don't need to worry about whether the dis-service
> > sends advertisements to users of software that talks to it.   Our
> > software will not talk to it anyway.
> 
> The concern is whether their *free* service sends the advertisements.
> Maybe someone who actually uses LanguageTool's free service now can
> say whether they see such ads in the feedback they receive ("the
> premium version would have identified X additional problems").

This is all besides the point, AFAIU, because we are talking about
installing the stand-alone application, which AFAICT doesn't display
any advertisements and doesn't use any services to begin with.



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

* Re: Grammar checking
  2023-04-08  3:28                         ` Richard Stallman
@ 2023-04-08 13:33                           ` Lynn Winebarger
  2023-04-08 13:23                             ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Lynn Winebarger @ 2023-04-08 13:33 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

On Fri, Apr 7, 2023 at 11:28 PM Richard Stallman <rms@gnu.org> wrote:
> This being so, I think we don't need to worry about whether the dis-service
> sends advertisements to users of software that talks to it.   Our
> software will not talk to it anyway.

The concern is whether their *free* service sends the advertisements.
Maybe someone who actually uses LanguageTool's free service now can
say whether they see such ads in the feedback they receive ("the
premium version would have identified X additional problems").

Lynn



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

* Re: Grammar checking
  2023-04-08  3:28                         ` Richard Stallman
@ 2023-04-08 14:23                           ` Lynn Winebarger
  0 siblings, 0 replies; 73+ messages in thread
From: Lynn Winebarger @ 2023-04-08 14:23 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

On Fri, Apr 7, 2023 at 11:28 PM Richard Stallman <rms@gnu.org> wrote:
>   > Perhaps the LanguageTool.org owners would consider this a violation of
>   > their service's terms and conditions as a justification for not accepting
>   > contributions of source code to the project.

I recall writing this, but I thought there was additional context.
Unfortunately I can't locate my original email for reference.  I am
sure I did not intend the following inference.

> This seems to assume that a developer has an obligation to install any change
> that "is an improvement" and must submit a "justification" for not adding it.
>
> That seems very strange to me.  I think any developer is entitled to
> reject a change and does not have to justify rejecting it.

Sure.  My question was whether the GNU project condones introducing
dependencies in GNU software X on a software *project* Y such that
attempts to improve functionality in X will only be incorporated by Y
if they do not reduce the value of proprietary or SaaSS offering Z
which Y promotes.  While the developer has every right to control
their distribution of software, potential contributors also have every
right to consider whether or how a contribution will be considered.
For me, I simply would not consider making a contribution under the
LGPL to a project that might reject it for the free project but
incorporate it into their SaaSS.  It's not like there would be any way
to tell if that happened.  The only way I would contribute to such
software would be in a fork under an Affero-style copyleft license,
which as you note below, can be quite a bit of trouble.

>   > We could consider forking that code in a limited way: adding new rules.
>
> We can consider forking in any manner whatsoever.  Of course, forking
> the free version of LanguageTool has a practical downside (more work
> for us!) as well as an upside.  We might decide it is not worth the
> trouble.

I appear to have messed up the quoting here - that sentence was from
one of your earlier replies.

Lynn



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

* Re: Grammar checking
  2023-04-08  3:28                         ` Richard Stallman
@ 2023-04-08 15:20                           ` Lynn Winebarger
  2023-04-19  5:13                             ` Richard Stallman
  2023-04-09  9:02                           ` Philip Kaludercic
  1 sibling, 1 reply; 73+ messages in thread
From: Lynn Winebarger @ 2023-04-08 15:20 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

On Fri, Apr 7, 2023 at 11:28 PM Richard Stallman <rms@gnu.org> wrote:
>   > I suppose there's another, even more abstract concern with open source
>   > software that is developed specifically in conjunction with a SaaSS
>   > business,
>
> I can't be certain which program(s) you are talking about, but I think
> you are referring to the free version of LanguageTool as "open source"
> rather than "free".  Nearly all free programs are open source and
> nearly all open source programs are free, but normally we care whather
> a program is free, and we do NOT care whether it is open source.
> https://gnu.org/philosophy/open-source-misses-the-point.html.
>
> I think you must have chosen to write "open source" there to convey a
> point, but what point was it?
>

I'm attempting to refer to the project and/or development process
maintaining the primary distribution of the software.  When a program
is distributed as free software, but the project that
develops/maintains/distributes that program exists in part or in whole
to promote either a proprietary or SaaSS version of the software, I do
not understand how the program and the project are effectively
distinguished for the purpose of Section 8 of the GNU coding
standards.  That is, I do not know how a GNU program can depend on
such software without promoting the associated project and effectively
the proprietary software or SaaSS, under the two-step transitivity
rule described in Section 8.

Of course, my understanding is not required.  I believe my question
has been resolved - Section 8 is not intended to prohibit reliance on
such software projects.

>   >   But, would it be
>   > acceptable for a GNU software project to depend on such software?
>
> If we have free software to do further training on the neural network,
> we can accept it.

On further reflection, I had thought this situation would be covered
under the "preferred form of modification" rule, in that the dataset
used to train the algorithm (NN or otherwise) would be considered a
form of "source code".  It seems I was mistaken on that as well.

> Does LanguageTool use a neural network?

I do not know.

Lynn



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

* Re: Grammar checking
  2023-04-08  3:28                         ` Richard Stallman
  2023-04-08 15:20                           ` Lynn Winebarger
@ 2023-04-09  9:02                           ` Philip Kaludercic
  2023-04-09 12:31                             ` Lynn Winebarger
  1 sibling, 1 reply; 73+ messages in thread
From: Philip Kaludercic @ 2023-04-09  9:02 UTC (permalink / raw)
  To: Richard Stallman; +Cc: Lynn Winebarger, emacs-devel

Richard Stallman <rms@gnu.org> writes:

>   >   But, would it be
>   > acceptable for a GNU software project to depend on such software?
>
> If we have free software to do further training on the neural network,
> we can accept it.
>
> Does LanguageTool use a neural network?

No, according to [0] as of 2010 the approach they were using was
rule-based, as opposed to statistical (neutral network).

[0] https://www.researchgate.net/profile/Marcin-Milkowski/publication/220282022_Developing_an_open-source_rule-based_proofreading_tool/links/5b030f720f7e9be94bdabb60/Developing-an-open-source-rule-based-proofreading-tool.pdf

-- 
Philip Kaludercic



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

* Re: Grammar checking
  2023-04-09  9:02                           ` Philip Kaludercic
@ 2023-04-09 12:31                             ` Lynn Winebarger
  2023-04-22  2:22                               ` Richard Stallman
  0 siblings, 1 reply; 73+ messages in thread
From: Lynn Winebarger @ 2023-04-09 12:31 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Richard Stallman, emacs-devel

On Sun, Apr 9, 2023 at 5:02 AM Philip Kaludercic <philipk@posteo.net> wrote:
> Richard Stallman <rms@gnu.org> writes:
>
> >   >   But, would it be
> >   > acceptable for a GNU software project to depend on such software?
> >
> > If we have free software to do further training on the neural network,
> > we can accept it.
> >
> > Does LanguageTool use a neural network?
>
> No, according to [0] as of 2010 the approach they were using was
> rule-based, as opposed to statistical (neutral network).
>
> [0] https://www.researchgate.net/profile/Marcin-Milkowski/publication/220282022_Developing_an_open-source_rule-based_proofreading_tool/links/5b030f720f7e9be94bdabb60/Developing-an-open-source-rule-based-proofreading-tool.pdf

2010 is a long time ago in terms of machine learning.  It's also
possible to construct a rule semantics that incorporates machine
learning.

There's this directory in languagetool's source code that appears to
provide infrastructure for using some RPC protocol for "MLServer"s:
https://github.com/languagetool-org/languagetool/tree/master/languagetool-core/src/main/java/org/languagetool/rules/ml.
One common expansion of "ML" is "machine learning", so it's *possible*
that this provides infrastructure for consulting some machine learning
service.  Determining what it is actually used for, whether the RPC
services are local or remote, and whether it is used in the free
version or is simply infrastructure for the premium service, would
require much more investigation than I am willing to perform any time
soon.  Hence, I don't know.

Lynn



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

* Re: Grammar checking
  2023-04-08 15:20                           ` Lynn Winebarger
@ 2023-04-19  5:13                             ` Richard Stallman
  0 siblings, 0 replies; 73+ messages in thread
From: Richard Stallman @ 2023-04-19  5:13 UTC (permalink / raw)
  To: Lynn Winebarger; +Cc: emacs-devel

[[[ 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. ]]]

  > I'm attempting to refer to the project and/or development process
  > maintaining the primary distribution of the software.

I can see various meanings for that.
Do you mean that you want to talk about those things now
so you want to refer to them in your email?
Or do you mean that you want a free program's release materials
and documentation to refer to those things?

  > When a program
  > is distributed as free software, but the project that
  > develops/maintains/distributes that program exists in part or in whole
  > to promote either a proprietary or SaaSS version of the software, I do
  > not understand how the program and the project are effectively
  > distinguished for the purpose of Section 8 of the GNU coding
  > standards.

I think you have a valid point.  We could call it a "free program
with a moral shadow."

But we don't always have the luxury to reject them.
It could mean we can't compile the program we care about, not at all.
That would be throwing the baby out with the bathwater.

At most drastic, we could recommend that people avoid certain
languages whose tools have problems of this sort.

But just saying "compile Foo.blahlang" and including a make rule to do
it does not promote the Blah compiler very much.  So if the Blah
compiler has a moral shadow, it doesn't fall on the Foo program very
much.  Not if you don't talk much about the Blah language in the Foo
documentation (and why would/should you?).

-- 
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)





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

* Re: Grammar checking
  2023-04-09 12:31                             ` Lynn Winebarger
@ 2023-04-22  2:22                               ` Richard Stallman
  2023-04-23  2:25                                 ` Richard Stallman
  2023-04-23 14:14                                 ` Lynn Winebarger
  0 siblings, 2 replies; 73+ messages in thread
From: Richard Stallman @ 2023-04-22  2:22 UTC (permalink / raw)
  To: Lynn Winebarger; +Cc: philipk, emacs-devel

[[[ 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. ]]]

  > There's this directory in languagetool's source code that appears to
  > provide infrastructure for using some RPC protocol for "MLServer"s:
  > https://github.com/languagetool-org/languagetool/tree/master/languagetool-core/src/main/java/org/languagetool/rules/ml.

If we wamt to use the free version of Languagetool, this raiss
important questions.  First of all, does the program as currently
released try by default to use tha remote protocol?

Secondarily, how much of the usefulness of that program as currently
released if we turn that off?  And how would we modify the release
to turn that off?

If the program as currently released does NOT try ny default to use
tha protocol, is there something that they invite users to do so as
to start using it?  We might want to delete that feature from the version
we distribute, so we don't end up distributing SaaSS unknowingly.

-- 
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)





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

* Re: Grammar checking
  2023-04-22  2:22                               ` Richard Stallman
@ 2023-04-23  2:25                                 ` Richard Stallman
  2023-04-23 14:14                                 ` Lynn Winebarger
  1 sibling, 0 replies; 73+ messages in thread
From: Richard Stallman @ 2023-04-23  2:25 UTC (permalink / raw)
  To: rms; +Cc: owinebar, philipk, emacs-devel

[[[ 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. ]]]

I wrote:

  > If we wamt to use the free version of Languagetool, this raiss
  > important questions.  First of all, does the program as currently
  > released try by default to use tha remote protocol?

  > Secondarily, how much of the usefulness of that program as currently
  > released if we turn that off?  And how would we modify the release
  > to turn that off?

but the second graf should have said

  > Secondarily, how much of the usefulness of that program as
  > currently released is due to using that dis-service?  And how
  > would we modify the release to turn that off?


-- 
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)





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

* Re: Grammar checking
  2023-04-22  2:22                               ` Richard Stallman
  2023-04-23  2:25                                 ` Richard Stallman
@ 2023-04-23 14:14                                 ` Lynn Winebarger
  1 sibling, 0 replies; 73+ messages in thread
From: Lynn Winebarger @ 2023-04-23 14:14 UTC (permalink / raw)
  To: rms; +Cc: philipk, emacs-devel

On Fri, Apr 21, 2023 at 10:22 PM Richard Stallman <rms@gnu.org> wrote:
>   > There's this directory in languagetool's source code that appears to
>   > provide infrastructure for using some RPC protocol for "MLServer"s:
>   > https://github.com/languagetool-org/languagetool/tree/master/languagetool-core/src/main/java/org/languagetool/rules/ml.
>
> If we wamt to use the free version of Languagetool, this raiss
> important questions.  First of all, does the program as currently
> released try by default to use tha remote protocol?
>
[From subsequent amending email]
>   > Secondarily, how much of the usefulness of that program as
>   > currently released is due to using that dis-service?  And how
>   > would we modify the release to turn that off?
>
> If the program as currently released does NOT try ny default to use
> tha protocol, is there something that they invite users to do so as
> to start using it?  We might want to delete that feature from the version
> we distribute, so we don't end up distributing SaaSS unknowingly.
>

The only concrete description I recall seeing (from an emacs user) is
from Ihor Radchenko in
https://lists.gnu.org/archive/html/emacs-devel/2023-03/msg01044.html

The design of the software reflects its intended use in a multi-user
SaaSS server.  If emacs maintainer time is going to be consumed by
ensuring an acceptable version and configuration is installed on user
machines, I hope some consideration (by that maintainer) would be
whether the bulk of the functionality could be implemented in a
simpler, single-user, form in some incremental way - say by an emacs
lisp program running in a batch emacs process.
https://dev.languagetool.org/languages classifies the rules enforced
by LanguageTool into XML, Java-based, spell-checking, and confusion
pairs.  There's a separate 8GB of n-gram data, covering the languages
supported by the languagetool organization.  So, how much work would
be required to meaningfully use the confusion pairs, and what would it
provide.  Or interpreting and applying the XML rules.  Or be more
efficient in the use of the 8GB of n-gram data
(https://dev.languagetool.org/finding-errors-using-n-gram-data).

Maybe the effort wouldn't be worth it, but maybe it would.  I don't
think it's obvious either way.

Lynn



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

end of thread, other threads:[~2023-04-23 14:14 UTC | newest]

Thread overview: 73+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-31  7:46 Grammar checking Payas Relekar
2023-03-31 11:20 ` Eli Zaretskii
2023-03-31 12:55   ` Ihor Radchenko
2023-03-31 13:11     ` Eli Zaretskii
2023-03-31 13:29       ` Ihor Radchenko
2023-03-31 14:19         ` Eli Zaretskii
2023-04-02  3:11       ` Richard Stallman
2023-03-31 12:59   ` Gregory Heytings
2023-03-31 13:20     ` Eli Zaretskii
2023-03-31 13:59       ` Gregory Heytings
2023-03-31 14:28         ` Eli Zaretskii
2023-03-31 14:24       ` Ihor Radchenko
2023-03-31 14:39         ` Eli Zaretskii
2023-04-01  6:52           ` Ihor Radchenko
2023-04-01  7:00             ` Eli Zaretskii
2023-04-01  7:10               ` Ihor Radchenko
2023-04-01  7:14                 ` Eli Zaretskii
2023-04-01 13:09             ` Peter Oliver
2023-04-01 13:17               ` Ihor Radchenko
2023-04-01 13:24                 ` Peter Oliver
2023-04-01 13:32                   ` Ihor Radchenko
2023-04-01 13:42                     ` Eli Zaretskii
2023-04-01 13:41                   ` Eli Zaretskii
2023-04-03 13:02                     ` Peter Oliver
  -- strict thread matches above, loose matches on Subject: below --
2023-04-03  5:52 grammar checking Pedro Andres Aranda Gutierrez
2023-04-03 13:51 ` Eli Zaretskii
2023-04-03 15:01   ` Pedro Andres Aranda Gutierrez
2023-03-31 10:03 Grammar checking Payas Relekar
2023-03-29  3:00 jinx Richard Stallman
2023-03-29 22:46 ` jinx Michael Eliachevitch
2023-03-31  4:29   ` jinx Richard Stallman
2023-03-31  6:51     ` jinx Eli Zaretskii
2023-03-31  7:10       ` jinx Gregory Heytings
2023-03-31  7:15         ` Grammar checking (was: jinx) Eli Zaretskii
2023-03-31  7:47           ` Grammar checking Philip Kaludercic
2023-03-31  8:09             ` Gregory Heytings
2023-03-31  8:38               ` Philip Kaludercic
2023-03-31  9:02                 ` Gregory Heytings
2023-03-31 11:37               ` Lynn Winebarger
2023-03-31 12:01                 ` Gregory Heytings
2023-03-31 12:45                   ` Peter Oliver
2023-03-31 15:29                     ` Philip Kaludercic
2023-03-31 17:00                       ` Peter Oliver
2023-03-31 12:54               ` Peter Oliver
2023-03-31 13:09                 ` Gregory Heytings
2023-03-31 11:23             ` Eli Zaretskii
2023-03-31 12:12               ` Peter Oliver
2023-03-31 15:25               ` Philip Kaludercic
2023-03-31  8:40           ` Nasser Alkmim
2023-03-31  8:45             ` Michael Eliachevitch
2023-03-31 13:44               ` Felician Nemeth
2023-03-31 16:03               ` Peter Oliver
2023-03-31  8:48             ` Gregory Heytings
2023-04-01 12:59               ` Lynn Winebarger
2023-04-01 13:18                 ` Gregory Heytings
2023-04-01 13:37                 ` Eli Zaretskii
2023-04-01 17:30                   ` Lynn Winebarger
2023-04-01 17:35                     ` Eli Zaretskii
2023-04-02  3:12                 ` Richard Stallman
2023-04-02 15:24                   ` Lynn Winebarger
2023-04-03  3:05                     ` Richard Stallman
2023-04-03  3:05                     ` Richard Stallman
2023-04-06 12:29                       ` Lynn Winebarger
2023-04-08  3:28                         ` Richard Stallman
2023-04-08 13:33                           ` Lynn Winebarger
2023-04-08 13:23                             ` Eli Zaretskii
2023-04-08  3:28                         ` Richard Stallman
2023-04-08 14:23                           ` Lynn Winebarger
2023-04-08  3:28                         ` Richard Stallman
2023-04-08 15:20                           ` Lynn Winebarger
2023-04-19  5:13                             ` Richard Stallman
2023-04-09  9:02                           ` Philip Kaludercic
2023-04-09 12:31                             ` Lynn Winebarger
2023-04-22  2:22                               ` Richard Stallman
2023-04-23  2:25                                 ` Richard Stallman
2023-04-23 14:14                                 ` Lynn Winebarger
2023-03-31 10:59             ` Eli Zaretskii
2023-04-02  3:11               ` Richard Stallman
2023-04-02  3:40                 ` Emanuel Berg

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).