Eu tenho um buffer que mostra a documentação para os módulos Ansible. Este buffer possui seu próprio modo principal, que fornece todo o material padrão. Notavelmente, ele tipifica o buffer para destacar a marcação embutida, opções, seções, etc. Em suma, é bem parecido com M-x man
.
Na parte inferior da documentação, geralmente existem alguns exemplos de código no YAML. Eu gostaria de tipificar isso também. Eu poderia adicionar minhas próprias palavras-chave de bloqueio de fonte para YAML, é claro, mas prefiro reutilizar a fonte do modo YAML.
Como eu posso fazer isso? Especificamente, como posso usar um modo principal diferente para tipificar uma região específica de um buffer?
Observe que o modo YAML não precisa estar ativo nessa região. O buffer inteiro é apenas um buffer de exibição passivo e não pretende ser editado. Eu realmente só preciso da fonte produzida como se o Modo YAML estivesse ativo nessa região.
Presumo que poderia copiar a região do buffer para um buffer temporário, habilitar o Modo YAML, tipificar o buffer e copiar todas as propriedades de texto. Isso funcionaria? Em caso afirmativo, como copio propriedades de texto e quais são as propriedades relevantes para copiar? Ou existe uma abordagem melhor?
Respostas:
Recentemente, me deparei com um problema semelhante, basicamente queria fonte de trechos de código na documentação que obtive em outra fonte. Eu segui a abordagem mencionada no final da sua resposta e funcionou bem para mim. A função que eu acabei com algo como o seguinte
Como o @Malabarba apontou nos comentários, a abordagem simples acima não funcionará se o buffer de destino usar o modo de bloqueio de fonte. No entanto, podemos induzir o modo de bloqueio de fonte a acreditar que a sequência já está bloqueada, definindo a propriedade text
font-lock-face
comoface
, (obtemos aface
propriedade definida quando usamos a função acima) e definindo a propriedade textfontified
comot
. A função a seguir pega uma string retornada pela função acima e faz o processamento necessário para que a string seja inserida em fonte (isso é obtido daorg-src-font-lock-fontify-block
função do modo organizacionalAgora você pode usá-lo da seguinte maneira
fonte
sx.el
, mas é importante observar que só funcionará se o buffer de destino não usar o modo de bloqueio de fonte.A biblioteca Narrow Indirect (
narrow-indirect
) pode ajudar aqui - dê uma olhada no comentário do cabeçalho. Baseia-se em:Observe que a restrição é desativada por padrão porque é considerada não amigável para iniciantes (a ligação padrão é
C-x n n
). Você pode habilitá-lo colocando o seguinte no seu arquivo init:Você também pode olhar para o meu artesanal
myfn-narrow-indirect
no meu conf .fonte
disabled
propriedade de um comando para chamá-lo do Emacs Lisp. Afeta apenas o uso interativo.Eu sugeriria olhar para org-src-font-lock-fontify-block, que fornece essa funcionalidade para os blocos de origem do modo organizacional. Parece apenas copiar as partes relevantes para outro buffer, ativar o modo principal e, em seguida, copiar o texto com fonte novamente. Hackish, mas parece funcionar.
fonte