J'ai du code elisp que j'aimerais exécuter dans des fichiers orgmode lors de leur chargement (différent pour différents fichiers et défini dans le fichier lui-même). Y a-t-il un moyen de faire cela? Je n'ai rien vu sur http://orgmode.org/manual/In_002dbuffer-settings.html
Si je peux ajouter quelque chose à l'initialisation emacs qui exécute un bloc de code spécialement nommé chaque fois qu'un fichier orgmode se charge, cela pourrait être une solution, mais je ne sais pas comment faire, et idéalement il y a quelque chose de intégré.
# -*- eval: (lisp code here) -*-
mais vous devez également être conscient des dangers. Même si vous ne partagez pas ces documents avec quelqu'un d'autre, la nature interprétée d'Emacs Lisp signifie qu'un changement peut entraîner accidentellement une perte de données. En outre, le hook de mode semble être une meilleure option si vous souhaitez exécuter le même code pour plusieurs fichiers.Réponses:
Cette solution ne nécessite aucun changement
init.el
(avec des modifications mineures). Cela implique des évaluations locales des fichiers, mais c'est exactement ce que le PO a demandé. Les avantages de la solution sont:init.el
du fichier orgmode peut être partagée entre les utilisateurs (de confiance)Je reformule la solution ici.
Ajoutez un bloc src quelque part dans votre fichier:
Ensuite, mettez ceci à la fin de votre fichier orgmode:
J'ai ajouté
(outline-hide-sublevels 1)
parce que j'aime cacher le bloc src dans une rubrique et que les sous-niveaux soient cachés au démarrage. Sans cette déclaration, les sous-niveaux seront étendus de(org-babel-goto-named-src-block "startup")
.Avec cette solution, emacs demandera 2 fois l'autorisation d'exécuter (1er: appliquer les variables locales; 2e: exécuter "startup" -src-block). Comme j'ai beaucoup de blocs src dans mon fichier, j'ai défini une autre variable de fichier local
org-confirm-babel-evaluate
, comme ceci:Avertissement: Avec cet ajout, emacs ne demandera qu'une seule fois l'autorisation d'exécuter - tous les blocs src de ce fichier peuvent maintenant être exécutés sans autre confirmation. Comme d'autres l'ont déjà souligné, ce comportement peut être dangereux et vous devez être très prudent avec ce paramètre.
Cependant, je dirais que cette solution (en particulier la première version) est plus sécurisée que celle donnée par Joe Corneli car au moins il vous sera demandé de confirmer l'exécution. La solution de Joe évaluera le bloc spécial sans confirmation, s'il se trouve dans le fichier. Un attaquant devrait deviner le nom du bloc spécial, bien sûr ...
J'utilise cette approche pour écrire des documents volumineux qui nécessitent, par exemple, des adaptations aux mécanismes d'export org.
la source
Donc, dans votre init.el:
la source
Puisque vous demandez
essayez ensuite cette solution .
la source
Je suis d'accord avec la suggestion de @Joe Corneli concernant l'utilisation d'un crochet.
Il me vient aussi à l'esprit que vous pouvez tirer parti des signets ici: mettez un saut de signet spécifique sur le crochet. Un avantage d'un signet dans le bloc de code est qu'il est généralement déplacé automatiquement (par exemple lorsque le contenu du fichier change), donc la localisation du bloc doit généralement être effectuée automatiquement.
[Mais je ne comprends pas pourquoi vous avez le code dans les fichiers en mode Org, plutôt qu'ailleurs. Nous considérons cela comme une donnée, selon l'énoncé du problème, mais je me demande pourquoi vous faites cela. Nous faire savoir plus sur la conception à cet égard pourrait conduire à une meilleure aide.]
la source
J'ai essayé d'améliorer le code de Joe Corneli:
Vous en avez besoin dans votre fichier init.el:
Chaque fois que vous ouvrez un tampon en mode org, il recherchera un bloc source nommé startblock, s'il en trouve un, il l'exécutera.
Dans vos fichiers en mode org, vous pouvez ensuite mettre:
la source