문제

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)))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top