J'ai un tampon qui montre la documentation des modules Ansible. Ce tampon a son propre mode majeur qui fournit tous les trucs standard. Notamment, il caractérise le tampon pour mettre en évidence le balisage en ligne, les options, les sections, etc. Dans l'ensemble, il est assez similaire à M-x man
.
Au bas de la documentation, il y a généralement quelques exemples de code dans YAML. Je voudrais également les classifier. Je pourrais ajouter mes propres mots clés de verrouillage de police pour YAML, bien sûr, mais je préférerais plutôt réutiliser la police de caractères du mode YAML.
Comment puis je faire ça? Plus précisément, comment puis-je utiliser un mode majeur différent pour faire une police dans une région particulière d'un tampon?
Notez que le mode YAML n'a pas besoin d'être actif dans cette région. L'ensemble du tampon n'est qu'un tampon d'affichage passif et n'est pas destiné à être modifié. Je n'ai vraiment besoin que de la police de caractères produite comme si le mode YAML était actif dans cette région.
Je suppose que je pourrais copier la région du tampon dans un tampon temporaire, activer le mode YAML, faire le tampon et recopier toutes les propriétés du texte. Cela fonctionnerait-il? Si oui, comment copier les propriétés du texte et quelles sont les propriétés pertinentes à copier? Ou existe-t-il une meilleure approche?
Réponses:
J'ai récemment rencontré un problème similaire, je voulais essentiellement faire des extraits de code dans la documentation dont j'ai obtenu une autre source. J'ai suivi l'approche mentionnée vers la fin de votre réponse et cela a bien fonctionné pour moi. La fonction que je me suis retrouvé avec quelque chose comme ce qui suit
Comme @Malabarba l'a souligné dans les commentaires, l'approche simple ci-dessus ne fonctionne pas si le tampon de destination utilise le mode de verrouillage de police. Cependant, nous pouvons faire croire à font-lock-mode que la chaîne est déjà verrouillée par police en définissant la propriété text
font-lock-face
surface
, (nous obtenons leface
jeu de propriétés lorsque nous utilisons la fonction ci-dessus) et en définissant text-propertyfontified
surt
. La fonction suivante prend une chaîne renvoyée par la fonction ci-dessus et effectue le traitement requis pour que la chaîne soit insérée dans la police (cela provient de laorg-src-font-lock-fontify-block
fonction de org-modeVous pouvez maintenant l'utiliser comme suit
la source
sx.el
, mais il est important de noter que cela ne fonctionnera que si le tampon de destination n'utilise pas le mode de verrouillage de police.La bibliothèque Narrow Indirect (
narrow-indirect
) peut vous aider ici - jetez un œil au commentaire d'en-tête. Elle repose sur:Notez que le rétrécissement est désactivé par défaut car il est considéré comme hostile aux débutants (la liaison par défaut est
C-x n n
). Vous pouvez l'activer en mettant ce qui suit dans votre fichier init:Vous pouvez également regarder mon fait main
myfn-narrow-indirect
dans ma conf .la source
disabled
propriété d'une commande pour l'appeler depuis Emacs Lisp. Cela n'affecte que l'utilisation interactive.Je suggérerais de regarder org-src-font-lock-fontify-block qui fournit cette fonctionnalité pour les blocs sources en mode org. Il semble simplement copier les parties pertinentes dans un autre tampon, y activer le mode principal, puis recopier le texte fontifié. Hackish, mais cela semble fonctionner.
la source