Emacsのデフォルトのフォントフェイスパーバッファ/モードを設定します。
-
22-08-2019 - |
質問
どのようにEmacsがあたり、モードごとにスタイルのテキストに使用するデフォルトの顔を変更できますか?
たとえば、私はすでにデフォルト固定幅フォントを含め、私が持っている顔のカスタマイズ、と満足していると言います。しかし、ある特定のモード(markdown-mode.el
、と言う)で、私はデフォルトのフォントは可変幅になりたい。
これは、マークダウン・モード用のユニークなスタイルのヘッダ、リンクなどに簡単です:単にそれをカスタマイズするには、リンクをクリックして、書式付きテキストおよびM-x describe-face
の上にカーソルを置く
しかし、デフォルトの顔は、他の顔が指定されていない場合に使用面であるので、マークダウンモードに固有のものではなく、変更した場合は他のすべてのモードに影響します。
どのような魔法の私は、このモードを使用して、バッファのデフォルトの顔を設定する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
...非常に便利に使用されます。)
他のヒント
これはその場で把握することが複雑すぎるので、私は部分的な答えを与えるために持っていると私はすでに私の時間の予算を吹いています。
フェイスフレームプロパティです。フレームは、同時に複数のバッファを表示することができます。モードは、バッファプロパティです。あなたはあたりのモード毎に顔を変更する方法を尋ねます。このすべてを組み合わせることで、質問が単一完全に正しい答えを持っていないことはできないと思われます。
あなたが与えられたフレームが複数のバッファを表示しないことを前提とした場合、あなたは希望の答えを近似することができます。あなたが実際にこのようなものではなく、専用ディスプレイ-正規表現とあなたの値下げモードバッファ名に一致する正規表現のセットを使用するように変更することを達成することができます。
(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))
そして今、私の実際の(不完全)答えのために...
より良い、より複雑ではあるが、アプローチは、すでにビルトイン面の一つに割り当てられていないすべての領域のための新しい顔を使用するようにマークダウンモードを指示します。あなたは、コピー、顔と新しい顔を作成し、それをセット顔面*との興味深い性質を与えることができます。
、「フォント表示化機能」を開始しますフォントlock.elのライン946近くのコメントブロックで説明したように、デフォルトのフォント・ロック・フォント表示化領域-機能を無効にするために値下げモードのフォント・ロック・デフォルト値を変更します。
:あなたは、おそらくそれがない直後に一つだけの余分なステップを行い非常にわずかに変更されたフォントロックデフォルト - フォント表示化領域を使用することができます (unless font-lock-keywords-only
(font-lock-fontify-syntactically-region beg end loudly))
余分なステップが同様の地域を解析するフォント・ロック・フォント表示化 - 構文的領域行い、「面白い」サブ領域に地域を壊します。しかし、この時間はデフォルトの顔を持っていて、以前に作成した新しい顔にそれらのサブ領域にテキスト・プロパティを置くサブ領域を見つけます。
このすべてで、それはあなたの.emacsファイル内のelispの唯一の数行でなければなりませんように感じ、プラス元からのわずかな差分を持っているフォントロックデフォルト - フォント表示化領域(1新しいを呼び出すのコピーを作成します機能)に加え、フォント・ロック・フォント表示化 - 構文的領域のコピーを作成し、あなたの入札(最も難しい部分)を行うには、それを修正します。
実は、アドバイスフォント・ロック・フォント表示化 - 構文的領域「の後に」あなたは、あなたはおそらくフォント・ロック・デフォルトフォントロックデフォルト - フォント表示化領域を変更する必要がない場合ます。
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))))
ちょうどあなたがリストにしてサンセリフのフォントを好きなモードを追加。
それも、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)))