Mam bufor, który pokazuje dokumentację modułów Ansible. Bufor ma swój własny tryb główny, który zapewnia wszystkie standardowe rzeczy. Warto zauważyć, że buforuje on bufor, aby podświetlić wbudowane znaczniki, opcje, sekcje itp. Podsumowując, jest bardzo podobny do M-x man
.
Na dole dokumentacji jest zwykle kilka przykładów kodu w YAML. Też chciałbym je fontować. Mógłbym oczywiście dodać własne słowa kluczowe do blokowania czcionek w YAML, ale wolałbym ponownie używać czcionek w trybie YAML.
Jak mogę to zrobić? W szczególności, w jaki sposób mogę użyć innego trybu głównego do fontowania określonego regionu bufora?
Pamiętaj, że tryb YAML nie musi być aktywny w tym regionie. Cały bufor jest tylko pasywnym buforem wyświetlania i nie jest przeznaczony do edycji. Naprawdę potrzebuję tylko utworzonej czcionki, tak jakby tryb YAML był aktywny w tym regionie.
Zakładam, że mógłbym skopiować region bufora do bufora tymczasowego, włączyć tryb YAML, skasować bufor i skopiować wszystkie właściwości tekstu. Czy to zadziała? Jeśli tak, to jak skopiować właściwości tekstu i jakie odpowiednie właściwości skopiować? Czy jest lepsze podejście?
Odpowiedzi:
Ostatnio natknąłem się na podobny problem, w zasadzie chciałem fontować fragmenty kodu w dokumentacji, którą otrzymałem z innego źródła. Podążyłem za podejściem wymienionym pod koniec twojej odpowiedzi i zadziałało dla mnie dobrze. Funkcja zakończyła się czymś takim, jak poniżej
Jak zauważył @Malabarba w komentarzach, powyższe proste podejście nie działa, jeśli bufor docelowy używa trybu blokowania czcionek. Możemy jednak oszukać tryb blokowania czcionek, aby przekonać się, że ciąg znaków jest już zablokowany czcionką, ustawiając właściwość text
font-lock-face
naface
, (otrzymujemyface
zestaw właściwości, gdy korzystamy z powyższej funkcji) i ustawiając właściwość textfontified
nat
. Poniższa funkcja wykonuje ciąg zwracanej przez funkcję powyżej wykonuje przetwarzanie wymagane tak, że łańcuch jest włożony fontified (to jest pobierane z ORG-trybachorg-src-font-lock-fontify-block
funkcjiTeraz możesz go używać w następujący sposób
źródło
sx.el
, ale ważne jest, aby pamiętać, że będzie działać tylko wtedy, gdy bufor docelowy nie będzie korzystał z trybu blokowania czcionek.Biblioteka Narrow Indirect (
narrow-indirect
) może tutaj pomóc - spójrz na komentarz do nagłówka. Opiera się na:Zauważ, że zwężanie jest domyślnie wyłączone, ponieważ jest uważane za nieprzyjazne dla początkujących (domyślne wiązanie to
C-x n n
). Możesz go włączyć, umieszczając następujące elementy w pliku init:Możesz też poszukać mojego ręcznie robionego
myfn-narrow-indirect
w mojej konf .źródło
disabled
właściwości z polecenia, aby wywołać ją z Emacsa Lispa. Wpływa tylko na użycie interaktywne.Proponuję zajrzeć do org-src-font-lock-fontify-block, który zapewnia tę funkcjonalność dla bloków źródłowych w trybie org. Wydaje się, że po prostu skopiuj odpowiednie części do innego bufora, włącz tam tryb główny, a następnie skopiuj tekst z powrotem z powrotem. Hackish, ale wydaje się, że działa.
źródło