Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Cannot open load file

13 réponses
Avatar
Rakotomandimby Mihamina
Salut,

J'ai fait un package debian du rpm-spec-mode, dans le but de faire des
specfiles debpuis ma debian. Mais juste les specfiles.

Les instructions qui sont censées "charger" le mode rpm-spec sont:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(autoload 'rpm-spec-mode "rpm-spec-mode" "RPM Specfile editing mode." t)
(setq load-path (cons (concat "/usr/share/"
(symbol-name debian-emacs-flavor)
"/site-lisp/rpm-spec-mode")
load-path))
(setq auto-mode-alist
(cons '("\\.spec$" . rpm-spec-mode) auto-mode-alist))
(setq interpreter-mode-alist
(cons '("rpm-spec-mode" . rpm-spec-mode) interpreter-mode-alist))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

La dernière ligne est celle ou j'ai un doute, parceque à la place de
"rpm-spec-mode" il y avait "python"
J'ai pompé les éléments du package python-mode, et j'ai remplacé
python-mode par rpm-spec-mode

Je n'arrive pas à interpreter le message d'erreur et réagir en conséquence.
Pour quoi "cannot load"? Si c'est "file not found", ou "permission
denied" je comprendrai mais là, je vois pas trop.
Voici la fin du traceback quand j'ouvre un fichier .spec:

[...]
Loading 50ocaml-nox (source)...done
Loading 50rpm-spec-mode (source)...done
Loading font-lock...
Loading regexp-opt...done
Loading font-lock...done
Loading server...done
For information about the GNU Project and its goals, type C-h C-p.
Wrote /home/mihamina/tete.spec
(New file)
File mode specification error: (file-error "Cannot open load file"
"rpm-spec-mode")
mouse-minibuffer-check: Minibuffer window is not active [3 times]

--
Miroir de logiciels libres http://www.etud-orleans.fr

10 réponses

1 2
Avatar
Rakotomandimby Mihamina
J'ai fait des modifications sur le package et maintenant c'est:

[...]
For information about the GNU Project and its goals, type C-h C-p.
Loading rpm-spec-mode...
File mode specification error: (void-function
define-obsolete-variable-alias)

Je suis vraiment désolé mais là, ça me parle pas du tout...
Ce n'est pas la lecture des différentes description de cette chose sur
le Net qui m'a fait avancé... si vous aviez des pistes...

--
Miroir de logiciels libres http://www.etud-orleans.fr
Avatar
drkm
Rakotomandimby Mihamina writes:

(autoload 'rpm-spec-mode "rpm-spec-mode" "RPM Specfile editing mode." t)
(setq load-path (cons (concat "/usr/share/"
(symbol-name debian-emacs-flavor)
"/site-lisp/rpm-spec-mode")
load-path))
(setq auto-mode-alist
(cons '(".spec$" . rpm-spec-mode) auto-mode-alist))
(setq interpreter-mode-alist
(cons '("rpm-spec-mode" . rpm-spec-mode) interpreter-mode-alist))



D'abord, un petit nettoyage :

(autoload 'rpm-spec-mode "rpm-spec-mode" "RPM Specfile editing mode." t)
(push (concat "/usr/share/"
(symbol-name debian-emacs-flavor)
"/site-lisp/rpm-spec-mode")
load-path)
(push '(".spec$" . rpm-spec-mode) auto-mode-alist)
(push '("rpm-spec-mode" . rpm-spec-mode) interpreter-mode-alist)

De plus, d'après ce que j'ai pu voir, rpm-sprec-mode semble
être un fichier. Es-tu sûr qu'il s'agit bien d'un répertoire ?
Car tu l'ajoutes au 'load-path', et dedans, ce sont des
répertoires (tu sais ce qu'est un path).

Donc s'il s'agit d'un fichier, c'est le répertoire parent,
'site-lisp/', qui doit être dans le 'load-path'.

De plus, la concaténation avec le nom du symbol désignant la
saveur d'Emacs me semble bien lourde. Ils n'ont pas déjà une
variable renseignant le répertoire ?

Enfin, pour 'interpreter-mode-alist', il s'agit d'une alist
mappant des « interpréteurs » à des modes d'édition. Un
interpréteur, c'est ce que tu trouves après « #!/... » en début
de certains fichiers (shell, Perl, Python, Lisp, etc.). Je ne
suis pas sûr que cela soit aproprié ici.

Il semblerait de plus que le bon répertoire ne soit pas dans le
'load-path'. Pour en voir le contenu, tu peux utiliser :

M-x pp-eval-expression <RET> load-path <RET>

Pour voir le résultat de la concaténation, place-toi après le
parenthèse fermante de l'appel à 'concat' (après "..-spec-mode"),
et 'C-x C-e'.

--drkm
Avatar
drkm
Rakotomandimby Mihamina writes:

File mode specification error: (void-function
define-obsolete-variable-alias)



Il semblerait que 'define-obsolete-variable-alias' ne soit pas
définie. Quel est ta version d'Emacs ? En attendant, tu peux
toujours utiliser ceci pour pouvoir démarrer le mode :

(unless (fboundp 'define-obsolete-variable-alias)
(defalias 'define-obsolete-variable-alias 'ignore))

--drkm
Avatar
Rakotomandimby Mihamina
drkm wrote:
D'abord, un petit nettoyage :

(autoload 'rpm-spec-mode "rpm-spec-mode" "RPM Specfile editing mode." t)
(push (concat "/usr/share/"
(symbol-name debian-emacs-flavor)
"/site-lisp/rpm-spec-mode")
load-path)
(push '(".spec$" . rpm-spec-mode) auto-mode-alist)
(push '("rpm-spec-mode" . rpm-spec-mode) interpreter-mode-alist)



Je vais mettre ça, et je te tiens au courant.

De plus, d'après ce que j'ai pu voir, rpm-sprec-mode semble
être un fichier. Es-tu sûr qu'il s'agit bien d'un répertoire ?
Car tu l'ajoutes au 'load-path', et dedans, ce sont des
répertoires (tu sais ce qu'est un path).



Dans le système de packaging Debian, il y a un repertoire par mode. En
fait le python-mode était composé de deux fichiers .el qui se font
placer dans un répertoire "python-mode" et comme je suis en train de
faire un truc largement inspiré du python-mode...

Enfin, pour 'interpreter-mode-alist',



Je l'ai viré. Je me disais bien que j'avais un doute sur cette ligne...

--
Miroir de logiciels libres http://www.etud-orleans.fr
Avatar
Sébastien Kirche
Le 7 July 2005 à 11:07, Rakotomandimby Mihamina s'est exprimé ainsi :

De plus M-x rpm- <TAB> me montre que ce mode n'est pas
listé... mince... je ne suis pas au point...



Besoin de faire un M-x load-library avant ?

--
Sébastien Kirche
Avatar
Matthieu Moy
Rakotomandimby Mihamina writes:

De plus M-x rpm- <TAB> me montre que ce mode n'est pas listé... mince...
je ne suis pas au point...



Il te manque un autoload.

A priori, un

(autoload 'rpm-machin-mode "le/fichier/ou/le/trouver"
"docstring")

devrait suffire, à placer dans debian/XXX.emacsen-startup.

--
Matthieu
Avatar
drkm
Rakotomandimby Mihamina writes:

Dans le système de packaging Debian, il y a un repertoire par mode.



Ce n'est pas plus mal. donc s'il s'agit bien d'un répertoire,
c'est ok.

--drkm
Avatar
drkm
Matthieu Moy writes:

Il te manque un autoload.



Pas d'après ce que Rakotomandimby a dit. Mais j'ai du mal à
croire que son 'autoload' est évalué, si la complétion dans 'M-x'
ne donne rien.

Au fait, Rakotomandimby, où à tu placé le code que tu nous as
posté ?

--drkm
Avatar
drkm
Rakotomandimby Mihamina writes:

Ah.... je me retrouve de nouveau devant un probleme. La version d'Emacs
charge le mode Shell Script quand j'ouvre un *.spec.



Es-tu sûr de ce que ton code est évalué ? Que donnent :

(require 'cl)
(find 'rpm-spec-mode auto-mode-alist
:test (lambda (val cell)
(eq val (cdr cell))))

et :

(find "spec" auto-mode-alist
:test (lambda (val cell)
(string-match val (car cell))))

et :

M-x pp-eval-expression <RET> auto-mode-alist <RET>

--drkm
Avatar
Matthieu Moy
Rakotomandimby Mihamina writes:

Rien à faire. rpm-spec-mode est toujours introuvable (no match) quand je
tente ne serait-ce que je le charger à la main: M-x rpm-spec-mode



Ah, oui, il faut que ton autoload dise que la fonction est
interactive. Sinon, tu l'as avec C-h f mais pas M-x. Chais plut
comment ça marche.

La solution propre, c'est d'avoir un ";;;###autoloads" devant chaque
fonction à autoload-er, et d'utiliser un truc genre

$(AUTOLOADFILE).el: $(LISPFILES)
@$(RM) $@;
@echo "(provide 'moy-autoloads)" > $@;
@echo " " >> $@;
$(EMACS) -batch -q -l autoload
--eval '(setq generated-autoload-file "$@")'
--eval "(if (featurep 'xemacs) (delete-file generated-autoload-file))"
--eval '(setq make-backup-files nil)'
-f batch-update-autoloads $(LISPDIRS)

dans ton Makefile.

--
Matthieu
1 2