EMACS DEFAUT 글꼴 얼굴을 버퍼/모드로 설정하십시오
-
22-08-2019 - |
문제
EMACS가 모드 당 텍스트 스타일을 기준으로 사용하는 기본 얼굴을 어떻게 변경합니까?
예를 들어, 기본 고정 폭 글꼴이 포함 된 얼굴 사용자 정의에 이미 만족한다고 가정 해보십시오. 그러나 하나의 특정 모드에서 (markdown-mode.el
, 말), 기본 글꼴이 다양한 범위가되기를 원합니다.
Markdown-Mode를위한 독창적 인 헤더, 링크 등을 쉽게 스타일링하기 쉽습니다. 스타일링 된 텍스트 위에 커서를 놓고 간단히 배치하십시오. M-x describe-face
, 그런 다음 링크를 클릭하여 사용자 정의하십시오.
그러나 기본면은 다른면이 지정되지 않은 경우 사용되는 얼굴입니다. 따라서 Markdown 모드에만 국한되지 않으며 수정 된 경우 다른 모든 모드에 영향을 미칩니다.
어떤 마법을 넣을 수 있습니까? markdown-mode-hook
이 모드를 사용하여 버퍼의 기본면을 설정하려면?
해결책
이와 같은 것은 어떻습니까 :
(add-hook 'markdown-mode-hook (lambda () (variable-pitch-mode t))
그런 다음 사용자 정의 할 수 있습니다 variable-pitch
얼굴과 버퍼의 다른면은 기본면 대신 이것으로부터 상속됩니다.
문서를 읽으십시오 buffer-face-mode
더 많은 사용자 정의 세부 사항. (Bufface도 사용됩니다 text-scale-increase
그리고 text-scale-decrease
... 매우 유용한.)
다른 팁
나는 이것이 그 자리에서 파악하기에는 너무 복잡하고 이미 시간 예산을 날려 버렸 기 때문에 부분적인 대답을해야합니다.
얼굴은 프레임 속성입니다. 프레임은 동시에 여러 버퍼를 표시 할 수 있습니다. 모드는 버퍼 속성입니다. 모드별로 얼굴을 변경하는 방법을 묻습니다. 이 모든 것을 결합하면 질문에 하나의 완전한 정답이 없을 것 같습니다.
주어진 프레임이 둘 이상의 버퍼를 표시하지 않는다고 가정하면 원하는 답변을 근사화 할 수 있습니다. 실제로 이와 같은 것을 사용하여이를 달성 할 수 있지만 Special-Display-Regexps와 Markdown 모드 버퍼 이름과 일치하는 Regexp 세트를 사용하도록 수정했습니다.
(append special-display-buffer-names
'("*VC-log*"
"*Help*"
("*Completions*"
(height . 25)
(font . "8x13"))))
그러나 이것은 아마도 당신이 원하는 것이 아닐 것입니다. 귀하의 질문은 단일 프레임의 얼굴 특성을 변경한다는 것을 암시하는 것 같습니다.
다시 프레임이 한 번에 하나 이상의 버퍼를 표시하지 않는다고 가정하면 스위치 투 더퍼를 조언 할 수 있습니다. 그러나 그것은 충분히 낮은 수준이 아니고 너무 느릴 수 있습니다. (테스트되지 않은)
(defadvice switch-to-buffer (after switch-to-buffer activate compile)
"change the frame's default face after switch-to-buffer"
(doSomethingToChangePropertiesOfDefaultFace))
그리고 지금 내 실제 (불완전한) 답변을 위해 ...
더 복잡하지만 더 나은 접근 방식은 Markdown-Mode에게 아직 내장 된 얼굴 중 하나가 할당되지 않은 모든 지역에 새로운 얼굴을 사용하도록 지시합니다. 카피 페이스로 새 얼굴을 만들고 세트 페이스*로 흥미로운 속성을 줄 수 있습니다.
Markdown-Mode의 Font-Lock-Defaults를 수정하여 Font-Lock.el의 Line 946 근처의 주석 블록에 설명 된대로 기본 Font-Lock Fontify-Region-Function을 무시합니다. 아마도 매우 약간 수정 된 글꼴로 된 록-디퍼 폴리 파이션 지역을 사용할 수있는 직후에 한 번의 추가 단계를 수행 할 수 있습니다.
(unless font-lock-keywords-only
(font-lock-fontify-syntactically-region beg end loudly))
여분의 단계는 폴트 잠금 장치가 합성 된 지역의 지역이하는 것과 유사한 지역을 구문 분석 하여이 지역을 "흥미로운"하위 지역으로 나눕니다. 그러나 이번에는 기본 얼굴이있는 하위 지역을 발견하고 이전에 만든 새로운 얼굴에 해당 하위 지역을 텍스트 프로파일로 제공합니다.
이 모든 것에서 .Emacs 파일에 몇 줄의 ELISP 라인이되어야하며, 원본과 약간의 차이가있는 Font-Lock-Default-Fontify-Region의 사본을 만들어야합니다 (새 기능 하나 호출). 또한 Font-Lock Fontify-Syntactally Region의 사본을 만들어 입찰을 수행하도록 수정하십시오 (가장 어려운 부분).
실제로, "후"조언을 조언한다면 글꼴로 Fontify-Syntactically 영역을 조언한다면 글꼴 잠금 장치 또는 글꼴 잠금 장치 Fontify-Region을 수정할 필요조차 없을 것입니다.
그만큼 variable-pitch
-모드는 굉장합니다. 이 스레드를 통해 그것에 대해 알게되었습니다. 그러나 더욱 굉장하게 만들 수 있습니다.
(dolist (hook '(erc-mode-hook
LaTeX-mode-hook
org-mode-hook
edit-server-start-hook
markdown-mode-hook))
(add-hook hook (lambda () (variable-pitch-mode t))))
Sans-Serif 글꼴을 목록에 원하는 모드를 추가하십시오.
EMACS 버전 22.3.1의 경우에도 실제로 간단합니다…
다음을 시도해보십시오.
(progn
(set-buffer "your buffer name here")
(overlay-put (make-overlay 0 (buffer-size)) 'face 'your-face))
Emacswiki에서 매우 편리한 코드 블록이 있습니다. 이것의 장점은 글꼴면뿐만 아니라 편리하게 구성 할 수 있다는 것입니다. :height
, :width
등도 마찬가지입니다
;; Use variable width font faces in current buffer
(defun my-buffer-face-mode-variable ()
"Set font to a variable width (proportional) fonts in current buffer"
(interactive)
(setq buffer-face-mode-face '(:family "DejaVu Sans" :height 100 :width semi-condensed))
(buffer-face-mode))
;; Use monospaced font faces in current buffer
(defun my-buffer-face-mode-fixed ()
"Sets a fixed width (monospace) font in current buffer"
(interactive)
(setq buffer-face-mode-face '(:family "Consolas" :height 100))
(buffer-face-mode))
;; Set default font faces for Info and ERC modes
(add-hook 'erc-mode-hook 'my-buffer-face-mode-variable)
(add-hook 'Info-mode-hook 'my-buffer-face-mode-variable)
결합 load-theme-buffer-local
패키지, 버퍼의 색상 테마를 쉽게 지정할 수도 있습니다.
(defun my-buffer-face-mode-variable ()
"Set font to a variable width (proportional) fonts in current buffer"
(interactive)
(setq buffer-face-mode-face '(:family "DejaVu Sans" :height 100 :width semi-condensed))
(buffer-face-mode)
(load-theme-buffer-local 'leuven (current-buffer)))