abougouffa / minemacs

MinEmacs: an Emacs configuration framework for daily use
https://abougouffa.github.io/minemacs/
MIT License
143 stars 16 forks source link

Multiples problèmes avec Windows #99

Closed raylemon closed 1 year ago

raylemon commented 1 year ago

Bonjour, je passe en français par facilité… J’ai installé minemacs sur Windows en natif et sur WSL. La version WSL présente une autre issue mais j’ai surtout un problème de configuration au niveau de latex, d’où le fait que je passe en natif.

J’ai plusieurs soucis qui s’affichent en natif: Déjà, au démarrage, j’ai ceci :

../share/emacs/30.0.50/lisp/treesit.el: Warning: ‘loop’ is an obsolete alias (as of 27.1); use ‘cl-loop’ instead.

Ensuite, j’ai une configuration spéciale pour latex, que j’ai écrite dans le config.el dans le dossier .minemacs.d

(with-eval-after-load 'ox-latex
   (setq org-latex-packages-alist
           ' (("AUTO" "inputenc" t ("pdflatex"))
              ("" "lmodern" nil)
              ("T1" "fontenc" t ("pdflatex"))
              ("" "fontspec" t ("xelatex" "lualatex"))
              ("AUTO" "polyglossia" t ("xelatex" "lualatex"))
              ("AUTO" "babel" t ("pdflatex"))))

   ;;KOMA
 (add-to-list 'org-latex-classes
              '("koma-letter" "\\documentclass{scrletter}"
                ("\\section{%s}" . "\\section*{%s}")
                ("\\subsection{%s}" . "\\subsection*{%s}")
                ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                ("\\paragraph{%s}" . "\\paragraph*{%s}")
                ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))

 (add-to-list 'org-latex-classes
              '("koma-article" "\\documentclass{scrartcl}"
                ("\\section{%s}" . "\\section*{%s}")
                ("\\subsection{%s}" . "\\subsection*{%s}")
                ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                ("\\paragraph{%s}" . "\\paragraph*{%s}")
                ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))

 (add-to-list 'org-latex-classes
              '("cours" "\\documentclass{scrreprt}
\\usepackage{graphicx}
\\usepackage{array}
\\usepackage{tabularx}
\\usepackage{wrapfig}
\\usepackage[normalem]{ulem}
\\usepackage[dvipsnames]{xcolor}
\\usepackage{hyperref}
\\usepackage{tikz}
\\usepackage{eso-pic}
\\usepackage{mdframed}
[NO-DEFAULT-PACKAGES]
[PACKAGES]
[EXTRA]
\\linespread{1.15}"

                ("\\chapter{%s}" . "\\chapter*{%s}")
                ("\\section{%s}" . "\\section*{%s}")
                ("\\subsection{%s}" . "\\subsection*{%s}")
                ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                ("\\paragraph{%s}" . "\\paragraph*{%s}")
                ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))

 (add-to-list 'org-latex-classes
              '("koma-report" "\\documentclass{scrreprt}"
                ("\\part{%s}" . "\\part*{%s}")
                ("\\chapter{%s}" . "\\chapter*{%s}")
                ("\\section{%s}" . "\\section*{%s}")
                ("\\subsection{%s}" . "\\subsection*{%s}")
                ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                ("\\paragraph{%s}" . "\\paragraph*{%s}")
                ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))

 (add-to-list 'org-latex-classes
              '("koma-book" "\\documentclass[11pt]{scrbook}"
                ("\\part{%s}" . "\\part*{%s}")
                ("\\chapter{%s}" . "\\chapter*{%s}")
                ("\\section{%s}" . "\\section*{%s}")
                ("\\subsection{%s}" . "\\subsection*{%s}")
                ("\\subsubsection{%s}" . "\\subsubsection*{%s}")))

 (add-to-list 'org-latex-classes
              '("beamer" "\\documentclass[presentation]{beamer}"
                ("\\section{%s}" . "\\section*{%s}")
                ("\\subsection{%s}" . "\\subsection*{%s}"))))

Sans doute j’utilise mal le with-after-load, mais quand je fais un export en latex, la classe cours n’est pas reconnue malgré la définition. Par contre, si j’évalue le buffer, ça fonctionne.

J’ai aussi vu un problème avec corfu qui n’affiche rien (lié avec grep ou ripgrep, je n’ai pas eu le temps de le voir).

Y a-t-il un moyen pour régler ça ? Merci !

raylemon commented 1 year ago

Voici l’erreur que j’ai avec corfu :

Error running timer ‘corfu--auto-complete-deferred’: (file-missing "Searching for program" "No such file or directory" "grep") [4 times]

abougouffa commented 1 year ago

Bonjour @raylemon, Merci pour le retour.

Pour le message:

../share/emacs/30.0.50/lisp/treesit.el: Warning: ‘loop’ is an obsolete alias (as of 27.1); use ‘cl-loop’ instead.

C'est relatif à Emacs, comme vous utilisez la version de dev 30 (pas très stables). Moi, je suis actuellement sur la 29, avec la 30 j'ai eu pas mal de problèmes et concrètement, il n'y a pas d'avantages du côté des nouvelles fonctionnalités par rapport à la 29.

Honnêtement, je n'ai jamais testé la config avec LaTeX sous Windows.

En voyant votre config, il y a un truc qui me saute aux yeux. La variable org-latex-packages-alist est assignée directement avec un setq alors qu'elle a des "setter" et "getter" spécifiques. Elle doit être assignée en utilisant custom-set-variables (ou setopt pour Emacs29+). Cela peut expliquer une partie du problème. Pour le reste, je ne vois pas pourquoi ça ne marche pas!

Concernant l'erreur corfu, c'est clairement le manque de la commande grep sous Windows qui la provoque. Si la commande est installée (notamment sur WSL), il faudra peut être lancer Emacs la première fois à partir d'un terminal (PowerShell!) pour qu'il lise les variables d'environnements (et la bonne variable $PATH avec le chemin où grep est installée. Une fois lancé, et si tout marche bien, vous pouvez M-x +env-save pour sauvegarder l'environnement et le charger automatiquement durant les sessions futures.

Sinon, une relance d'Emacs en mode debug (MINEMACS_DEBUG=1 emacs) et un partage de la backtace me serait très utile pour déboguer ça.

raylemon commented 1 year ago

D’autres petits soucis avec Windows:

Sinon, comment puis-je ajouter des packages ? (notamment le langtool sans la version LSP…)

Merci !

abougouffa commented 1 year ago
  • eglot refuse de se connecter avec ltex-ls (ltex-ls est dans le path)

Dans quel mode? LaTeX? Car dernièrement, j'ai enlevé l'usage par défaut de LTeX pour les modes LaTeX et compagnie.

  • elfeed affiche une erreur: (void-function elfeed-update)

Bizarre, je viens de pushé une modif qui pourrait résoudre ça.

  • Impossible de créer une backtrace malheureusement (la commande ne marche pas sous Windows via Powershell)

La commande que j'ai posté est pour Linux, pour Windows (que je ne maitrise pas), je viens de voir que l'équivalent PowerShell est:

$Env:MINEMACS_DEBUG = "1"
emacs # Ou la comande qui lance Emacs dans votre machine

Sinon, comment puis-je ajouter des packages ? (notamment le langtool sans la version LSP…)

Il faudra les ajouter dans le config.el, je recommande d'utiliser use-package (built-in depuis Emacs29), dans ce cas, merci de noter que par défaut, les packages sont déferrés. Ceci permet de booster le temps de chargement d'Emacs. Donc, si vous voulez qu'un package soit chargé immédiatement, vous devez utiliser :demand t. Je viens d'ajouter un exemple dans le skel/config.el.

raylemon commented 1 year ago

Voici la backtrace obtenue.

Loading c:/Users/big04/.emacs.d/core/me-loaddefs.el (source)...done Loading c:/Users/big04/.emacs.d/core/me-modules.el (source)...done Loading c:/Users/big04/.minemacs.d/modules.el (source)...done Loading c:/Users/big04/.emacs.d/core/me-defaults.el (source)...done Loading c:/Users/big04/.emacs.d/core/me-splash.el (source)...done Loading c:/Users/big04/.emacs.d/core/me-bootstrap.el (source)...done Loading c:/Users/big04/.emacs.d/core/me-builtin.el (source)...done Loading c:/Users/big04/.emacs.d/core/me-gc.el (source)...done Loading c:/Users/big04/.emacs.d/core/me-keybindings.el (source)...done Loading c:/Users/big04/.emacs.d/core/me-evil.el (source)...done Loading c:/Users/big04/.emacs.d/core/me-core-ui.el (source)...done Loading c:/Users/big04/.emacs.d/core/me-completion.el (source)...done Loading c:/Users/big04/.emacs.d/modules/me-ui.el (source)...done Loading c:/Users/big04/.emacs.d/modules/me-editor.el (source)...done Loading c:/Users/big04/.emacs.d/modules/me-daemon.el (source)...done Loading c:/Users/big04/.emacs.d/modules/me-undo.el (source)...done Loading c:/Users/big04/.emacs.d/modules/me-multi-cursors.el (source)...done Loading c:/Users/big04/.emacs.d/modules/me-vc.el (source)...done Loading c:/Users/big04/.emacs.d/modules/me-project.el (source)...done Loading c:/Users/big04/.emacs.d/modules/me-prog.el (source)...done Loading c:/Users/big04/.emacs.d/modules/me-checkers.el (source)...done [MinEmacs:Log] =============== Loaded Emacs =============== [MinEmacs:Info] Loaded Emacs in 1.249400 seconds. [MinEmacs:Log] Applying ‘minemacs-fonts’. [MinEmacs:Log] Loading user theme: doom-one-light Configuring package doom-themes...done Warning: setting attribute ‘:background’ of face ‘font-lock-comment-face’: nil value is invalid, use ‘unspecified’ instead. [MinEmacs:Log] Running 11 ‘minemacs-after-startup-hook’ hooks. Configuring package which-key...done Loading package general... Configuring package general...done Loading package general...done Configuring package evil...done Configuring package nerd-icons...done Configuring package doom-modeline...done Configuring package corfu...done Loading package kind-icon... Configuring package kind-icon...done Loading package kind-icon...done Configuring package corfu-history...done Configuring package corfu-popupinfo...done Configuring package vertico...done Loading package vertico-directory... Configuring package vertico-directory...done Loading package vertico-directory...done Configuring package unicode-fonts...done Configuring package evil-mc...done Loading package me-evil-mc-evil-escape...done ../share/emacs/30.0.50/lisp/treesit.el: Warning: ‘loop’ is an obsolete alias (as of 27.1); use ‘cl-loop’ instead. [3 times] Configuring package treesit-auto...done Loading package ts-fold...done [MinEmacs:Log] Providing ‘minemacs-loaded’. Power on-line, battery N/A (N/A% load, remaining time N/A) Loading c:/Users/big04/.emacs.d/local/recentf-save.el (source)...done Cleaning up the recentf list...done (0 removed) Loading package epa-file... Configuring package epa-file... ‘epa-file’ enabled Configuring package epa-file...done Loading package epa-file...done Loading package evil-collection... Loading package dashboard... Configuring package dashboard...done (0.526s) Loading package dashboard...done (0.723s) Configuring package evil-collection...done (0.211s) Loading package evil-collection...done (0.988s) Loading package cape... Configuring package cape...done Loading package cape...done Loading package orderless...done Loading package undo-fu... Loading package undo-fu-session... Configuring package undo-fu-session...done Loading package undo-fu-session...done Configuring package undo-fu...done Loading package undo-fu...done Loading package project...done [MinEmacs:Log] Loading the default persistent scratch buffer. [MinEmacs:Log] Reading persistent scratch from c:/Users/big04/.emacs.d/local/pscratch/__default.el Package cl is deprecated [MinEmacs:Log] Running task 2, calling function ‘(closure (t) nil (require 'minemacs-laz…’ [MinEmacs:Log] Loading 1 lazy packages incrementally. [MinEmacs:Log] Providing ‘minemacs-lazy’. Loading package iedit... [2 times] [MinEmacs:Log] Inhibiting messages of iedit-update-key-bindings Iedit default key binding is C-; Loading package iedit... Loading package evil-iedit-state... Configuring package evil-iedit-state...done Loading package evil-iedit-state...done Loading package evil-multiedit... Configuring package evil-multiedit...done Loading package evil-multiedit...done Loading package iedit...done [MinEmacs:Log] Running task 5, calling function ‘(closure (t) nil (require 'server) (if …’ [MinEmacs:Info] Starting Emacs daemon in background. [MinEmacs:Log] Running task 4, calling function ‘(closure (t) nil (run-at-time (* 60 5) …’ [MinEmacs:Log] Running task 3, calling function ‘gcmh-mode’ [MinEmacs:Log] Running task 1, calling function ‘(closure (t) nil (setq initial-major-mo…’ Beginning of buffer [9 times]

Le problème avec Windows en natif, c’est que soit on trouve emacs en version 27, soit un exécutable généré tout les 15 jours (donc en version 30 :D)

Pour expliquer un peu le contexte, j’utilise emacs principalement pour écrire mes syllabus de cours (en org puis export latex). J’aimerais utiliser languagetool pour la correction orthographique et grammaticale. J’utilisais doom emacs, mais c’est trop lourd et complexe pour l’utilisation que j’en fais. Minemacs correspond assez bien à mon utilisation.

Je n’ai pas vu le support de languagetool dans les packages, je vais tenter de l’ajouter selon ton exemple.

abougouffa commented 1 year ago

Pour languagetool, sur ma machine, je l'utilise via ltex-ls et Eglot, mais je ne l'ai jamais essayé sous Windows.

Vous pouvez installer ltex-ls pour Windows et ajouter le chemin du X:\A\B\C\ltex-ls\bin\ à la variable d'environnement $PATH (à voir comment le faire sous Windows, je me rappelle juste que je le faisais sur Windows XP). Une fois ltex-ls installé, vous pouvez essayer de démarrer Emacs en mode debug, puis dans un fichier Org SPC c e e pour lancer Eglot

raylemon commented 1 year ago

Ltex-ls fonctionne sous Windows, je l’utilise avec Doom. Par contre, eglot ne se connecte pas…

edit default key binding is C-; Invalid face reference: org-indent [4 times] Automatic display of crossref information was turned on Invalid face reference: org-indent [12 times] Loading project (native compiled elisp)...done Loading eldoc (native compiled elisp)...done Loading seq (native compiled elisp)...done Loading c:/emacs/share/emacs/30.0.50/lisp/progmodes/flymake.el (source)...done Loading xref (native compiled elisp)...done Loading jsonrpc (native compiled elisp)...done Loading external-completion (native compiled elisp)...done [eglot] Trying to connect to localhost and port 0 (attempt 1) [eglot] Trying to connect to localhost and port 0 (attempt 2) [eglot] Trying to connect to localhost and port 0 (attempt 3) [eglot] Trying to connect to localhost and port 0 (attempt 4) [eglot] Trying to connect to localhost and port 0 (attempt 5) [eglot] Trying to connect to localhost and port 0 (attempt 6) [eglot] Trying to connect to localhost and port 0 (attempt 7) [eglot] Trying to connect to localhost and port 0 (attempt 8) [eglot] Trying to connect to localhost and port 0 (attempt 9) [eglot] Trying to connect to localhost and port 0 (attempt 10) eglot--error: [eglot] Could not start and connect to server started with (ltex-ls --server-type=TcpSocket --port 0)

Je pense que c’est à cause du port 0…

abougouffa commented 1 year ago

Je pense que c’est à cause du port 0…

Oui, il me semble que c'est ça le problème. Apparemment, Eglot ne sait pas gérer l'option :autoport sous Windows, ceci est à reporter dans le repo d'Eglot.

Pour remédier à ça, vous pouvez ajouter ça à votre config.el:

(+after-load! '(:and eglot me-eglot-ltex)
  (when-let ((conf (assoc 'org-mode eglot-server-programs (lambda (l e) (memq e l)))))
    (setcdr conf
            (lambda (_)
              (if (or (not (boundp '+ltex-process))
                      (not (process-live-p +ltex-process)))
                  (setq +ltex-process
                        (start-process "eglot/ltex-ls" " *EGLOT ltex-ls process*"
                                       "ltex-ls" "--server-type=TcpSocket" "--port" "9092")))
              '("localhost" 9092)))))

En revanche, sur ma machine, ce bout de code marche une fois sur deux (je ne sais pas pourquoi!), genre, quand vous lancer SPC c e e la première fois ça ne marche pas, mais la deuxième fois ça marche!

abougouffa commented 1 year ago

Il y a une méthode plus simple en mettant une connexion stdio au lieu d'un socket TCP, mais cette option ne marche pas depuis la version 16 de LTeX-LS (sous ma machine Linux en tout cas).

Donc, vous pouvez aussi essayer ça au lieu du code précédent:

(+after-load! '(:and eglot me-eglot-ltex)
  (when-let ((conf (assoc 'org-mode eglot-server-programs (lambda (l e) (memq e l)))))
    (setcdr conf '("ltex-ls"))))
abougouffa commented 1 year ago

Pour info

Les deux solutions supposent que le module me-natural-langs est active.

abougouffa commented 1 year ago

Pour info

... vous pouvez M-x +env-save pour sauvegarder l'environnement et le charger automatiquement durant les sessions futures.

Je viens fc202b68c90fbdc7c547564af82e4c44198abb53 de simplifier la gestion des variables d'environnement. Il n'est plus nécessaire d'exécuter la commande +env-save (elle n'existe plus).

raylemon commented 1 year ago

J’ai fait un pull et j’obtiens ce message d’erreur :

s/libexec/emacs/29.0.92/x86_64-w64-mingw32/cmdproxy.exe invoked with args ("-l" "-i" "-c" "printf 'RESULT\000%s\000%s\000%s\000%s\000RESULT' \"${PATH-e0c53f4b37906d3bacada9de5bf685e9}\" \"${MANPATH-e0c53f4b37906d3bacada9de5bf685e9}\" \"${CMAKE_PREFIX_PATH-e0c53f4b37906d3bacada9de5bf685e9}\" \"${PKG_CONFIG_PATH-e0c53f4b37906d3bacada9de5bf685e9}\""). Output was:

("'printf' n’est pas reconnu en tant que commande interne

ou externe, un programme exécutable ou un fichier de commandes. " 0 120 (charset iso-8859-1))

Il manque quelques lignes, mais je ne peux plus copier la backtrace, les raccourcis ne fonctionnent plus. En fait, avec cette erreur, plus rien ne fonctionne ^^

(J’ai trouvé une version 29 d’emacs, mais ça fait pareil avec la 30)

raylemon commented 1 year ago

Debugger entered--Lisp error: (error "Non-zero exit code from shell c:/emacs/libexec/ema...") error("Non-zero exit code from shell %s invoked with args..." "c:/emacs/libexec/emacs/30.0.50/x86_64-w64-mingw32/..." ("-l" "-i" "-c" "printf 'RESULT\000%s\000%s\000%s\000%s\000RESU...") #("'printf' n’est pas reconnu en tant que commande in..." 0 120 (charset iso-8859-1))) exec-path-from-shell-printf("%s\000%s\000%s\000%s" ("${PATH-5942a405505ce916d4589abbb9197e9f}" "${MANPATH-5942a405505ce916d4589abbb9197e9f}" "${CMAKE_PREFIX_PATH-5942a405505ce916d4589abbb9197e..." "${PKG_CONFIG_PATH-5942a405505ce916d4589abbb9197e9f...")) exec-path-from-shell-getenvs(("PATH" "MANPATH" "CMAKE_PREFIX_PATH" "PKG_CONFIG_PATH")) exec-path-from-shell-copy-envs(("PATH" "MANPATH" "CMAKE_PREFIX_PATH" "PKG_CONFIG_PATH")) exec-path-from-shell-initialize() run-hooks(minemacs-after-startup-hook) (progn (setq minemacs-after-startup-hook (reverse minemacs-after-startup-hook)) (let ((inhibit-message t)) (apply #'message (list (concat "[MinEmacs:Log] " "Running %d minemacs-after-startup-hook' hooks.") (length minemacs-after-startup-hook)))) (run-hooks 'minemacs-after-startup-hook)) (if minemacs-after-startup-hook (progn (setq minemacs-after-startup-hook (reverse minemacs-after-startup-hook)) (let ((inhibit-message t)) (apply #'message (list (concat "[MinEmacs:Log] " "Running %dminemacs-after-startup-hook' hooks.") (length minemacs-after-startup-hook)))) (run-hooks 'minemacs-after-startup-hook))) load-with-code-conversion("c:/Users/big04/.emacs.d/core/minemacs-loaded.el" "c:/Users/big04/.emacs.d/core/minemacs-loaded.el" nil t) require(minemacs-loaded) +minemacs--loaded-h() run-hooks(emacs-startup-hook term-setup-hook)

f(compiled-function () #<bytecode -0xdcf1054fab40b>)()

normal-top-level()

raylemon commented 1 year ago

J’ai revert au commit fc202b68c90fbdc7c547564af82e4c44198abb53 et ça remarche, pour info

Par contre, pour eglot, j’ai un running timer: (error "[eglot ] timed out after 30 seconds") avec un SPC c e e

abougouffa commented 1 year ago

Ah je vois, apparemment le package que je viens d'ajouter ne supporte pas Windows. Vous pouvez ajouter (push 'exec-path-from-shell minemacs-disabled-pckages) à votre modules.el pour le désactiver le temps que je règle ça.

raylemon commented 1 year ago

ok, j’ai pull la dernière release, et tout est en ordre pour Windows. Par contre, eglot ne fonctionne toujours pas. Je vais ouvrir une nouvelle issue pour ne pas surcharger ce fil.

abougouffa commented 1 year ago

La suite sur #100