Testuję ładowanie pakietów w emacs init.el
(Emacs 24.3). Śledziłem a blog przez autora emacs prelude
, aby automatycznie załadować paczki i skopiowałem tam kod do mojego init.el
jak na dole. Jednak mam komunikat o błędzie o loop
funkcji/symbol, który mówi:emacs: Definicja funkcji symbolu jest nieważna: pętla
Symbol's function definition is void: loop
Może ktoś proszę wyjaśnić, jak rozwiązać ten kod?
Szukałem w Internecie i wydaje mi się, że loop
to makro w wersji cl-lib
. Zgaduję, że brakuje definicji dla loop
i próbowałem naprawić problem, dodając (require 'cl-lib)
, jak pokazano w kodzie, ale błąd pozostaje. Istnieją inne pytania SO dotyczące podobnych komunikatów o błędach, np .: ELisp: cl-loop for "Symbol's value as variable is void", Symbol's function definition is void: declare-function. Jednak komunikaty o błędach różnią się od tego, czego brakuje, a odpowiedzi w większości sugerują alternatywne trasy, takie jak używanie nowszej wersji emacsa.
- kod -
(require 'package)
(add-to-list 'package-archives
'("melpa-stable" . "http://stable.melpa.org/packages/") t)
(package-initialize)
;;; check & load packages
(defvar prelude-packages
'(haskell-mode)
"A list of packages to ensure are installed at launch.")
;;(require 'cl-lib) ;debug
(defun prelude-packages-installed-p()
(loop for p in prelude-packages
when (not (package-installed-p p)) do (return nil)
finally (return t)))
(unless (prelude-packages-installed-p)
;; check for new packages (package versions)
(message "%s" "Emacs Prelude is now refreshing its package database...")
(package-refresh-contents)
(message "%s" " done.")
;; install the missing packages
(dolist (p prelude-packages)
(when (not (package-installed-p p))
(package-install p))))
(provide 'prelude-packages)
;;; end load packages
Może to pomóc: (Emacs 24.3.1): loop to alias dla 'cl-loop 'w' cl.el'. I cl-loop jest makro Lisp w 'cl-macs.el '. Wykonaj pętlę C-h f. – aartist