guix-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug#63987] [PATCH] gnu: Add emacs-jinx.


From: Liliana Marie Prikler
Subject: [bug#63987] [PATCH] gnu: Add emacs-jinx.
Date: Sun, 18 Jun 2023 14:14:42 +0200
User-agent: Evolution 3.46.4

Am Freitag, dem 09.06.2023 um 23:00 +0000 schrieb mekeor@posteo.de:
> * gnu/packages/emacs-xyz.scm (emacs-jinx): New variable.
> ---
> Hello Guix! I have some questions about this patch that I'm
> submitting:
> 
> - emacs-jinx needs gcc at build time. Should I use gcc-toolchain (or
>   rather the internal gcc) package?
Regular GCC ought to suffice.  I'm not sure why it isn't an implicit
input of emacs-build-system, but you get what you code for.

> - When using the module (gnu packages commencement), I first got the
>   following warning. That's why I decided to use it with a prefix
>   instead. What do you think about that?
> 
>   WARNING: (gnu packages emacs-xyz): `canonical-package' imported
> from
>   both (gnu packages base) and (gnu packages commencement)
> 
> - I did not introduce any (revision "0") variable or so. I hope
> that's
>   okay. I'm not sure when to use it.
I personally only find that okay when using tagged releases, but
there's different opinions on that and slightly varying styles
throughout the code base.  I'd prefer it if you used the 
  (commit (f version)) 
pattern, where f is some transformation – including (commit version).

> - I placed the package declaration right after other spelling related
>   Emacs packages. Unfortunately, the declaration of emacs-jit-spell
> is
>   not close. I could send another additional patch that moves all
>   spelling-related Emacs packages into an own section, if you'd like.
>   Like this:
Sorting-wise, why not place it right before emacs-jit-spell?
jinx < jit.

>   ;;;
>   ;;; Spelling
>   ;;;
> 
> Anyways. Cheers!
> 
>  gnu/packages/emacs-xyz.scm | 73
> ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 73 insertions(+)
> 
> diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
> index 0ea9732bfa..7e4f1a1fea 100644
> --- a/gnu/packages/emacs-xyz.scm
> +++ b/gnu/packages/emacs-xyz.scm
> @@ -148,6 +148,7 @@
>  
>  (define-module (gnu packages emacs-xyz)
>    #:use-module ((guix licenses) #:prefix license:)
> +  #:use-module ((gnu packages commencement) #:prefix commencement:)
>    #:use-module (guix packages)
>    #:use-module (guix cvs-download)
>    #:use-module (guix download)
> @@ -265,6 +266,7 @@ (define-module (gnu packages emacs-xyz)
>    #:use-module (gnu packages virtualization)
>    #:use-module (gnu packages web-browsers)
>    #:use-module (gnu packages wget)
> +  #:use-module (gnu packages enchant)
>    #:use-module (guix utils)
>    #:use-module (srfi srfi-1)
>    #:use-module (ice-9 match))
> @@ -31922,6 +31924,77 @@ (define-public emacs-spell-fu
>  that runs from the syntax highlighter without starting external
> processes.")
>        (license license:gpl3+))))
>  
> +(define-public emacs-jinx
> +  (package
> +    (name "emacs-jinx")
> +    (version "0.8")
> +    (source
> +      (origin
> +        (method git-fetch)
> +        (uri
> +          (git-reference
> +            (url "https://github.com/minad/jinx";)
> +            (commit "7fced90fdaca5a482cd08b80967e0eac5ee8d885")))
> +        (file-name (git-file-name name version))
> +        (sha256
> +          (base32
> +           
> "1y097rnf9zg26jf4vh74a0laddfp4x6pp1fjqs3xqgwc0cmdq59w"))))
> +    (build-system emacs-build-system)
> +    (propagated-inputs (list emacs-compat))
> +    (native-inputs
> +      (list
> +        emacs-compat
> +        enchant
> +        commencement:gcc-toolchain
> +        pkg-config
> +        texinfo))
> +    (inputs (list enchant))
> +    (arguments
> +      (list
> +        #:phases
> +        #~(modify-phases %standard-phases
> +            ;; Compile the accompanying jinx-mod.c file with Emacs
> and
> +            ;; jinx.el. This needs to happen after expand-load-path
> phase so
> +            ;; that jinx.el is able to load emacs-compat.
> +            (add-after 'expand-load-path 'compile-jinx-mod-c
> +              (lambda _
> +                (invoke
> +                  "emacs" "--batch" "-L" "."
> +                  "-l" "jinx.el"
> +                  "-f" "jinx--load-module")
> +                (install-file "jinx-mod.so"
> +                  (string-append #$output "/lib"))))
The install-file ought to go in it's own phase, imho.
> +            ;; Patch Jinx.el to load the previously compiled jinx-
> mod.so from
> +            ;; correct output path instead of attempting to compile
> it.
> +            (add-after 'compile-jinx-mod-c 'use-compiled-jinx-mod-so
> +              (lambda _
> +                (let ((file "jinx.el"))
> +                  (make-file-writable file)
> +                  (emacs-substitute-sexps file
> +                    ("\"Compile and load dynamic module.\""
> +                      `(module-load
> +                         ,(string-append #$output "/lib/jinx-
> mod.so")))))))
You might want to use a patch instead if a simple substitute-sexps.  
> +            (add-after 'install 'makeinfo
> +              (lambda _
> +                (invoke "emacs" "--batch"
> +                  "--eval=(require 'ox-texinfo)"
> +                  "--eval=(find-file \"README.org\")"
> +                  "--eval=(org-texinfo-export-to-info)")
> +                (install-file "jinx.info"
> +                  (string-append #$output "/share/info")))))))
Again, split build and install.
> +    (home-page "https://github.com/minad/jinx";)
> +    (synopsis "Emacs Enchanted Spell Checker")
> +    (description
> +      "Jinx is a fast just-in-time spell-checker for Emacs.  Jinx
> highlights
> +misspelled words in the text of the visible portion of the buffer. 
> For
> +efficiency, Jinx highlights misspellings lazily, recognizes window
> boundaries
> +and text folding, if any.
"Jinx highlights misspellings lazily and honours window boundaries as
well as potential text foldings."

>   For example, when unfolding or scrolling, only the
> +newly visible part of the text is checked if it has not been checked
> before.
This is somewhat gratuitous information, leave it out :)

> +Each misspelling can be corrected from a list of dictionary words
> presented as
> +a completion menu.  
That's something you'd expect, leave it.

> Jinx's high performance and low resource usage comes from
> +directly calling the widely-used API of the Enchant library.")
Maybe mention this in the first sentence instead of making it the last:
"Jinx is a just-in-time spell-checker for Emacs based on the Enchant
library."


Cheers

reply via email to

[Prev in Thread] Current Thread [Next in Thread]