У меня есть буфер, который показывает документацию для модулей Ansible. Этот буфер имеет свой собственный основной режим, который обеспечивает все стандартные вещи. Примечательно, что он обозначает буфер для выделения встроенной разметки, параметров, разделов и т. Д. В целом, он очень похож на M-x man
.
В нижней части документации обычно есть несколько примеров кода на YAML. Я хотел бы также прояснить это. Конечно, я мог бы добавить свои собственные ключевые слова блокировки шрифта для YAML, но я бы предпочел повторно использовать фонификацию режима YAML.
Как я могу это сделать? В частности, как я могу использовать другой основной режим для обозначения определенной области буфера?
Обратите внимание, что режим YAML не обязательно должен быть активным в этом регионе. Весь буфер является только пассивным буфером отображения и не предназначен для редактирования. Мне действительно нужно только оформление, как будто режим YAML был активен в этом регионе.
Я предполагаю, что могу скопировать область буфера во временный буфер, включить режим YAML, сообщить о буфере и скопировать все свойства текста. Будет ли это работать? Если да, то как мне скопировать свойства текста и какие соответствующие свойства нужно скопировать? Или есть лучший подход?
Ответы:
Недавно я столкнулся с подобной проблемой, я в основном хотел описать фрагменты кода в документации, которую я получил из другого источника. Я придерживался подхода, упомянутого ближе к концу вашего ответа, и он работал хорошо для меня. Функция, которую я закончил с чем-то вроде следующего
Как отметил @Malabarba в комментариях, простой подход выше не работает, если целевой буфер использует режим font-lock-mode. Однако мы можем обмануть font-lock-mode, заставив поверить, что строка уже заблокирована шрифтом, установив для свойства text
font-lock-face
значениеface
(мы получимface
набор свойств, когда будем использовать вышеописанную функцию) и установив text-propertyfontified
дляt
. Следующая функция принимает строку , возвращенную функцией выше и делает необходимой обработку таким образом , что строка вставляется fontified (это берется из орга-режим вorg-src-font-lock-fontify-block
функцииТеперь вы можете использовать его следующим образом
источник
sx.el
, но важно отметить, что оно будет работать, только если целевой буфер не использует режим font-lock-mode.Здесь может помочь библиотека Narrow Indirect (
narrow-indirect
) - взгляните на заголовок комментария. Это зависит от:Обратите внимание, что сужение по умолчанию отключено, поскольку оно считается недружественным для начинающих (по умолчанию используется привязка
C-x n n
). Вы можете включить его, поместив в файл инициализации следующее:Вы также можете посмотреть на мою ручной работы
myfn-narrow-indirect
в моей конф .источник
disabled
свойство из команды, чтобы вызвать его из Emacs Lisp. Это влияет только на интерактивное использование.Я хотел бы предложить посмотреть на org-src-font-lock-fontify-block, который предоставляет эту функциональность для исходных блоков режима org. Кажется, просто скопировать соответствующие части в другой буфер, включить там основной режим, а затем скопировать отформатированный текст обратно. Hackish, но, похоже, работает.
источник