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

relancer yasnippet

5 réponses
Avatar
Stéphane Dutailly
Bonjour,

J'utilise régulièrement yasnippet et je suis amené à le relancer (après
avoir modifié ou défini un «snippet»).
Pour cela, je fais:
M-x yas-recompile-all
M-x yas-reload-all

j'ai alors l'affichage:

[yas] Reloaded everything...

et je peux utiliser mes modifications.

J'aimerais pouvoir lancer ces deux commandes plus facilement.
J'ai donc essayé de définir une fonction de la façon suivante afin de
pouvoir ensuite lui attribuer un raccourci:

;; ----------------------------------------------------
;; relancer yasnippet
(defun relancer-yasnippet ()
(interactive)
(yas-recompile-all)
(yas-reload-all))
;; ----------------------------------------------------

Lorsque je fais:
M-x relancer-yasnippet

j'ai alors l'affichage:

[yas] Reloaded everything (snippets will load just-in-time)

et yasnippet ne fonctionne plus.

L'un d'entre vous peut-il me dire ce qui ne fonctionne pas?
Merci d'avance,
Stéphane Dutailly

5 réponses

Avatar
vincent.belaiche
Stéphane Dutailly writes:

Bonjour,

J'utilise régulièrement yasnippet et je suis amené à le relancer
(après avoir modifié ou défini un «snippet»).
Pour cela, je fais:
M-x yas-recompile-all
M-x yas-reload-all

j'ai alors l'affichage:

[yas] Reloaded everything...

et je peux utiliser mes modifications.

J'aimerais pouvoir lancer ces deux commandes plus facilement.
J'ai donc essayé de définir une fonction de la façon suivante afin de
pouvoir ensuite lui attribuer un raccourci:

;; ----------------------------------------------------
;; relancer yasnippet
(defun relancer-yasnippet ()
(interactive)
(yas-recompile-all)
(yas-reload-all))
;; ----------------------------------------------------

Lorsque je fais:
M-x relancer-yasnippet

j'ai alors l'affichage:

[yas] Reloaded everything (snippets will load just-in-time)

et yasnippet ne fonctionne plus.

L'un d'entre vous peut-il me dire ce qui ne fonctionne pas?
Merci d'avance,
Stéphane Dutailly



Aucune idée --- et d'ailleurs je ne sais pas ce que c'est que yas ---
mais peut-être faut-il appeler ces fonctions avec call-interactively
pour leur faire croire qu'elles ont été appélée avec M-x ...

Vincent.
Avatar
Etienne Prud'homme
Le Thu, 12 May 2016 12:47:27 +0200,
Stéphane Dutailly a écrit :
M-x yas-recompile-all
M-x yas-reload-all

j'ai alors l'affichage:

[yas] Reloaded everything...

et je peux utiliser mes modifications.

J'aimerais pouvoir lancer ces deux commandes plus facilement.


;; ----------------------------------------------------
;; relancer yasnippet
(defun relancer-yasnippet ()
(interactive)
(yas-recompile-all)
(yas-reload-all))
;; ----------------------------------------------------

Lorsque je fais:
M-x relancer-yasnippet

j'ai alors l'affichage:

[yas] Reloaded everything (snippets will load just-in-time)

et yasnippet ne fonctionne plus.



J'ai essayé votre fonction et je n'ai pas de problème à util iser
Yasnippet ensuite. Pouvez-vous nous montrer votre configuration
personnalisée de Emacs? Comment chargez vous Yasnippet au démarra ge?

Note: Il est possible d'éditer les fragments de code (snippets) avec
`snippet-mode`. Cela permet de charger un fragment avec les touches `C-c
C-l`, `C-c C-c` permet de charger un fragment et de quitter la fenêtre
et `C-c C-t` permet d'essayer un fragment.

Pour activer ce mode, je recommande d'ajouter la ligne
# -*- mode: snippet -*-



Au début du fichier. Cela permet de charger `snippet-mode` lors de
l'ouverture du fichier. On peut aussi ajouter une directive de
répertoire:

(add-to-list 'auto-mode-alist '("chemin/vers/snippets/" .
snippet-mode))



mais la première solution permet une meilleure portabilité.

Etienne
Avatar
Stéphane Dutailly
Bonjour,

Merci pour vos réponses.
Vincent, j'ai essayé ceci mais cela ne donne rien...

(defun relancer-yasnippet ()
(call-interactively 'yas-recompile-all)
(call-interactively 'yas-reload-all)
)
Est-ce ainsi qu'il faut l'utiliser? (j'avoue ne pas avoir tout compris à
la documentation...)

Étienne, j'ai ceci dans mon .emacs:

;; yasnippet

(add-to-list 'load-path
"~/.emacs.d/elpa/yasnippet-0.8.0")
(require 'yasnippet)

(setq yas-snippet-dirs
'(
;; "~/.emacs.d/snippets" ;; repertoire par defaut
"~/Dropbox/Divers_boulot/Emacs/plugins/yasnippet_perso"
))

(yas-global-mode 1) ;; or M-x yas-reload-all if you've started YASnippet
already.

(setq yas/triggers-in-field t) ;; pour "enchainer" les snippets (cf
ligne 296 dans yasnippet.el)
(setq yas/visit-from-menu t) ;; pour acceder aux fichiers de
definition des snippets depuis le menu

Merci pour tout.
Stéphane


;; ----------------------------------------------------
;; relancer yasnippet
(defun relancer-yasnippet ()
(interactive)
(yas-recompile-all)
(yas-reload-all))
;; ----------------------------------------------------

Lorsque je fais:
M-x relancer-yasnippet

j'ai alors l'affichage:

[yas] Reloaded everything (snippets will load just-in-time)

et yasnippet ne fonctionne plus.



J'ai essayé votre fonction et je n'ai pas de problème à utiliser
Yasnippet ensuite. Pouvez-vous nous montrer votre configuration
personnalisée de Emacs? Comment chargez vous Yasnippet au démarrage?

Avatar
Etienne Prud'homme
Mardi le 17 mai 2016 23:10:53 +0200,
Stéphane Dutailly a écrit :

(add-to-list 'load-path
"~/.emacs.d/elpa/yasnippet-0.8.0")
(require 'yasnippet)



Je peux voir qu'il s'agit d'une version assez ancienne de Yasnippet.
ELPA avait une version assez vieille (août 2012) jusqu'à réc emment.
Plusieurs variables sont maintenant obsolètes et certaines
fonctionnalités ont étés ajoutées depuis.

Vous est-il possible de mettre à jour Yasnippet pour une version plus
récente?

Si vous avez modifié des fragments de code (snippets) du répertoi re
principal, c'est-à-dire `~/emacs.d/elpa/yasnippet-0.8.0/snippets` il
faudra faire une copie de sauvegarde puisque qu'il sera supprimé.

| M-x list-packages
| U (Sélectionner les paquets à mettre à jour)
| x (Éxécuter l'action)

Le minibuffer vous demandera ensuite si vous voulez supprimer les
anciens paquets. Je le suggère fortement.

Puisque `load-path` est utilisé, il faudra changer le chemin vers la
nouvelle version.

Note: placer

| (package-initialize)

au début de votre fichier de configuration vous évitera de devoir
charger les chemins des paquets avec `load-path`. Emacs chargera les
paquets téléchargés automatiquement.

Sinon, on peut toujours essayer avec l'ancienne version, mais ça risque
d'être plus compliqué.

Etienne
Avatar
Stéphane Dutailly
Bonjour,

J'ai mis à jour et cela fonctionne désormais très bien.
Merci beaucoup!
Stéphane Dutailly